Skip to content

DISC-005Find

Structured data matches rendered page

Checks that the price in your Product structured data is 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, and you lose purchases and trust. schema.org defines the price and availability vocabulary but does not require the structured price to be visible on the page. We require it, and require stock wording that does not contradict the structured data, as our own anti-cloaking rule: an agent should read the same price a shopper sees.

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. We report and leave out pages we cannot check: 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

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
The storewalk.ai app on a phone, scanning a clothing store: it checks a product, views its details and compares options.