WooCommerce SEO: A consultant’s checklist for store owners

September 30, 2026

Laptop with an online store's product grid beside a ticked checklist on a clean workspace

A store owner opens the Pages report in Search Console and scrolls the list of indexed URLs. Between the products they actually sell sit /product-tag/ archives, ?orderby=price versions of the shop page, and a handful of ?add-to-cart= links. None of those pages was ever meant to rank.

Most of this gets fixed with settings changes you can make this week.

This is the WooCommerce SEO checklist from a technical consultant, in the order we run it on client stores. Phase 1 fixes the blockers: indexation decisions, then product pages. Phase 2 scales the wins with speed, plugin hygiene and blog content that feeds your categories. It’s the same sequence behind our WooCommerce SEO consulting work.

WooCommerce is WordPress with a catalog attached, so its problems come from templates and URL parameters repeating across hundreds or thousands of products. Much of what follows is specific to that setup. Stores on hosted platforms run into a different list, which we cover in what actually moves rankings for Shopify stores.

Google Search Console Pages report showing indexed WooCommerce product tag and p

Each fix is labeled by who can do it, and most need no developer

Every item below opens with a verdict, followed by a bracketed label naming the effort and the owner.

  • Settings change (store owner): a toggle or field in wp-admin, such as turning off search visibility for product tags in Yoast or Rank Math.
  • Plugin config (store owner or marketer): deciding how a plugin behaves, such as which one outputs your Product schema.
  • Dev task (developer): code, template or server work, such as controlling where cart fragments load.

Your SEO plugin is the tool, and the decisions below are what you do with it. Labels matter because they’re how a 40-item audit gets implemented instead of shelved: you can clear every settings change in an afternoon and hand the rest to a developer as tickets. Each item closes with the Search Console report or URL check that confirms the fix held.

Decide what Google may index before you fix anything else

Speed and content work are wasted on pages that shouldn’t be in the index, so indexation comes first. Crawl budget, the number of URLs Google will crawl on your site in a given period, is finite, and every sort order or tag archive spends some of it.

On large ecommerce catalogs with faceted navigation, visibility is decided by which URLs you let in. That was the core of our faceted navigation and indexation work during Academy Sports’ platform migration, where the site held or improved its search visibility through the switch. Fixing WooCommerce archive indexation follows the same logic at a smaller scale.

Product categories stay indexed and earn real copy

Keep product categories indexed and give each one written content. [Settings change plus content workload, store owner] Categories are your transactional landing pages, and out of the box each one is a product grid with a title. Add a short intro through the Description field under Products > Categories (most themes print it above the grid) and a few category FAQs below, written for the commercial query. Confirm by filtering the Pages report to /product-category/ and checking those URLs sit under Indexed.

Product tags usually get noindex

Noindex product tags. [Settings change, store owner] Tag archives regroup products your categories already cover, usually with fewer items and no copy, which hands Google thin near-duplicates to choose between. Before you flip the setting, filter Search Console Performance to /product-tag/. If one tag earns impressions for a real search and no category matches it, turn it into a category instead of hiding it.

In Yoast the switch sits in Yoast SEO > Settings under the product tags taxonomy. In Rank Math it lives under Titles & Meta > Product Tags > Robots Meta. Over the following weeks, tag URLs should move to “Excluded by noindex tag” in the Pages report.

Attribute archives depend on whether people search the attribute

Index an attribute archive only when shoppers search for the attribute itself. [Settings change, store owner] Out of the box, WooCommerce creates no attribute archives. They appear only when “Enable archives?” is ticked on an attribute under Products > Attributes. A brand or material with real search demand can earn that page. Size and colour almost never do. If an enabled archive shows no impressions after a couple of months, switch it back off.

Filter, sort and add-to-cart URLs need crawl control

Put filter, sort and add-to-cart URLs under crawl control. [Plugin config or dev task, marketer and developer] WooCommerce’s sort dropdown creates ?orderby= URLs, filter plugins add their own parameters, and the default shop buttons link to ?add-to-cart= URLs. WooCommerce marks those buttons nofollow and adds noindex to cart, checkout and account pages, yet crawlers still discover the parameter URLs. Internal search results stay out of the index too.

Two older tools won’t help. Google retired the URL Parameters tool in Search Console in 2022 and stopped using rel=next/prev as an indexing signal in 2019. One host and one protocol is already handled on most hosts. How you control the rest depends on your goal, and the next section covers that choice. Confirm when the Pages report stops listing parameter URLs as indexed.

WooCommerce shop page URL with orderby and filter parameters in the browser addr

Out-of-stock products stay live

Keep temporarily out-of-stock products published. [Settings change, store owner] The page keeps its links and history, and WooCommerce’s core schema already reports availability as OutOfStock. Leave “Hide out of stock items from the catalog” under WooCommerce > Settings > Products > Inventory unticked, or accept losing those internal links.

Discontinued products redirect to the closest replacement

Redirect discontinued products to the nearest replacement. [Plugin config, store owner] A product that’s never coming back still carries the links and impressions it earned. Send it with a single 301 to the closest replacement or its parent category, pointing straight at the final URL with no chain. Use a 410 only when nothing relevant exists. The redirect managers in Rank Math or Yoast Premium handle this without another plugin.

This is the same end-of-life question we handled on Intel’s retired product content at enterprise scale. Every retired page gets a decision rather than decaying into a soft 404. After deletion, crawl the old URL to confirm one 301 hop, and watch that “Not found (404)” in the Pages report stays flat.

Implementation note. We map each decision to a URL pattern in a spreadsheet, write it up as a spec your developer can build from (or implement it alongside them), and validate in the Pages report after deployment. The spreadsheet is what the developer checks their work against.

A robots.txt block hides the noindex tag you meant Google to see

Here’s how it usually happens. A store adds noindex to its filter URLs through the SEO plugin. Then, to be safe, someone adds the same parameters to robots.txt as Disallow lines. Googlebot obeys the disallow and stops fetching those pages, so it never reads the noindex or the canonical in their HTML. Filter URLs Google already knew about, or finds through links, can stay indexed with no content, listed as “Indexed, though blocked by robots.txt.”

Google’s documentation on noindex states that the tag only works if the page isn’t blocked by robots.txt. Many guides recommend doing both anyway.

Pick one control per URL, chosen by goal. Use a canonical or noindex to consolidate signals on URLs Google already knows. Use disallow only to save crawl on URLs that should never be fetched, such as ?add-to-cart=, and only after any indexed copies have dropped out. Never apply both to the same URL at the same time.

To check, open the Pages report and look for the “Indexed, though blocked by robots.txt” status. Then run a sample filter URL through URL Inspection. If it reports that crawling is blocked, Google can’t see your noindex, and the Disallow line comes out first.

Product pages need original copy, one schema source, and one URL per product

These are the WooCommerce product page optimization steps in the order we apply them.

Manufacturer descriptions put you in a pool with every reseller

Rewrite manufacturer descriptions on your priority products first. [Content workload, store owner or copywriter] The supplier’s text appears on every store carrying the product, so Google has no reason to prefer your copy. Choose the first batch in Search Console. In our experience, products already earning impressions on pages one and two have the most to gain. Write what a buyer needs to choose (fit, materials, use) and the related terms follow on their own. Nobody needs a list of “LSI keywords.” Compare clicks and average position on rewritten URLs across 28-day windows.

Product schema should come from one source

Pick one source for Product schema. [Plugin config, store owner or marketer] Out of the box, WooCommerce outputs Product JSON-LD with price, availability and review data. Yoast WooCommerce SEO and Rank Math each take over or extend that output, and some themes and schema plugins add a block of their own. In our experience, duplicate Product markup is more common than missing markup.

For a clean WooCommerce schema setup, keep one output. Let reviews and aggregateRating come through WooCommerce’s own reviews or a review plugin with supported markup, never a hand-coded block. Fill the GTIN, UPC, EAN or ISBN field on the product’s Inventory tab so identifiers pull from product data. Google’s product structured data documentation lists the required and recommended properties.

Validate with the Rich Results Test, then watch the Product snippets and Merchant listings reports in Search Console. The same clean product data feeds Merchant Center free listings, and it’s what AI answers and zero-click shopping results can parse. You want one Product block in view-source and zero errors in both reports.

Variable products consolidate to the parent URL

Consolidate variable products to the parent URL. [Settings change or dev task, store owner and developer] By default, WooCommerce variations don’t get their own pages. Selecting a colour updates the page in place, and links to a specific variation add parameters like ?attribute_pa_color=blue to the parent URL. Those should canonicalize to the clean parent, which Yoast and Rank Math handle by default. Plugins that split variations into separate products change this. Run a parameter version through URL Inspection and confirm the parent is the Google-selected canonical.

Titles and H1s should agree

Make titles and H1s match. [Settings change, store owner] Set product and category title templates in your SEO plugin with the name first, in readable sentence case, matching the H1 your theme prints. Google rewrites titles that don’t match the page. Search a few product names and compare what displays against what you set.

Speed on WooCommerce is decided by hosting, cart fragments, and the main product image

Google’s Core Web Vitals thresholds are 2.5 seconds for Largest Contentful Paint, 200 milliseconds for Interaction to Next Paint and 0.1 for Cumulative Layout Shift, each assessed at the 75th percentile of real visits. Those are field numbers from real shoppers, so a lab score of 100 on your homepage proves little. Speed optimization for WooCommerce stores starts with finding where the slowness comes from.

Cheap shared hosting can’t cache what WooCommerce needs cached

Move to a hosting tier that supports object caching. [Dev task or hosting decision, store owner and developer] Page caching serves most of a WordPress site from stored copies, but cart, checkout and logged-in sessions bypass it by design, so each of those requests runs PHP and queries the database. Object caching through Redis or Memcached, plus a current supported PHP version, cuts that cost. Entry-level shared plans often offer neither. A time to first byte under about 600 milliseconds is a common benchmark; Google sets no threshold for it. Measure TTFB on an uncached product page. In our experience, stores often spend more on speed plugins than the hosting upgrade that was the real constraint.

Cart fragments can fire an uncached request on every page

Load cart fragments only where a mini-cart needs them. [Dev task, developer] The cart fragments script sends a wc-ajax=get_refreshed_fragments request to refresh the header cart, and that request can’t be page-cached. WooCommerce stopped loading it on every page by default in version 7.8, but many themes and mini-cart widgets still enqueue it sitewide. Open the browser’s Network tab on a blog post. If the request fires with no mini-cart on screen, dequeue it outside the templates that use one, then confirm INP holds in the Core Web Vitals report.

The main product image is usually the LCP element

Size the main product image correctly and never lazy-load it. [Settings change or plugin config, store owner] Set main and thumbnail widths in WooCommerce’s product image settings (Appearance > Customize > WooCommerce > Product Images on classic themes), then regenerate thumbnails so existing images pick up the new sizes. Serve WebP and keep explicit width and height attributes so the layout doesn’t shift. Gallery scripts and optimization plugins sometimes add loading=”lazy” to the main image, which delays LCP. A CDN and deferred scripts help at the margins after that.

WooCommerce product page with main product image highlighted as the Largest Cont

Implementation note. Measure product and category templates, because the homepage is rarely where shoppers land from search. The Core Web Vitals report groups similar URLs, so open a failing group, identify the template behind it, and fix that template once.

Run one SEO plugin and test every conflict on staging

Run one SEO plugin. [Settings change, store owner] Two SEO plugins mean two sets of canonicals, two sitemaps and two Product schema blocks, and the conflict stays invisible until Google picks the wrong one. Open view-source on a product page and search for rel=”canonical” and “@type”: “Product”. Each should appear once. A second SEO plugin adds cost and risk with nothing in return, and installing another plugin is never the first fix.

Page builder output is the other common weight. [Dev task, developer] On product and category templates, builder markup, fonts and scripts are often the heaviest things on the page. For your highest-traffic templates, consider native WooCommerce templates. Test any change like this, and any suspected plugin conflict, on a copy of the site:

  • Clone the store to staging, with search engine visibility discouraged on the copy.
  • Switch to a default theme such as Twenty Twenty-Five.
  • Disable every plugin except WooCommerce.
  • Re-enable plugins one at a time.
  • After each one, re-check the canonical in view-source, the schema in the Rich Results Test (paste the code if staging is password protected), and page speed.

While you’re there, clear expired transients under WooCommerce > Status > Tools. Ask your developer to check for orphaned postmeta and confirm whether High-Performance Order Storage is enabled under WooCommerce > Settings > Advanced > Features. Next step: book the staging clone before anyone changes the live store.

On SITKA Gear’s large apparel catalog, two changes moved transactional rankings. We built dynamic internal links from product pages to their categories, working with a developer on custom logic and CSV import rules keyed to priority keywords. We also added content depth to the category pages themselves. Terms like “hunting jacket” and “hunting clothes” reached the top position, and traffic doubled over the four-year relationship.

WooCommerce gives you a version of that lever by default. Your blog shares the domain, database and editor with your catalog, so a buying guide or how-to can link straight into a /product-category/ page with a descriptive anchor. Map one supporting post per priority category, chosen where Search Console shows the category earning impressions without clicks and where competitors rank with guides you don’t have. Link each post to its category early in the text, and keep categories within a few clicks of the homepage.

Most store blogs are written for traffic and never link to a category. A post that doesn’t point at a money page is a missed internal link. The Links report in Search Console should show internal links to your categories climbing as posts go live. The WordPress side of this, from permalinks to sitemaps, is covered in our WordPress technical SEO work.

We use AI-assisted research to map topics faster. Every brief and draft is human-reviewed, and nothing auto-publishes.

WordPress blog post editor with internal link to a WooCommerce product category

What a WooCommerce SEO consultant should hand you, and what no one can promise

After running this checklist on a store, a competent consultant hands over technical audit findings, severity and impact prioritization, fix specifications for dev, and a validation plan. Each finding is written as issue, impact, evidence, recommendation and acceptance criteria, so your developer knows what done looks like and you can check it. Ask for the prioritized sheet. A 500-page export looks complete and gets shelved.

Implementation is where most audits stall, so ask who builds the fixes. At MDRN SEO, a senior consultant does the work with no delegation, and either implements directly or works beside your developer from the spec. A findings sheet is worth only what gets deployed.

We can commit to findings, fix timelines and 90-day leading indicators: the count of valid indexed pages, and impressions segmented by /product/ versus /product-category/ in Search Console. Positive ROI typically takes 6 to 12 months. Positions can’t be promised by anyone.

A page-one guarantee tells you something about the method behind it.

Before you hire help: questions store owners ask us

Do I need a WooCommerce SEO consultant if I already use Yoast or Rank Math?

The plugin carries out decisions but doesn’t make them. Whether tags get noindex, how filter URLs are controlled and where discontinued products redirect are calls a person makes. If you’ve made those three confidently, you may not need a WooCommerce SEO consultant yet.

How is WooCommerce SEO different from regular WordPress SEO?

The catalog brings problems a blog never has. Templates repeat across thousands of products, parameters create duplicate URLs, Product schema needs a single source, and cart requests skip the page cache. Most SEO for WordPress guides stop at posts and pages.

How long does WooCommerce SEO take to show results?

Indexation changes usually appear in the Pages report within a few weeks. Ranking movement follows over months, and positive ROI typically takes 6 to 12 months.

Can I run this checklist myself?

Yes, for the settings changes. Dev tasks need your developer and a written spec, and past roughly 1,000 products you’ll want a crawl of the whole store before deciding anything, which Screaming Frog’s free version (capped at 500 URLs) won’t cover.

Should I hire a freelancer or an agency for WooCommerce SEO?

Ask who does the work and who implements it before comparing the two. Agencies often split strategy and delivery across a team, while an independent consultant usually does both. Our model, a senior consultant working hands-on with no delegation, is one option. Choose whoever can own both the decision and the build.

Is it worth switching platforms to fix SEO problems?

Rarely, because most problems on this list are settings changes. A platform move, or even changing your /product/ or /product-category/ permalink bases, means redirecting every URL and carries its own ranking risk. If you do move, plan the redirects first; our website migration SEO process starts there.

Start with the pages you never meant to publish

Go back to that Pages report and start with the tag archives and parameter URLs nobody chose to publish. Settle the index decisions first, then product pages, then speed, plugins and blog content, one phase at a time; none of it has to happen in a single sprint. Request a WooCommerce store review against this checklist.

Article by Micah Albert

Micah Albert is an SEO consultant and practitioner with 15 years of experience helping businesses of all types through data‑driven SEO strategies and content. At MDRN SEO, he leads actionable site improvements that raise visibility and authority and increase leads and/or revenue - totally transparent and without the marketing fluff.