DISC-004Find
Product structured data
Checks that your product pages carry Product structured data (JSON-LD) with name, identifier, price, currency and availability.
What we check
On up to three product pages from the crawl, we look for a schema.org Product in the page's JSON-LD and check it has: a name; at least one identifier (sku, gtin, gtin8, gtin12, gtin13, gtin14 or mpn); and at least one offer where every offer carries price, priceCurrency and availability. We understand Product nodes inside an @graph wrapper or an array, offers given as one object or an array, individual offers nested in an AggregateOffer, a price given in an offer's priceSpecification (as BigCommerce Catalyst prints it), and a ProductGroup whose hasVariant lists one Product per variant (as Shopify prints it for products with variants): there the variants' offers are the offers, and every variant needs an identifier when the group has none. If the page is rendered in a browser, JSON-LD added by scripts counts.
Why it matters
Structured data is how an AI shopping agent reads a product without guessing from page layout: what it is, how to identify it across shops, what it costs, in which currency, and whether it is in stock. Without these fields an agent may leave your product out of a comparison, identify it wrongly, or show no price.
How we check
Each sampled page counts as complete or incomplete, and the score is the share of complete pages: with three pages, 3 of 3 is PASS, 2 of 3 is WARN (score 67) and 1 or 0 of 3 is FAIL; with two pages, 1 of 2 is WARN. The result lists which fields were missing. The @type must be exactly "Product"; an AggregateOffer that gives only lowPrice and highPrice, without individual offers, counts as missing offers.price. SKIPPED: the crawl captured no product pages.
How to fix it
- Add a JSON-LD script of @type Product to every product page, with name, sku (or gtin/mpn), and offers containing price, priceCurrency and availability.
- For products with variants, give each offer its own price, priceCurrency and availability; do not leave any offer without them.
- Shopify themes usually output Product JSON-LD; check your theme has not removed it and that it includes an identifier (SKU or barcode filled in on the product). On WooCommerce, WooCommerce and SEO plugins output Product markup; check the SKU and stock fields are filled in.
- Validate the markup with a schema.org validator and keep the values identical to what the page shows.
What good looks like
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Linen Shirt",
"sku": "LS-001-M",
"gtin13": "5601234567890",
"offers": {
"@type": "Offer",
"url": "https://www.example-shop.com/products/linen-shirt",
"price": "49.00",
"priceCurrency": "EUR",
"availability": "https://schema.org/InStock"
}
}
</script>Sources
Read more
- How an AI agent reads a web page
Raw HTML, the rendered page, the accessibility tree, structured data, Markdown versions and llms.txt, and what each one means for an agent trying to read your product page.
Could an agent buy from your store?
The free scan runs all 51 checks on your store in about five minutes.
Scan my store