Blog
WooCommerce SEO: The Catalog Guide
Permalinks, product templates, schema and feeds for WooCommerce stores with hundreds or thousands of products.
By Alberto Barberis, Founder and CEO, AndromedAI · Updated October 2026
The short answer
WooCommerce SEO is the work of making a WooCommerce store's product and category pages crawlable, indexed and understood by search engines and AI agents. It covers permalink settings and control of filter URLs, product titles and descriptions, global attributes with GTIN and brand, structured data, plus the Merchant Center feed.
Is WooCommerce good for SEO? The short answer
WooCommerce gives you clean URLs, basic Product markup and a core XML sitemap out of the box. What it doesn't give you is a catalog that search engines and AI agents can fully read, and that product data is where most WooCommerce SEO work happens.
- 01
Fix the URL rules first. Changing permalinks on a live store breaks every product URL that isn't redirected.
- 02
WooCommerce's built-in schema covers the basics but skips
brand, shipping and returns, and variable products get anAggregateOfferthat merchant listings can't use. - 03
Most ranking problems on a WooCommerce store are attribute problems: custom product attributes that never reach the markup, the feed or the filters.
- 04
Google Search, Shopping and AI assistants read the same product data. Clean it once.
active installations of the WooCommerce plugin
Millions of stores share your templatesSource: WordPress.orgmore clicks on average for retailers who added correct GTINs
One field, measurable liftSource: Google Merchant Center Helpyear-on-year rise in generative AI traffic to US retail sites, 2025 holiday season
AI now sends shoppers to storesSource: AdobeThe platform-agnostic method lives in the ecommerce SEO guide. This article sticks to what's specific to WooCommerce. If part of your business runs on Adobe Commerce, the Magento SEO guide covers the same ground for that platform.
WooCommerce permalinks, categories and the URLs it creates
Pick a permalink structure once, keep it short, and decide early which generated URLs (filters, sort orders, tags, attribute archives) Google should never crawl.
Under Settings > Permalinks, WooCommerce offers four product bases: the default /product/hoodie-with-logo, a shop base (/shop/hoodie-with-logo), a shop base with category (/shop/hoodies/hoodie-with-logo) or a custom base. Categories default to /product-category/ and tags to /product-tag/ (WooCommerce docs).
We leave the default product base alone. Plenty of guides push "shop base with category" for keyword-rich URLs. The gain is tiny. Move a product to another category and its URL changes, so you're maintaining redirects forever. Plugins that strip the base entirely can clash with page slugs.
Changing the structure on a live store turns old URLs into 404s unless you redirect them. Export every product URL first and map old to new with 301s.
URLs WooCommerce generates that you didn't plan
| URL pattern | Where it comes from | What we do with it |
|---|---|---|
?orderby=price and ?orderby=popularity | The catalog sorting dropdown | Keep out of the index |
?filter_color=blue&query_type_color=or | Attribute filter widgets and blocks | Disallow unless it has search demand |
?min_price=50&max_price=100 | The price filter | Disallow |
?add-to-cart=123 | Add to cart buttons on archive pages | Disallow |
/product-tag/casual/ | Product tags | Noindex, or stop using tags for navigation |
/color/blue/ | Attribute archives with "Enable archives" ticked | Index only with a real landing page |
Google's faceted navigation guidance says to disallow unwanted filter URLs in robots.txt and return a 404 for empty combinations. Canonical tags only reduce crawling slowly. More in faceted navigation SEO.
Many WooCommerce SEO guides tell you to create lots of product tags for long-tail keywords. We disagree. Tags usually end up as thin copies of the categories, and an indexable filter page does the job better.
Core sends noindex on the cart page, checkout and My Account, plus an X-Robots-Tag: noindex header on endpoints like order-received (WooCommerce source). WordPress has served a sitemap at /wp-sitemap.xml since 5.5, up to 2,000 URLs per file (Make WordPress Core). Yoast SEO or Rank Math replace it. Run one sitemap, not two.
Product page templates: titles, descriptions and attributes
A WooCommerce product page ranks on what its fields contain. Most stores leave half of them empty or stored in the wrong field type.
Product name and SEO title
The product name (post_title) becomes your H1, the default title tag and the base of the Merchant Center title. Write it the way people search, with the product type and the attribute that defines it near the front.
For Shopping, Google allows 150 characters but shoppers usually see only the first 70 or fewer, and each variant should carry its own color or size in the title (Google Merchant Center Help).
Short description versus long description
This one catches teams out. Core schema uses the short description (post_excerpt) as description and falls back to the long one only when it's empty (WooCommerce source). If it reads "Bestseller, buy now", that's what machines get. Make it the factual summary.
Global attributes, not custom ones
Global attributes live under Products > Attributes and become taxonomies like pa_color. Custom product attributes are typed into one product and stay there. If an attribute isn't global, your filters can't use it and the Google feed plugin can't map it. When we audit a WooCommerce catalog, it's the first thing we check.
GTIN and brand are now core fields
Since WooCommerce 9.2 there's a built-in GTIN field in the Inventory tab (WooCommerce docs). Since 9.6, Brands is part of core and switched on for every store (WooCommerce Developer Blog). Move identifiers out of old custom fields into these. Each variation needs its own GTIN, never the parent's barcode copied down (GTINs explained).
Here's a typical supplier-imported product before and after an Optimizer pass (illustrative values):
post_title
BeforeMerino Crew Navy
AfterNorthvane Men's Merino Wool Crew Neck Sweater, Navy, Machine Washable
post_excerpt
BeforeBestseller, buy now
AfterFine-gauge 17.5 micron merino crew neck for men. Soft enough to wear on bare skin, machine washable at 30 degrees, regular fit.
attributes
Beforecustom: "Material: wool"
Afterpa_material: 100% merino wool; pa_fit: regular; pa_color: navy; care: machine wash 30 degrees; season: autumn, winter
gtin
Before(empty)
After05012345678900 (one per size)
brand
Before(empty)
AfterNorthvane
WooCommerce structured data: what core outputs and what it leaves out
WooCommerce prints Product JSON-LD on every product page but omits brand along with shipping and return policies, and gives variable products an AggregateOffer.
Here's what the WC_Structured_Data class does by default, set against Google's merchant listing requirements. Your SEO plugin or the woocommerce_structured_data_product filter fills the gaps.
| Property | WooCommerce core | What to do |
|---|---|---|
name, url, image | Output (image if set) | Nothing extra |
description | Short description, else long description | Write a factual short description |
sku | SKU, or the product ID if SKU is empty | Fill SKUs |
gtin | Output when the GTIN validates | Fill GTIN per variation |
brand | Not output | Add via SEO plugin or filter |
offers | Offer for simple products, AggregateOffer for variable ones | Add ProductGroup variant markup |
aggregateRating and review | Output only when ratings are enabled and reviews exist | Keep reviews on (up to 5 recent ones are included) |
shippingDetails and hasMerchantReturnPolicy | Not output | Declare at Organization level |
Source: WooCommerce class-wc-structured-data.php.
Fix the variable product gap first. Google says merchant listings require an Offer, so a variable product's parent page in core markup only qualifies for basic product snippets. Google's product variant markup solves it with a ProductGroup that lists variants in hasVariant, with variesBy and a productGroupID declared on the group. WooCommerce variations selected through ?attribute_pa_color=navy fit Google's single-page model if each variant has its own preselecting URL and the group has one canonical.
Check the output in the Rich Results Test, then watch the Merchant listings report in Search Console. Field by field guidance is in structured data for ecommerce.
Feeds: Google for WooCommerce, Merchant Center and AI assistants
The free Google for WooCommerce extension syncs products to Merchant Center, but attribute mapping only reads global attributes. Get the attribute model right on the store and the feed follows.
Google for WooCommerce connects the store to Merchant Center and syncs product data automatically. Attribute mapping only works with global attributes; individual product attributes "are not supported" (attribute mapping docs). A value on a product's own Google tab overrides the category rule.
Products missing a title, description, ID, link or image don't sync at all. Google drops items not updated in 30 days; the extension resubmits them (product feed docs).
- 1
Convert custom attributes to global ones
Recreate any filterable attribute, such as material or fit, as a global attribute and reassign the values.
- 2
Fill GTIN and brand in core fields
Use the Inventory tab GTIN per variation and the Brands taxonomy.
- 3
Connect Google for WooCommerce
Link Merchant Center, then let the first sync finish.
- 4
Set category mapping rules
Map Color to
pa_color, Brand to Brands, MPN to SKU; use fixed values only where a whole category truly shares one. - 5
Read the diagnostics
Work through disapprovals in Merchant Center. Fix the data on the store, never only in the feed.
Patching data in a feed tool while the store stays wrong is a habit we argue against. Page, markup and feed should agree, since Google compares them. The full feed side is in the Google Merchant Center guide.
The same fields decide what an AI assistant can say about your product. Ask for a specific need and it picks the product whose data states it:
The version with "Material: wool" in a custom attribute never makes that shortlist. This is the idea behind Agentic Commerce Optimization. Search engines and AI agents read one catalog, so you fix it once at the source.
How AndromedAI helps WooCommerce stores
AndromedAI handles the catalog side of WooCommerce SEO. It scores product pages, enriches them from your product data and publishes back to WooCommerce.
Start with the free AI Readiness Audit, which scores product pages on Product Data Completeness, Keyword Coverage, Customer Intent Match and Shopping Metadata. The Optimizer then rewrites titles, descriptions, bullets and FAQ, extracts attributes from existing copy and adds use cases and intents, following your Brand Kit. WooCommerce is one of the platforms AndromedAI publishes to, alongside Google Merchant Center (integrations). Robots.txt rules and redirects stay with your developer; the wider plan is in the ecommerce SEO guide.
organic traffic, with sales up 46.9%
Semprefarmaciaadd-to-cart in two months
Altaforma Milanobounce rate
AusiliumFAQ
Yes. WooCommerce gives you editable URLs and title tags, outputs basic Product structured data and gets a core XML sitemap from WordPress. How well a store ranks depends on how you configure permalinks and filter URLs, and on how complete your product data is, especially global attributes, GTIN and brand.
You need one SEO plugin to control title tags, meta descriptions, sitemaps and extra schema such as brand, which WooCommerce core does not output. Either Yoast SEO or Rank Math does the job. Never run two at once, since they output overlapping sitemaps and duplicate structured data.
Usually no. The keyword benefit of removing the product base is small, and plugins that strip it can conflict with page slugs. On a live store every changed URL also needs a 301 redirect, so the maintenance cost outweighs the gain. Keep the default base and spend the time on product data.
Yes. WooCommerce core outputs Product JSON-LD with name, URL, image, SKU, GTIN, offers and reviews. It leaves out brand, shipping details and return policy, and variable products get an AggregateOffer that Google merchant listings do not accept. An SEO plugin or a code filter can add the missing properties.
Install the free Google for WooCommerce extension, connect it to Google Merchant Center and let it sync the catalog. Use global attributes and the attribute mapping rules so brand, color, size and GTIN reach the feed, then work through the disapprovals in Merchant Center diagnostics by fixing the data on the store.
State the facts shoppers ask about, such as material, fit, use case or care, in the page text, in global attributes and in structured data. Keep the Merchant Center feed consistent with the page. AI assistants recommend the products whose data clearly matches the request, so vague or missing attributes keep you off the shortlist.
Glossary
- Permalink base
- The fixed part of a WooCommerce URL before the product or category slug, such as product or product-category.
- Global attribute
- A WooCommerce attribute defined under Products > Attributes and stored as a taxonomy like pa_color, usable by filters and feed mapping.
- Custom product attribute
- An attribute typed into a single product. It shows on the page but cannot drive filters or Google feed mapping.
- Short description
- The post_excerpt field of a WooCommerce product, used by core as the schema description.
- AggregateOffer
- A schema.org offer type with a price range, which WooCommerce uses for variable products.
- ProductGroup
- Schema.org type that groups product variants with hasVariant, variesBy and productGroupID.
Keep reading
The platform-agnostic method behind this article
Read nextFaceted Navigation SEO: Filters, Crawl Budget and Indexable FacetsWhich filter URLs to index and which to block
Read nextMagento (Adobe Commerce) SEO GuideThe same catalog checklist for Adobe Commerce stores
Read nextStructured Data for Ecommerce: Product, Offer, Review and FAQ SchemaField-by-field markup for product pages
Sources (16)
- WooCommerce: Permalinks
- WooCommerce: GTIN field
- WooCommerce Developer Blog: Enabling Brands, update for WooCommerce 9.6
- WooCommerce source: class-wc-structured-data.php
- WooCommerce source: wc-template-functions.php
- WooCommerce: Google for WooCommerce documentation
- WooCommerce: Google for WooCommerce attribute mapping
- WooCommerce: Product feed information and free listings
- WordPress.org: WooCommerce plugin
- Make WordPress Core: New XML sitemaps functionality in WordPress 5.5
- Google Search Central: Managing crawling of faceted navigation URLs
- Google Search Central: Merchant listing structured data
- Google Search Central: Product variant structured data
- Google Merchant Center Help: Title
- Google Merchant Center Help: GTIN
- Adobe: 2025 holiday shopping season results
Featured in








