If you want a WooCommerce product to show up in AI shopping answers, the Product structured data on the page is one of the few signals you fully control. Here's what a complete block looks like, how to check yours, and the WooCommerce-specific problems that break it.
A complete Product block
{ "@context": "https://schema.org", "@type": "Product", "name": "Explorer 30L Waterproof Hiking Backpack", "image": ["https://example.com/img/explorer-30l.jpg"], "description": "30-litre waterproof hiking backpack with padded hip belt and laptop sleeve.", "sku": "EXP-30L-BLK", "gtin13": "0123456789012", "brand": { "@type": "Brand", "name": "Example Outdoor" }, "offers": { "@type": "Offer", "url": "https://example.com/product/explorer-30l/", "price": "129.00", "priceCurrency": "USD", "availability": "https://schema.org/InStock", "itemCondition": "https://schema.org/NewCondition" } } The fields that matter most: name, image, description, brand, and offers with price, priceCurrency and availability. Identifiers (gtin, mpn, sku) help match your product to the same item elsewhere. Only add aggregateRating or review if the ratings are real and visible on the page.
How to check what your store outputs
- Open a product page, view source, and search for
"@type":"Product"(or run it through Google's Rich Results Test) - Count the Product blocks. More than one usually means two plugins are both writing schema
- Compare the values with the visible page: price, currency and stock should match exactly
Common WooCommerce problems
- Duplicate schema. WooCommerce core, your theme and an SEO plugin can each output Product data. Keep one source.
- Variable products. The parent often shows a price range while variations carry the real prices. Check that the offer data makes sense for the variation people land on.
- Missing brand and GTIN. WooCommerce doesn't have a native brand or GTIN field in every setup, so these are often empty. Fill them if you sell branded goods.
- Descriptions that are only marketing copy. The
descriptionusually comes from the product text. If that text never states size, material or use case, neither does your schema. - Out-of-date availability. Caching can serve stale stock status in the JSON-LD. Purge cache after stock changes, or exclude the schema from long caching.
Beyond schema
Schema helps an engine understand a page, but it doesn't make the page worth recommending. Clear titles, attributes in plain text, and category pages that answer "which one should I buy" questions matter just as much. I covered those in How to Get Your WooCommerce Products Recommended by ChatGPT.
I build CiteProof: the free WordPress plugin outputs Product JSON-LD on WooCommerce, and the dashboard scores each product's title, description, attributes, price, availability, images and schema. The checks above work with any setup.
Disclosure: I'm the founder of CiteProof.


