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
- What does WooCommerce control, and what is left to others?
- Which URL structure should you choose?
- What rules does WooCommerce add to robots.txt?
- A tested must-use plugin for filters and AI crawlers
- What structured data does WooCommerce generate?
- What about coming soon mode?
- How do you speed up a WooCommerce store?
- How to check it
- What SmoothSeen does with this
- What to do this week
- Frequently asked questions
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_txtfilter
- 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:
Disallowfor three folders underwp-content/uploads:wc-logs,woocommerce_transient_filesandwoocommerce_uploads.Disallow: /*?add-to-cart=andDisallow: /*?*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:
- Exclude Cart, Checkout and My account from the page cache. They are personal pages.
- Check cart fragments. Since WooCommerce 7.8 the
cart-fragmentsscript only loads when the mini-cart widget is rendered; some themes include it everywhere, and every load makes an AJAX request to the server15. - 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.txtand 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
- 1WooCommerce, WordPress.org plugin directory, updated 7 October 2026.
- 2wc-template-functions.php, wc_page_no_robots function, official WooCommerce repository, version 11.2.0, accessed 9 October 2026.
- 3wp_get_canonical_url() and rel_canonical(), WordPress Developer Resources, accessed 9 October 2026.
- 4Permalinks, WooCommerce documentation, accessed 9 October 2026.
- 5wc-product-functions.php, wc_product_canonical_redirect function, official WooCommerce repository, version 11.2.0, accessed 9 October 2026.
- 6do_robots(), WordPress Developer Resources, accessed 7 October 2026.
- 7class-woocommerce.php, robots_txt function, official WooCommerce repository, version 11.2.0, accessed 9 October 2026.
- 8Managing crawling of faceted navigation URLs, Google Search Central, updated 18 December 2025.
- 9Overview of OpenAI Crawlers, OpenAI, accessed 7 October 2026.
- 10Google's common crawlers, Google Crawling Infrastructure, updated 14 July 2026.
- 11class-wc-structured-data.php, official WooCommerce repository, version 11.2.0, accessed 9 October 2026.
- 12WooCommerce Brands, WooCommerce documentation, accessed 9 October 2026.
- 13Merchant listing (Product, Offer) structured data, Google Search Central, updated 8 September 2026.
- 14Coming soon mode, WooCommerce documentation, accessed 9 October 2026.
- 15Best practices for the use of the "cart fragments" API, WooCommerce Developer Blog, 16 June 2023.
- 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/
Keep reading
E-commerce SEO for AI search: product and category pages that Google and ChatGPT understand
How to rank an online shop in Google and get products into ChatGPT: product pages, categories, Product schema, filters, speed, reviews and Merchant Center.
Core Web Vitals for e-commerce: what breaks LCP, INP and CLS on product and category pages
What breaks LCP, INP and CLS on an online shop's product and category pages, why you measure by template and which fixes to make first, with code.
How to track ChatGPT and AI traffic in GA4, and AI Overviews in Search Console
How to see ChatGPT, Gemini and Perplexity visits in GA4, what the AI Assistant channel is, and what Search Console shows for AI Overviews and AI Mode.