Skip to content

DISC-005Find

Structured data matches rendered page

Checks that the price in your Product structured data is actually visible on the product page, and that stock wording does not contradict it.

What we check

On up to three product pages with Product JSON-LD, we ask: is the offer price visible to a shopper within the product's own area of the page? We locate the product by its name, stay inside its element (excluding navigation, header, footer, mini-cart and related-product rails) and use only text the browser rendered. Amounts within 0.5% of the offer price count as equal. Where the price is visible, we also compare stock wording in that element ("in stock", "add to cart", "sold out" and similar) with the JSON-LD availability.

Why it matters

AI shopping agents quote the price in your structured data. If a shopper cannot see that amount, the agent quotes a price they will not be charged, or calls an item available when it is sold out. That costs purchases and trust.

How we check

FAIL: on a checked page the product's element shows amounts in the offer's currency but not the advertised one (or shows it only in hidden markup), or availability contradicts the stock wording. PASS: the price was checked on at least one page with no contradiction. Pages that cannot be checked are reported and left out: no offer price, differently priced variants with no way to tell which the page shows, no currency, product element not found, no amount in that currency, a price split across elements, or no trustworthy rendered capture. SKIPPED: no page could be checked. Known limit: a stale JSON-LD price still shown on the page, for example struck through, passes.

How to fix it

  1. Generate the JSON-LD price and availability from the same data as the visible price and stock status.
  2. For variants, give each offer a url or @id matching its variant page, or show the price of the offer the page describes.
  3. Show the price as plain text in the product's area, in the priceCurrency currency.
  4. If the result says a page's scripts blocked the page while scrolling, stop blocking the main thread.
  5. Clear CDN and page caches for product pages after fixing.

What good looks like

<script type="application/ld+json">
{"@context": "https://schema.org", "@type": "Product",
 "name": "Linen Shirt",
 "offers": {"@type": "Offer", "price": "49.00", "priceCurrency": "EUR",
            "availability": "https://schema.org/InStock"}}
</script>

<div class="product">
  <h1>Linen Shirt</h1>
  <p class="price">€49.00</p>
  <p>In stock</p>
  <button>Add to cart</button>
</div>

Sources