JSON-LD
Structured data describing what this page is about.
Why an agent cares
It is the one part of a page an agent can read without interpreting prose, so a syntax error or a missing required property costs the whole block. We check the shapes with published required properties, not everything a vocabulary permits.
Adoption
Web baseline. Standard equipment on the web. Its absence is the exception rather than its presence.
Direction of travel: ► flat, as at .
JSON-LD is on roughly 41% of pages (Web Almanac 2024, HTTP Archive, about 16M sites).
What we check
| Check | Severity | Raises | On whose authority |
|---|---|---|---|
| JSON-LD Invalid JSON | high | conformance, usability | specification: JSON-LD 1.1 |
Supporting documents: JSON-LD 1.1 Required by JSON-LD 1.1. Bad: an ld+json block doesn't parse as JSON (a trailing comma is enough; an empty block also counts), so every consumer drops the entire block. Fix: make the block valid JSON; validate with a JSON linter or Google's Rich Results Test. | |||
| JSON-LD Missing Context | medium | usability | Lumar readiness bar, beyond JSON-LD 1.1, Schema.org |
Supporting documents: JSON-LD 1.1, Schema.org Lumar readiness bar: no specification requires this. Bad: a top-level entity declares no "@context", so a consumer reading the common inline form cannot map its short property names onto schema.org. Fix: add "@context": "https://schema.org" to each top-level entity. | |||
| JSON-LD Missing Type | medium | usability | Lumar readiness bar, beyond JSON-LD 1.1 |
Supporting documents: JSON-LD 1.1 Lumar readiness bar: no specification requires this. Bad: a top-level entity has no "@type", so an agent cannot tell what the block describes. The JSON-LD is still legal, but it is not usable schema.org markup. Fix: declare a schema.org type on the entity, for example "@type": "Article". | |||
| JSON-LD Missing Required Property | medium | usability | vendor profile: Google Search: Recipe structured data |
Supporting documents: Google Search: Recipe structured data Related guidance in Google Search: Recipe structured data. Bad: an entity is missing a property Google requires for its type's rich-result eligibility (e.g. Recipe needs name + image; Event needs name, startDate and a located location), so the entity may be ignored. Fix: add the required properties for that type per Google's structured-data reference. | |||
| JSON-LD Invalid Value Format | medium | usability | vendor profile: Schema.org |
Supporting documents: Schema.org Related guidance in Schema.org. Bad: a property value has the wrong format (e.g. a date that isn't ISO 8601), so consumers reject it. Fix: use the format schema.org expects; dates as YYYY-MM-DD or a full ISO 8601 timestamp. | |||
| JSON-LD Non-Schema Context | low | usability | Lumar readiness bar, beyond Schema.org |
Supporting documents: Schema.org Lumar readiness bar: no specification requires this. Bad: the "@context" does not reference schema.org, so search engines and AI agents do not recognise the vocabulary. Fix: use "@context": "https://schema.org" (a custom vocabulary can sit alongside it, not instead of it). | |||
Examples
Both run through the same checks as a live scan: the first passes, the second is flagged.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "How agent-readiness works",
"author": { "@type": "Person", "name": "Ada Lovelace" },
"datePublished": "2026-06-01",
"publisher": {
"@type": "Organization",
"name": "Example",
"logo": { "@type": "ImageObject", "url": "https://example.com/logo.png" }
}
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Event",
"name": "Agent Readiness Summit",
"startDate": "2026-09-01T18:00:00Z",
"location": {
"@type": "Place",
"name": "Example HQ",
"address": { "@type": "PostalAddress", "streetAddress": "1 Main St", "addressLocality": "London" }
}
}
</script><script type="application/ld+json">
{
"@type": "Article",
"author": "Ada Lovelace",
"datePublished": "not-a-date",
}
</script>
<script type="application/ld+json">
{ "@context": "https://example.com/ns", "name": "Untyped Thing" }
</script>Specifications
| Document | Revision | Kind |
|---|---|---|
| JSON-LD 1.1 | W3C Recommendation | specification |
| Schema.org | Version 30.1 | specification |
| Google Search: Recipe structured data | Living document | vendor profile |
| Google Search: Event structured data | Living document | vendor profile |
| Schema.org Date and DateTime (ISO 8601) | Version 30.1 | specification |
| Google Search: Article structured data (states no required properties, which is why we check none) | Living document | vendor profile |
Last re-read against the published documents: .