On WooCommerce, product schema comes from your SEO plugin, not from WooCommerce itself. WooCommerce core emits only basic markup, so in practice you install Yoast SEO (with the WooCommerce SEO extension) or Rank Math, and the plugin generates a Product block for every product page automatically. The one constraint shaping everything on WooCommerce is that you now have two possible markup sources, the plugin and your theme, and if both emit a Product block you get duplicates that crawlers cannot reconcile.
Why WooCommerce is different
Unlike the hosted platforms, WooCommerce has no theme system that owns structured data end to end. The markup layer is a plugin, which means configuration instead of code, but it also means conflicts are easy and invisible. Several popular WooCommerce themes include their own built-in Product schema, and both Rank Math and Yoast generate schema by default, so a store that installs a plugin without checking often ends up with two Product blocks on the same page. The second difference is depth: the plugins handle simple products well, but per-variant availability and product identifiers (GTIN, MPN) need deliberate configuration rather than working out of the box.
Steps
1. Check what already exists. Open a live product page, view the page source, and search for application/ld+json. Identify which blocks the SEO plugin emits and whether the theme emits its own. Check your theme's documentation for built-in schema support before you configure anything.
2. Keep exactly one markup source. If the theme outputs Product schema and the plugin does too, disable one of them. Most themes with built-in schema have a setting to turn it off; both Yoast and Rank Math let you disable their schema output per content type. Two competing blocks with different prices is worse than one incomplete block.
3. Configure the plugin's product schema. With Yoast, go to Yoast SEO settings and set your Organization details under the site representation settings, then set the default schema type for products under the Products content type settings so every product page gets a Product block. With Rank Math, go to Rank Math and then Schema and confirm the product schema template is active for product pages. Either plugin also lets you add product identifiers: fill in GTIN, UPC, or MPN fields on your products where you have them, since identifiers are what let an engine match your product across sites.
4. Fix variant availability deliberately. This is the weak spot. The default plugin output does not always set availability per variant, and a variable product page that marks every size as in stock when some are not will teach engines not to trust the markup. After configuring, view the source of a specific variant URL and confirm each variant's availability value matches the actual stock status. If it does not, this is where a developer earns their keep: a small custom plugin or code snippet can correct the availability value per variation.
5. Validate on the hard pages. Test a URL such as https://[yourdomain.com]/product/your-product, replacing yourdomain.com with your actual domain, in Google's Rich Results Test and the Schema Markup Validator. Test a variable product with mixed stock, an out-of-stock product, and a product with reviews. Check that the rating in the markup matches the reviews actually visible on the page.
The fundamentals
- •The complete JSON-LD reference this article builds on, see our product schema guide
- •Whether AI crawlers can reach your pages at all, see our robots.txt guide
- •A readable catalog summary for AI engines, see our llms.txt guide
A hypothetical example
Say you run a skincare store on WooCommerce with 40 products, half of them variable (shade ranges). You check the page source and find the theme emits a thin Product block with just name and price, while Rank Math emits a fuller one with availability and ratings. You turn off the theme's schema output, keep Rank Math, fill in the GTIN fields on your best sellers, and spot-check a shade variant that is out of stock to confirm the markup says OutOfStock. One source, complete identifiers, availability you can trust.
What this guide does not cover
This covers getting one valid product markup source onto your WooCommerce product pages. It does not cover keeping prices and availability accurate as inventory changes (monitoring work), getting AI crawlers to your pages past caching and security layers, or letting an agent complete the checkout, which is the transaction layer and a separate job.
Frequently Asked Questions
Does WooCommerce output product schema automatically?
How do I customize WooCommerce product schema without editing core code?
Can SEO plugins overwrite WooCommerce default schema?
Check your own brand now
Run the free scan. It takes seconds, no signup, and shows whether AI crawlers can read your product pages today: aizii.ai/aeo-scan
Run the free scan