Stall library · Discover

Product pages have no schema.org markup

Missing schema.org Product markup means the purchase facts on your product page exist only as layout, so an AI agent has to infer the price, the stock status and the identifier from where text happens to sit on the page. Inference is where agents get facts wrong, and an agent that is unsure of a price will usually recommend the store it is sure about.

Why the agent stops

Structured data is a statement in a fixed vocabulary: this number is the price, this value is the availability, this string is the identifier. Without it, the agent is reading a design. A struck through original price beside a sale price, a bundled option, a price in a nested element rendered after load: each of those is unambiguous to a person and a coin flip to a parser.

The consequence is not usually a wrong answer shown confidently. It is a hedge. Agents are tuned to avoid asserting facts they cannot ground, so an unreadable price tends to produce a recommendation of somewhere else rather than a mistake about you.

How often we see this

Not stated here. A frequency means nothing without the cohort it was counted over, and this page is about one stall rather than one category. Where a category has enough stores measured at every stage, the share of them showing this stall is published on its benchmark page, with the methodology beside it.

See it for yourself

  1. Open a product page and view source, or fetch the URL with curl so you see the HTML as delivered rather than after scripts run.
  2. Search the source for "application/ld+json".
  3. If a block exists, check it contains an object with "@type": "Product" and an "offers" object carrying "price", "priceCurrency" and "availability".
  4. Repeat on a product added by a different app or template. Markup is often present on one template and absent on another.

What to change

What Ottom looks at

Ottom reads several product pages per scan and records whether each carried schema.org Product markup as delivered. The finding is raised when none of the pages we could read carried it, and the price, stock and identifier checks that follow only run against pages that did.

Questions

Is rich results markup the same schema agents read?

Usually yes, and if search shows a price for your product you probably have offers.price. It does not follow that you have availability, variants or an identifier, and those are the fields a purchase decision turns on rather than a search result.

Does schema markup an app injects after load count?

Only for clients that run scripts. An agent reading the delivered HTML sees the page without it, so markup that depends on client side execution is markup some agents will never see.

Check your store for this