Skip to content

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, and individual offers nested in an AggregateOffer. 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 is complete or not. 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

  1. 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.
  2. For products with variants, give each offer its own price, priceCurrency and availability; do not leave any offer without them.
  3. 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.
  4. 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