GEO Glossary

/terms/json-ld · 3 min read · foundational

JSON-LD

JSON-LD (JavaScript Object Notation for Linked Data) is the W3C-standard syntax for embedding schema.org structured data into web pages — the default format AI search engines parse for entity, definition, and FAQ markup.

Citation status

ChatGPTPerplexityClaudeCopilotGemini

Last checked 2026-05-14

What is JSON-LD?

JSON-LD (JavaScript Object Notation for Linked Data) is a W3C-standard syntax1 for embedding structured data in web pages. It serializes schema.org vocabulary into self-contained JSON blocks, separate from visible HTML — engines parse these blocks to identify entities, relationships, and metadata that prose alone leaves ambiguous.

The format pairs each piece of data with a @context (pointing to schema.org's vocabulary) and a @type (declaring what kind of thing this is — Organization, DefinedTerm, FAQPage, Article). A single page can ship multiple JSON-LD blocks for different schema types.

Minimum viable JSON-LD wrapper

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "DefinedTerm",
  "name": "Example",
  "description": "Short definition here."
}
</script>

The <script type="application/ld+json"> wrapper is what tells browsers to ignore the block (it's not executable JavaScript) while signaling to crawlers that the JSON inside is structured data.

Status in 2026

The dominant structured-data format on the web. Google explicitly recommends JSON-LD2 over Microdata and RDFa for new implementations, and every major AI search surface — ChatGPT, Perplexity, Claude, Copilot, Gemini chat, Google AI Mode, and Google AI Overview — parses JSON-LD as the canonical structured-data signal. Microdata and RDFa remain valid but are increasingly rare in new code; legacy sites that still use them parse fine.

How to apply

JSON-LD is the syntax; schema.org types are what you fill it with. Three operational moves:

  • Use a JSON-LD generator helper, not hand-authored markup: build a small server-side function that takes typed input ({ name, description, ... }) and emits valid JSON-LD via your framework's metadata API (Next.js metadata, Astro <head> slot). Hand-authored payloads accumulate copy-paste errors across pages.
  • Validate every payload before deploy: paste rendered output into Schema.org's validator and Google's Rich Results Tester. Both flag the same payload differently — Google's checks rich-result eligibility, Schema.org's checks spec compliance.
  • One <script> block per schema type: ship DefinedTerm, FAQPage, and BreadcrumbList as three separate <script type="application/ld+json"> blocks rather than nesting them in one mega-payload. Engines parse each block independently, so separation reduces validation surface area.

What to skip: hand-converting Microdata or RDFa markup on legacy pages. If a section uses them and validates fine, leave it; rewrite to JSON-LD only when you're editing that section for other reasons.

How it relates to other concepts

  • The syntax layer underneath DefinedTerm schema, FAQ schema, and dozens of other schema.org types.
  • The technical foundation for GEO — without a parseable structured-data syntax, schema.org vocabulary has no on-page expression.
  • Companion to Knowledge Graph signals — JSON-LD sameAs is the canonical mechanism for linking your entity to other graphs.

Footnotes

  1. JSON-LD official specification and tutorials at json-ld.org. W3C Recommendation status since 2014.

  2. Google Search Central: structured-data general guidelines and JSON-LD recommendation. developers.google.com/search/docs/appearance/structured-data.

Mentioned in· auto-generated from other terms' related lists

FAQ

Is JSON-LD better than Microdata or RDFa?
For practical purposes in 2026, yes — JSON-LD is the format Google explicitly recommends and the format AI search engines parse most reliably. Microdata and RDFa are still valid syntax options but require inline HTML attribute markup, which is harder to author, validate, and maintain.
Where does JSON-LD go on a page?
Inside a `<script type="application/ld+json">` block, typically in the page `<head>`. It can also live in `<body>` — engines parse both — but `<head>` is the convention for structured data.
Can I have multiple JSON-LD blocks on one page?
Yes. Stack one per schema type (one DefinedTerm block, one FAQPage block, one BreadcrumbList block) rather than nesting everything in a single payload. Engines parse each `<script>` block independently.

Sources & further reading