webmcp-tool

Guide

Structured data: the one place you state facts

Prose implies. JSON-LD asserts. Which types earn their keep for agent readiness, why validity matters more than volume, and the failure mode where markup and page disagree.

Last reviewed 27 August 2026

Everything else on a page is interpretation. A price in prose might be a discount, a competitor's figure, or last year's. A price in an Offer is a claim you are making, in a form that cannot be misread.

That is the whole argument for structured data in an agent context, and it is why validity matters far more than coverage: a block that does not parse is not a weaker signal, it is no signal at all.

The types that earn their keep

PageTypeWhat it settles
ProductProduct + OfferPrice, currency, availability, identifier
ServiceServiceWhat is provided, to whom, where
LocationLocalBusinessAddress, hours, phone, geo
ArticleArticle / NewsArticleAuthor, publication date, publisher
FAQFAQPageQuestion and answer pairs an agent can lift
InstructionsHowToOrdered steps with tools and supplies
OrganisationOrganizationIdentity, logo, sameAs links
Any pageBreadcrumbListWhere this sits in the hierarchy

Two of those are underrated for agent work specifically. FAQPage gives an assistant text it can quote without paraphrasing, which reduces the chance of being cited inaccurately. HowTo gives it an ordered plan, which is close to a procedure it can follow.

JSON-LD, in the head, one block per subject

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Lelit Bianca V3",
  "sku": "LB-V3-2026",
  "description": "Dual-boiler espresso machine with manual flow control.",
  "brand": { "@type": "Brand", "name": "Lelit" },
  "width": { "@type": "QuantitativeValue", "value": 31, "unitCode": "CMT" },
  "offers": {
    "@type": "Offer",
    "price": "1899.00",
    "priceCurrency": "EUR",
    "availability": "https://schema.org/InStock",
    "url": "https://example.com/machines/lelit-bianca-v3"
  }
}
</script>

Note the width expressed as a QuantitativeValue with a unit code. That is the difference between an agent knowing the machine is 31 centimetres wide and an agent reading 31 somewhere in a specification table and hoping.

Where it goes wrong

  1. Invalid JSON. A trailing comma or an unescaped quote and the whole block is discarded silently. Our check counts malformed blocks separately and fails a page whose only structured data does not parse.
  2. Markup that disagrees with the page. The visible price says €1,699 and the Offer says €1,899. An agent will act on the markup, then a customer will arrive expecting the other number.
  3. Type that does not match the page. Organization on a product page tells an agent nothing about the product.
  4. Copied templates with placeholders left in. "name": "Product Name" shipped to production is more common than it should be.
  5. Injected only after hydration. If the block is added by JavaScript, most agent crawlers never see it. Render it server-side — see content without JavaScript.
Generate it, do not maintain it

The disagreement failure is a synchronisation problem, and synchronisation problems are solved by having one source. Emit JSON-LD from the same data that renders the page. Hand-written blocks in a template are a promise to update two places forever, and that promise is always broken eventually.

Open Graph is not a substitute

Open Graph tags describe how a link looks when shared. They carry a title, an image and a short description — useful, and not the same thing. og:price has no availability, no currency guarantee, no identifier and no relationship to anything else on the page. Ship both; do not treat one as the other.

How we grade it

6 points, in the readability pillar. A page passes when JSON-LD parses cleanly and declares at least one recognised type. Malformed blocks alongside valid ones score partial, because something is being ignored. Valid JSON that declares no @type also scores partial — it parses, but it asserts nothing.

Sources

Primary documents, checked on 27 August 2026

  1. schema.org
  2. W3C — JSON-LD 1.1
  3. Google — structured data general guidelines
  4. Google — Rich Results TestValidates a page's blocks against supported types
  5. Open Graph protocol

Keep reading

Check your own site against this

The Agent Readiness Score measures exactly what this article describes, and shows the evidence behind every finding.

Run the check →