Skip to content

WooCommerce SEO: permalinks, filters, robots.txt, product schema and speed

Published 7 October 20269 min readBy the SmoothSeen editorial team

WooCommerce technical SEO comes down to four places: WordPress permalinks, the virtual robots.txt that WooCommerce adds rules to, the Product markup it generates for each product page, and the speed of your theme and plugins. This guide walks through each one in WooCommerce 11.2, the current release, with a tested snippet for filter URLs and AI crawlers.

Key points

  • WooCommerce 11.2.0, released on 7 October 2026, adds five rules to WordPress's virtual robots.txt but leaves sorting and price, attribute and rating filters crawlable.
  • Cart, Checkout and My account get noindex out of the box; category pages depend on your SEO plugin for a canonical, because WordPress only adds one to single pages.
  • The default Product markup includes price, availability, GTIN and brand, but not item condition, shipping or returns.
  • With «Shop base with category», WooCommerce 301-redirects any category path other than the expected one, so each product keeps a single URL.

To check it on your own site: Online shops

On this page

WooCommerce is an ecommerce plugin for WordPress. It provides product pages, categories, the cart and checkout, and with them your store's URLs, its product markup and a handful of crawl rules. Title tags, meta descriptions, category canonicals and usually the sitemap come from your SEO plugin; the redirect to https, compression and headers come from your server. Version 11.2.0 shipped on 7 October 2026 and needs at least WordPress 7.0 and PHP 7.41. What applies to every online shop is in the guide to ecommerce SEO for Google and AI search.

What does WooCommerce control, and what is left to others?

Piece
Product and category URLs
Who sets it
WordPress with WooCommerce
Where you change it
Settings > Permalinks
Piece
noindex on Cart, Checkout and My account
Who sets it
WooCommerce, by default
Where you change it
Nothing to do
Piece
robots.txt
Who sets it
WordPress generates it; WooCommerce adds rules
Where you change it
SEO plugin or the robots_txt filter
Piece
Product and BreadcrumbList markup
Who sets it
WooCommerce
Where you change it
PHP filters
Piece
Title, meta description, category canonical
Who sets it
SEO plugin
Where you change it
Each product and category
Piece
HTTPS, compression, headers
Who sets it
Server or CDN
Where you change it
Apache, Nginx, Cloudflare

WooCommerce adds the noindex for Cart, Checkout and My account through WordPress's wp_robots filter2. Canonicals work differently: WordPress only writes one on single posts, pages and products, built from the permalink without query parameters3. A product category or the shop page has no canonical unless your SEO plugin adds it. Check the source of one category page before you go any further.

Which URL structure should you choose?

It lives in Settings > Permalinks, under Product permalinks. WooCommerce documents four options4:

Option
Default
Example product URL
example.com/product/hoodie-with-logo/
Option
Shop base
Example product URL
example.com/shop/hoodie-with-logo/
Option
Shop base with category
Example product URL
example.com/shop/hoodies/hoodie-with-logo/
Option
Custom base
Example product URL
example.com/your-prefix/hoodie-with-logo/

The product category base (product-category by default) and the tag base are set in the Optional section of the same screen4.

Choose once and leave it alone once the store is indexed. WooCommerce warns that changing the structure changes the URLs of existing products, and that old links will return 404 errors unless you set up redirects4. Do not use the same value for the product base and the category base either.

If you pick Shop base with category and a product sits in several categories, WooCommerce uses a single category path. Open the product through any other path and it 301-redirects to the right URL5. That is good behaviour, but a base without the category is still simpler: the URL stays put when you move a product.

What rules does WooCommerce add to robots.txt?

WordPress has no robots.txt file on disk: it builds one on the fly and lets plugins extend it through the robots_txt filter, which receives the text and a second argument saying whether the site is public6. WooCommerce 11.2.0 adds five lines to the User-agent: * group7:

  • Disallow for three folders under wp-content/uploads: wc-logs, woocommerce_transient_files and woocommerce_uploads.
  • Disallow: /*?add-to-cart= and Disallow: /*?*add-to-cart=, so bots do not fill carts.

There is nothing for sorting (?orderby=) or for the WooCommerce filter blocks, which create parameters such as filter_colour, query_type_colour, min_price, max_price, rating_filter or filter_stock_status. Every combination is a new URL with the same products in a different order or quantity. Google recommends blocking filter URLs you do not need in search with robots.txt8.

A tested must-use plugin for filters and AI crawlers

This snippet does three things: it adds the sorting and filter rules to the general group, adds a group for training crawlers and sets the item condition in the product markup. Save it as wp-content/mu-plugins/store-seo.php:

<?php
/**
 * Plugin Name: Store SEO tweaks
 * Description: Extra robots.txt rules and item condition in WooCommerce's product schema.
 */

// 1. Virtual robots.txt: keep sorting and filters out, block training crawlers.
add_filter( 'robots_txt', function ( $output, $public ) {
	if ( ! $public ) {
		return $output; // The site asks not to be indexed: leave it alone.
	}

	$lines = preg_split( '/\r\n|\r|\n/', rtrim( $output ) );
	$index = array_search( 'User-agent: *', $lines, true );
	$extra = array(
		'Disallow: /*?*orderby=',
		'Disallow: /*?*min_price=',
		'Disallow: /*?*max_price=',
		'Disallow: /*?*rating_filter=',
		'Disallow: /*?*filter_',
		'Disallow: /*?*query_type_',
	);
	if ( false !== $index ) {
		array_splice( $lines, $index + 1, 0, $extra );
	}

	$lines[] = '';
	$lines[] = 'User-agent: GPTBot';
	$lines[] = 'User-agent: ClaudeBot';
	$lines[] = 'User-agent: Google-Extended';
	$lines[] = 'User-agent: CCBot';
	$lines[] = 'Disallow: /';

	return implode( "\n", $lines ) . "\n";
}, 20, 2 );

// 2. Item condition on the offer in WooCommerce's Product markup.
add_filter( 'woocommerce_structured_data_product_offer', function ( $offer, $product ) {
	$offer['itemCondition'] = 'https://schema.org/NewCondition';
	return $offer;
}, 10, 2 );

How we tested it: php -l reports no errors in the official php:8.3-cli image, and we ran it against WordPress's default robots.txt plus WooCommerce's own function. We then checked the output with a matcher that applies Google's rules (wildcards, $, longest rule wins): product pages, categories, /page/2/ and variation URLs such as ?attribute_pa_size=38 stay allowed; ?orderby=price, ?filter_colour=blue, ?min_price=20, ?rating_filter=4 and ?add-to-cart=123 are blocked. If the site has the discourage-indexing box ticked, the filter changes nothing.

Two caveats. A physical robots.txt file in the web root overrides the virtual one, and this filter with it. And if your SEO plugin edits robots.txt, make the changes there so you do not end up with two sources; the guide to WordPress robots.txt for AI crawlers covers Yoast and Rank Math.

On AI: OAI-SearchBot, Claude-SearchBot and PerplexityBot follow the general group, so they can read product and category pages and cite you. GPTBot, ClaudeBot and CCBot collect content to train models, and Google-Extended is a control token that does not affect Google Search910. Blocking them is an editorial choice, not a requirement.

What structured data does WooCommerce generate?

WooCommerce prints a single JSON-LD block in the footer with whichever types apply: Product on product pages, BreadcrumbList if the theme renders breadcrumbs, and WebSite when the shop is the front page11. The brand comes from the brands feature, managed under Products > Brands12. Here is how it compares with what Google asks for in merchant listings13:

Property
name, image, offers
WooCommerce 11.2
Yes
Google (merchant listings)
Required
Property
offers.price, priceCurrency
WooCommerce 11.2
Yes (AggregateOffer range for variable products)
Google (merchant listings)
Required
Property
offers.availability
WooCommerce 11.2
Yes, BackOrder included
Google (merchant listings)
Recommended
Property
sku, description
WooCommerce 11.2
Yes (falls back to the ID without a SKU)
Google (merchant listings)
Recommended
Property
gtin
WooCommerce 11.2
Yes, if the GTIN is valid
Google (merchant listings)
Recommended
Property
brand
WooCommerce 11.2
Yes, if you assign a brand
Google (merchant listings)
Recommended
Property
aggregateRating, review
WooCommerce 11.2
Yes, if there are ratings
Google (merchant listings)
Recommended
Property
itemCondition
WooCommerce 11.2
No
Google (merchant listings)
Recommended
Property
shippingDetails, hasMerchantReturnPolicy
WooCommerce 11.2
No
Google (merchant listings)
Recommended

The GTIN comes from the «GTIN, UPC, EAN, or ISBN» field on the Inventory tab, and WooCommerce only outputs it if it passes validation11. For shipping and returns, Google recommends a store-wide policy in your Organization markup rather than repeating it on every offer13. Each property is explained in the guide to product schema.

The usual fault is duplication: WooCommerce outputs its Product and an SEO or reviews plugin outputs another with a different price. If your plugin generates its own, switch off WooCommerce's by removing product and review with the woocommerce_structured_data_type_for_page filter; otherwise keep WooCommerce's. The guide to WordPress schema markup compares what each plugin marks up.

What about coming soon mode?

Under WooCommerce > Settings > Site visibility you choose between Coming soon and Live, and with the first you can apply the landing page to store pages only14. While it is on, visitors and crawlers see the landing page instead of your catalogue. Launch the store and forget to switch to Live, and Google and AI search engines keep seeing the holding page. It is the first thing to check on launch day.

How do you speed up a WooCommerce store?

Speed depends mostly on hosting, page caching, the theme and plugins, and the work is the same as on any WordPress site: the guide to WordPress Core Web Vitals covers it step by step. What is specific to a shop:

  1. Exclude Cart, Checkout and My account from the page cache. They are personal pages.
  2. Check cart fragments. Since WooCommerce 7.8 the cart-fragments script only loads when the mini-cart widget is rendered; some themes include it everywhere, and every load makes an AJAX request to the server15.
  3. Measure product and category pages, not just the home page. They carry most organic traffic and most images.

The thresholds are Google's, at the 75th percentile: LCP of 2.5 s or less, INP of 200 ms or less and CLS of 0.1 or less16.

How to check it

  • robots.txt: open https://www.example.com/robots.txt and review the robots.txt report in Search Console.
  • noindex and canonical: in Search Console, URL Inspection on a product, a category and an ?orderby= URL shows the canonical you declare and the one Google picks.
  • Markup: run a simple product and a variable product through the Rich Results Test.
  • Speed: PageSpeed Insights on a product page, with field data if your store has enough traffic.

What SmoothSeen does with this

SmoothSeen analyses a product or category page and checks what this guide configures: robots.txt, sitemap, canonical and noindex, product structured data, speed with real-user Core Web Vitals (or Lighthouse when there is no field data), compression, HTTPS and headers. On the AI side it checks which crawlers your robots.txt allows, keeping search and training apart, and whether your server returns a 403 to any of them.

What to do this week

Open your robots.txt and look for orderby: if it is missing, add the rules from the must-use plugin and confirm in Search Console that a category page is still crawlable. Then view the source of a category page and make sure it has a canonical. To see the rest of the list measured, analyse your online store with SmoothSeen.

Frequently asked questions

Does WooCommerce need an SEO plugin?

For the basics, yes. WooCommerce generates product markup, the cart noindex and a few robots.txt rules, but it does not let you write a title tag or meta description for each product, nor does it add canonicals to categories. Yoast, Rank Math, AIOSEO or similar add those pieces. Pick one and make sure two plugins are not doing the same job.

Should WooCommerce filter URLs be indexed?

Usually not. Every combination of colour, size, price or sort order creates a URL with products that are already on the category page, and Google spends crawl effort on them. If a combination has its own search demand, such as «women's trail running shoes», build it as a category or subcategory with its own copy and a clean URL instead of opening up the filter.

Does WooCommerce's robots.txt block ChatGPT?

No. The default rules only keep three uploads folders and add-to-cart URLs out, and they name no AI crawler. OAI-SearchBot, Claude-SearchBot and PerplexityBot can read product and category pages. If you are not being cited, check first whether your firewall or CDN is answering them with a 403.

Why does Google not show my product prices?

Check three things: that the product page has a single Product, that the price in the markup matches the visible one and that the page is not noindexed. Google requires a price above zero for merchant listing experiences. The Rich Results Test tells you whether the markup is valid; whether Google shows it is then up to Google.

Sources

  1. 1WooCommerce, WordPress.org plugin directory, updated 7 October 2026.
  2. 2wc-template-functions.php, wc_page_no_robots function, official WooCommerce repository, version 11.2.0, accessed 9 October 2026.
  3. 3wp_get_canonical_url() and rel_canonical(), WordPress Developer Resources, accessed 9 October 2026.
  4. 4Permalinks, WooCommerce documentation, accessed 9 October 2026.
  5. 5wc-product-functions.php, wc_product_canonical_redirect function, official WooCommerce repository, version 11.2.0, accessed 9 October 2026.
  6. 6do_robots(), WordPress Developer Resources, accessed 7 October 2026.
  7. 7class-woocommerce.php, robots_txt function, official WooCommerce repository, version 11.2.0, accessed 9 October 2026.
  8. 8Managing crawling of faceted navigation URLs, Google Search Central, updated 18 December 2025.
  9. 9Overview of OpenAI Crawlers, OpenAI, accessed 7 October 2026.
  10. 10Google's common crawlers, Google Crawling Infrastructure, updated 14 July 2026.
  11. 11class-wc-structured-data.php, official WooCommerce repository, version 11.2.0, accessed 9 October 2026.
  12. 12WooCommerce Brands, WooCommerce documentation, accessed 9 October 2026.
  13. 13Merchant listing (Product, Offer) structured data, Google Search Central, updated 8 September 2026.
  14. 14Coming soon mode, WooCommerce documentation, accessed 9 October 2026.
  15. 15Best practices for the use of the "cart fragments" API, WooCommerce Developer Blog, 16 June 2023.
  16. 16Web Vitals, web.dev (Google), updated 31 October 2024.

How to cite this article

SmoothSeen. (2026, October 7). WooCommerce SEO: permalinks, filters, robots.txt, product schema and speed. https://smoothseen.com/en/blog/woocommerce-seo/

Who writes this

SmoothSeen is a website audit tool that measures visibility in search engines and AI assistants and delivers reports under the agency's own brand.

This blog belongs to SmoothSeen: when an article discusses the product, it does so knowing the product is ours. Third-party figures link to their original source.

Change history

  • First version.

Keep reading

WooCommerce SEO: a technical guide for your store