In 2025, nearly half of the crawl problems reported to the Google team in charge of its crawler came from sites’ filter navigation. Nearly a quarter came from action links, such as add-to-cart buttons. And for one of those links, Google’s team ended up opening an issue in WooCommerce’s code repository itself.
SEO for a WooCommerce store does not look like SEO for a blog. You have to describe products to Google, feed Merchant Center, manage variations, filters, stock-outs and categories, without letting the crawler get lost in thousands of useless addresses.
This guide relies on Google’s documentation and on what WooCommerce 11.1 really does, checked in its code in October 2026. It covers structured data, Merchant Center and free listings, variations, faceted navigation, stock-outs, category pages, product pages and internal linking. It also tells how Google and WooCommerce fixed a crawl waste problem together in eight days.
What Google reads on a WooCommerce store
Product snippets and merchant listings
Google distinguishes two uses of product markup. Product snippets cover pages where people cannot buy directly, such as a comparison or a review. Merchant listings cover pages where the customer can buy: as is every product page in a store.
Only pages that allow a purchase are eligible for merchant listings, with a price greater than zero. Category pages are not: product rich results only concern pages devoted to a single product, or to variants of the same product.
Structured data, a Merchant Center feed, or both
Google reads products in two ways: through the pages’ structured data, and through a feed sent to Merchant Center. Its documentation recommends both, which maximize eligibility for the various displays and help it verify the data. Since 2022, a store can appear in Search’s merchant listings without a Merchant Center account. The Shopping tab, on the other hand, requires that account.
For Search’s artificial intelligence features, Google states that no special markup is needed, and that Merchant Center feeds help products be visible there.
Product structured data: what WooCommerce does on its own
What core already prints
WooCommerce itself produces Product JSON-LD markup on every product page: name, address, description, main image, SKU, price, availability, reviews and average rating. The GTIN, EAN or ISBN code has had a dedicated field since version 9.2 and has been part of the markup since 9.3. The brand is added through brand management, built into core since version 9.6.
A few details matter. The description used is the short description if there is one, otherwise the long description. Only the main image appears in the markup. For a simple product on sale, WooCommerce gives the sale price and marks the regular price as a list price, a value Google still accepts during a transition period.
What is missing: shipping, returns, condition, variants
In version 11.1.2, core markup contains no shipping costs, no return policy, no item condition and no variant group. Search Console warnings about those fields are therefore expected. A store-level return policy markup exists in WooCommerce’s development branch, planned for a future release, but it is not published yet.
An SEO plugin can complete or replace this markup. The golden rule remains having a single source of product markup, to avoid two contradictory graphs. Our comparison of the best WordPress SEO plugins details what each one does for WooCommerce.
Declaring shipping and returns once for the whole site
Google no longer asks you to repeat shipping and returns on each product. It recommends declaring a global return policy at the organization level, and offers the same approach for shipping. Since November 2025, Search Console’s shipping and returns setting has been open to every site Google identifies as a merchant, and it takes precedence over the site’s structured data.
For those who prefer markup, the minimal form looks like Google’s example below, with values to replace by the store’s real policy.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "OnlineStore",
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": ["FR", "BE"],
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
}
}
</script>
Checking the result
Google’s Rich Results Test shows what the crawler reads on a product page. In Search Console, the reports devoted to merchant listings and product snippets list errors and warnings site-wide. A warning on an optional field does not prevent display; an error on a required field does.
Merchant Center and free listings
What free listings are, and what they exclude
Since April 2020, Google has shown merchants’ products for free in the Shopping tab, then in Search, Images, YouTube and other surfaces. These free listings only feature product pages, never the home page, shipping terms or category pages.
They are on by default in most cases, but Google warns that this permission does not guarantee display. A return policy visible on the site and shipping settings are among the requirements.
Google for WooCommerce and the end of the Content API
The free plugin WooCommerce publishes with Google, formerly called Google Listings & Ads, has been named Google for WooCommerce since July 2024. It syncs products with Merchant Center without a feed file to maintain, and has more than 800,000 active installations as of October 2026.
The Content API for Shopping, Merchant Center’s legacy API, reached its sunset on August 18, 2026, with a full shutdown planned for early 2027. Google for WooCommerce has used the new Merchant API since its version 3.8.0, released in July 2026. If you run an older version, update it without waiting.
The consistency rule between page, markup and feed
Merchant Center requires consistent availability across the product page, the structured data, the checkout page and the feed. A mismatch leads to the product being disapproved. The same logic applies to price: a feed price that does not match the price Google reads on the landing page or at checkout triggers a price mismatch disapproval.
Feed descriptions also follow precise rules: no promotional text, no links, no capitals for emphasis, and the essential information in the first characters. Text written by artificial intelligence must be declared as such in a dedicated attribute.
Variations and parameters: WooCommerce’s own duplicate content
Variation addresses and the canonical tag
A variation is preselected through an address parameter, such as ?attribute_pa_size=large. Google recommends exactly this model for sites where all variants live on a single page: one canonical address for the group, and each variant reachable through a parameter.
WordPress produces the canonical tag of single pages without parameters, so variation addresses point to the main product page. Archive pages, however, such as categories, tags, the shop and filtered pages, receive no canonical tag from core: that is one of the things an SEO plugin brings. Google also points out that some duplicate content is normal and violates none of its rules.
Categories in permalinks
With a product base that includes the category, the same product can appear under several addresses. Since version 9.5, WooCommerce redirects an address with the wrong category to the product’s canonical address. Since 10.5, it picks the deepest category in the hierarchy, and automatically redirects old addresses with a 301.
Nearly five years to fix a variation’s price
An issue opened in September 2021 described a problem merchants knew well. On a variation’s address, WooCommerce showed the parent product’s price range in the markup. Google read the lowest price, Merchant Center saw a mismatch with the variation price sent in the feed, and disapproved the product.
The fix arrived with WooCommerce 11.0, in August 2026, in a release devoted to clearing the backlog of old issues. When every attribute is in the address and points to a single variation, the markup now contains a single offer, at the variation’s exact price.
Faceted navigation: what Google has asked since December 2024
Block or optimize
In December 2024, Gary Illyes, an analyst at Google, published a post and documentation on faceted navigation, the price, color, size or brand filters that multiply addresses. Google describes it as by far the most common source of overcrawling reported by site owners.
Google offers two paths. If filtered pages do not need to be indexed, block their crawling in robots.txt, or use URL fragments, which the crawler ignores. If they need to be crawled, use the & separator, keep a stable filter order and return a 404 error when a combination yields no results. Canonical and nofollow tags are considered less effective in the long term.
WooCommerce’s filter block parameters
WooCommerce’s product filters block uses parameters such as min_price, max_price, rating_filter, filter_stock_status, and filter_ followed by the attribute name. Classic sorting goes through orderby. WooCommerce blocks none of these parameters in its robots.txt: the decision belongs to each store.
A robots.txt for filters
For a store that does not want its filtered pages crawled, an example built on Google’s syntax and WooCommerce’s parameter names looks like this. It is not an official recommendation: test it on your own site before applying it.
User-agent: *
Disallow: /*?*filter_
Disallow: /*?*query_type_
Disallow: /*?*min_price=
Disallow: /*?*max_price=
Disallow: /*?*rating_filter=
Disallow: /*?*orderby=
The block also uses categories, tags and brands for category, tag and brand filters. These generic names may be used by other plugins, so check them before blocking them.
A classic trap lurks here. Robots.txt controls crawling, not indexing: a blocked address can stay in the index. If filtered pages are already indexed, add a noindex tag first, wait for them to drop out, then block. Google cannot read a noindex on a page it is not allowed to crawl.

The real case: when Google opened an issue at WooCommerce
This story is documented by WooCommerce’s code repository, by Google Search’s official podcast and by Search Engine Journal. It shows that a crawl problem can come from the platform itself, and that an upstream fix can relieve every store that updates, all at once.
Buttons that double the addresses
On a classic theme, the add-to-cart button in product lists is a link to an address such as ?add-to-cart=123, with a nofollow attribute. Every product in every category thus exposes an action address the crawler can follow. Block themes mostly use a button with no address, but not in every case.
In June 2024, Gary Illyes had already publicly asked sites to block add-to-cart and wishlist addresses, useless for crawlers. In July 2025, a merchant had opened an issue at WooCommerce on the same subject. It was closed as not planned two days later, the maintainer replying that the requested setting would not be built, as a contributor had pointed out, and noting that the text looked AI-generated and unvalidated.
The September 8, 2025 issue
On September 8, 2025, Gary Illyes himself opened an issue in WooCommerce’s repository. His observation was brief: crawlers keep crawling WooCommerce’s action URLs, useless for them and for site owners alike, and the parameter-less address is the canonical one anyway. He proposed a robots.txt rule and judged that potentially every WooCommerce site was affected.
Four days later, a WooCommerce developer opened a pull request. The discussion covered the exact form of the rule, and the final version adds two, to also cover the parameter when it is not in first position. On September 16, eight days after the report, the change was merged. It shipped with WooCommerce 10.3, in October 2025.
What Google said about it
On February 3, 2026, in a Search Off the Record episode devoted to the year in review, Gary Illyes and Martin Splitt went back over the reports received. Faceted navigation accounted for nearly half of the validated problems, action parameters nearly a quarter. A single add-to-cart parameter, Gary Illyes explained, is enough to double a site’s URL space.
He described how the team traced these parameters back to WordPress plugins, and opened issues where their code was public. WooCommerce picked up the problem almost immediately and solved it. The issue opened with another plugin, not named, was still waiting. Search Engine Journal reported the episode the same day.
The follow-ups, and what to check
The two add-to-cart lines have not changed since 10.3. The other lines WooCommerce adds to robots.txt, those for its log and downloadable-file folders, were fixed later: 10.7 for sites installed in a subfolder, 11.1 for installs that move the wp-content folder or the uploads. On a standard install running 11.1.2, WordPress’s virtual robots.txt should contain these lines.
User-agent: *
Disallow: /wp-content/uploads/wc-logs/
Disallow: /wp-content/uploads/woocommerce_transient_files/
Disallow: /wp-content/uploads/woocommerce_uploads/
Disallow: /*?add-to-cart=
Disallow: /*?*add-to-cart=
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Three lessons emerge. The nofollow attribute on the buttons was not enough to stop crawling. The rule only lives in WordPress’s virtual robots.txt: a physical robots.txt file at the site root replaces it, and the rule is then absent. Finally, WooCommerce only dealt with action addresses: filters, close to half of the reports Google received, remain your responsibility.
Open your store’s /robots.txt address and look for the two add-to-cart lines. Search Console’s crawl stats report then shows how the crawler spreads its requests, although Google aims it at advanced users and says a site with fewer than a thousand pages should not need it.
Stock-outs and discontinued products
Temporary stock-out: keep the page
Google is explicit: an out-of-stock product should not go through Search Console’s removals tool. Better to keep the page online and mark it as unavailable. WooCommerce’s markup handles three states: in stock, on backorder and out of stock.
In 2022, Google’s John Mueller explained that a page that only announces a stock-out may be treated like a soft 404, while a page rich in product information can stay relevant. An out-of-stock product page therefore keeps all its content, its reviews and its links to similar products.
Discontinued product: redirect or remove
A product discontinued for good follows another rule. If it has a successor or a close equivalent, a permanent 301 redirect passes its address on. If it has no replacement, a 404 or 410 error is the correct response, and Google treats both codes the same way. In Merchant Center, a discontinued product is removed from the feed instead of being marked out of stock.
The setting that hides out-of-stock products
WooCommerce’s inventory settings offer to hide out-of-stock products from the catalog. According to its code, this setting only removes them from product lists: their address stays reachable. A hidden product therefore loses its links from categories while staying indexable, which weakens its page without removing it from Google.
Category pages: a little content, many links
A hierarchy Google can follow
Google recommends a simple structure: links from menus to categories, from categories to subcategories, then to every product. Best sellers can also receive links from the home page or articles. When not everything can be linked, a sitemap or a Merchant Center feed takes over.
Category text
In 2021, John Mueller explained that a page needs enough information for Google to understand its topic, and that extra text mostly helps when product names are not self-explanatory. One to three sentences of context at the top of the category are often enough, in his words, with no wall of text written for the crawler. In WooCommerce’s classic templates, the category description only shows on the archive’s first page.
Pagination and empty categories
For pagination, Google asks for a unique address per page, a canonical tag specific to each page, and standard links between them. Do not point later pages to the first as the canonical version, and know that Google no longer uses previous and next page tags. These lists’ performance matters too: our guide to WordPress Core Web Vitals fixes covers the levers.
An empty category should get a noindex tag. If it disappears from navigation, Google suggests considering a 404 error.
Product pages: descriptions and images
Descriptions written for the customer
WooCommerce’s short description serves as the description in the markup, which is reason enough to polish it. Text generated by artificial intelligence is not banned, but Google points out that mass-producing pages without value for users can fall under its scaled content abuse policy. A product page copied word for word from the manufacturer adds nothing that other resellers do not already offer.
Images Google can read
Google does not index images set in CSS: they must be real image tags, with a descriptive file name and alt text. For merchant listings, Google recommends several images of at least 50,000 pixels each. Merchant Center will require a minimum of 500 by 500 pixels from January 31, 2027, and recommends 1,500 by 1,500.
By default, WooCommerce shows the main image 600 pixels wide, and catalog thumbnails at 300 pixels. Since version 11.1, per-variation image galleries are available in every store. Our comparison of the best image optimization plugins helps lighten these files without visible loss.
Internal linking and breadcrumbs
Links the crawler can follow
Google only follows links written as an <a> tag with an href attribute. Every important page should receive at least one link from another page on the site, with descriptive anchor text. WooCommerce’s related products, upsells and cross-sells naturally create these links between product pages.
Since version 11.1, WooCommerce removes the nofollow attribute from product buttons that simply lead to the product page, while keeping it on add-to-cart links and links to external products.
WooCommerce’s breadcrumbs and core’s
WooCommerce’s breadcrumbs, in the classic version as well as the block, produce BreadcrumbList markup. The Breadcrumbs block added to core with WordPress 7.0 produces none. Replacing WooCommerce’s block with core’s therefore removes that markup, unless an SEO plugin provides it. Since January 2025, Google has only shown this rich result on desktop.
Summary table
| Topic | What Google says | What WooCommerce 11.1 does | Action |
|---|---|---|---|
| Product markup | Merchant listings on purchase pages | Product with price, GTIN, brand, reviews | A single markup source |
| Shipping and returns | Organization level or Search Console | Missing from the markup | Search Console setting or global markup |
| Merchant Center | Free listings, product pages only | Google for WooCommerce, Merchant API | Latest version, at least 3.8.1 |
| Filters | Block or structure | No blocking | Decide and write the robots.txt |
| Add to cart | Block action addresses | Blocked since 10.3 | Check the served robots.txt |
| Stock-out | Keep the page, mark it out of stock | Availability in the markup | Rich page, similar products |
| Discontinued product | 301 if equivalent, otherwise 404 or 410 | No automatic handling | Redirect, remove from feed |
| Breadcrumbs | Typical user path | Marked up by WooCommerce, not by core | Keep WooCommerce’s block |
Frequently asked questions
Do I need a Merchant Center account?
Not to appear in Search’s merchant listings, which can rely on structured data. It is, however, required for the Shopping tab and free listings, and Google recommends combining both sources.
Should filtered pages be indexed?
Rarely. A filter combination that matches a real search, such as a color within a category, may deserve a dedicated page. The others are better blocked in robots.txt, after they drop out of the index if they are already in it.
What should I do with a permanently discontinued product?
A 301 redirect to its successor or the closest product if there is one, otherwise a 404 or 410 error. Remove it from the Merchant Center feed as well.
Does WooCommerce handle structured data on its own?
Largely. Core produces solid Product markup, but without shipping, returns, condition or variant group. Search Console and an SEO plugin fill in what is missing.
Is WooCommerce’s robots.txt enough?
It blocks add-to-cart addresses since version 10.3, provided no physical robots.txt file replaces it. It blocks no filter and no sorting.
How much text on a category page?
Enough for the topic to be clear, often one to three sentences. A long text written for the crawler does not help the customer, who comes looking for products.
Conclusion
SEO for a WooCommerce store comes down to a few decisions: a single source of product markup, shipping and returns declared once, an up-to-date Merchant Center feed, controlled filters, stock-outs handled without deleting pages, and categories that tie everything together. WooCommerce already does part of the work, and Google documents the rest precisely.
The story of Google’s issue is also a reminder that an up-to-date store benefits from fixes it never asked for. SEO does not stop at the product page: a fast, clear checkout then turns those visits into sales, as our guide to WooCommerce checkout optimization shows.
Sources
- Google Search Central. Introduction to Product structured data
- Google Search Central. Merchant listing (Product, Offer) structured data
- Google Search Central. Product snippet structured data
- Google Search Central. Product variant structured data
- Google Search Central. Merchant return policy structured data
- Google Search Central Blog, Pascal Fleury and Irina Tuduce (November 12, 2025). More ways to share your shipping and returns policies with Google
- Google Search Central Blog (September 2022). Merchant listings
- Google Search Central. AI features and your website
- Google Merchant Center Help. Free listings for products
- Google Merchant Center Help. Availability
- Google Merchant Center Help. Description
- Google Merchant Center Help. Image link
- Google for Developers. Content API for Shopping: Deprecation and sunset
- WordPress.org Plugins. Google for WooCommerce
- Google Search Central Blog, Gary Illyes (December 17, 2024). Crawling December: Faceted navigation
- Google for Developers. Managing crawling of faceted navigation URLs
- Google Search Central. Designing a URL structure for ecommerce sites
- Google Search Central. What is canonicalization
- Google Search Central. Block Search indexing with noindex
- Google Search Central. Introduction to robots.txt
- GitHub, WooCommerce (September 23, 2021). Issue 30799, Variable product schema structured data getting disapproved
- GitHub, WooCommerce (July 3, 2026). Pull request 66043
- WooCommerce Developer Blog, Darren Ethier (January 13, 2026). Product permalink changes coming in WooCommerce 10.5
- Search Engine Journal, Matt G. Southern (June 2024). Google Reminds Websites To Use Robots.txt To Block Action URLs
- GitHub, WooCommerce (July 13, 2025). Issue 59627
- GitHub, WooCommerce, Gary Illyes (September 8, 2025). Issue 60810, robots.txt disallow ?add-to-cart=
- GitHub, WooCommerce (September 16, 2025). Pull request 60899, Add add-to-cart paths to robots.txt file
- Search Off the Record, Martin Splitt and Gary Illyes (February 3, 2026). Crawling Challenges: What the 2025 Year-End Report Tells Us
- Search Engine Journal, Matt G. Southern (February 3, 2026). Google’s Crawl Team Filed Bugs Against WordPress Plugins
- GitHub, WooCommerce. changelog.txt
- WP Engine. Read and use robots.txt
- Search Console Help. Crawl Stats report
- Google Search Central. Temporarily pause or disable a website
- Search Engine Journal, Matt G. Southern (April 4, 2022). Google: Out Of Stock Products May Impact Search Visibility
- Google for Developers. How HTTP status codes affect Google’s crawlers
- Google Search Central. Help Google understand your ecommerce site structure
- Search Engine Journal (September 24, 2021). Google: Extra Content Not Always Needed For Category Pages
- Google Search Central. Pagination, incremental page loading, and their impact on Google Search
- Google Search Central. Using generative AI content
- Google Search Central. Image SEO best practices
- WooCommerce Developer Docs. Image sizes
- WooCommerce Developer Blog (September 3, 2026). WooCommerce 11.1 release notes
- Google Search Central. Link best practices for Google
- GitHub, WooCommerce (July 22, 2026). Pull request 66743
- Google Search Central. Breadcrumb structured data
- Google, The Keyword, Bill Ready (April 21, 2020). It’s now free to sell on Google
- Google Search Central. AI optimization guide
- WordPress.org Plugins SVN. Google for WooCommerce, changelog.txt
- Google Search Central. Latest documentation updates
- WooCommerce Developer Blog (August 4, 2026). WooCommerce 11.0
- Google Search Central. Where ecommerce data can appear on Google
- Search Console Help. Shipping and returns settings
LaFactory designs, builds and maintains WordPress and WooCommerce sites, and develops its own plugins. Talk to us about your WordPress project.
