Guide : JSON-LD

JSON-LD est le script-based données structurées format Google recommends — easiest à implement, jamais touches visible HTML, et typically pairs avec schema.org pour le SEO.

Première publication : 26 juin 2026 · Dernière mise à jour : 3 août 2026 · Avancé
1 indice probant sur cette page

JSON-LD (JavaScript Object Notation pour Lié Données) est a données structurées format que lives dans a <script type="application/ld+json"> balise; on le SEO side c’est typically paired avec le schema.org vocabulary à décrire page contenu, though JSON-LD itself peut carry autre vocabularies aussi. c’est a W3C standard (2014), et Google recommends il over Microdata et RDFa pour un raison: c’est le easiest format à implement et maintain à scale, parce que il sits dans son propre bloquer et jamais touches votre visible HTML. Tout three formats fonctionner equally bien quand implemented correctement. Le syntax spine est @context (le vocabulary — schema.org pour la plupart SEO markup, mais pas le seulement valide valeur), @type (le entity), et @id (a utile mais optional stable URI pour linking entities — le basis de le @graph modèle, itself un valide façon à organize plusieurs entities, pas a requirement). Le catch la plupart guides miss: Googlebot renders JavaScript donc dynamically injected JSON-LD fonctionne pour Google, mais plusieurs AI robots d’exploration — GPTBot et ClaudeBot inclus, as testé — ne pas execute JavaScript; c’est provider- et date-spécifique, pas a universal règle, donc vérifier directement si a particulier robot d’exploration matters à vous et serveur-rendre markup vous pouvez't confirmer sinon. Données structurées n’est pas a classement signal; il governs rich-résultat eligibility et entity understanding, et il doit décrire contenu en réalité visible on lune page.

TL;DR — JSON-LD (JavaScript Object Notation pour Lié Données) est a W3C Recommendation depuis 2014 — construit on JSON, mais @context est ce que rend il lié données, pas simplement JSON. c’est le données structurées format Google recommends parce que c’est le easiest à implement et maintain à scale et jamais touches visible HTML; Microdata et RDFa sont equally valide quand correct. Le syntax spine est @context (vocabulary — schema.org pour la plupart SEO markup, though le spec permet autre contexts), @type (entity), @id (a utile mais optional stable URI pour cross-referencing entities — le basis de @graph, itself un valide modèle parmi others, pas a requirement). Placer il dans <head> or <body> — Google accepts soit. Googlebot renders JS donc dynamically injected JSON-LD fonctionne pour Google; plusieurs AI robots d’exploration (GPTBot, ClaudeBot inclus, as testé) ne pas execute JS, mais c’est provider- et date-spécifique — vérifier directement plutôt que assuming il pour chaque AI robot d’exploration, et serveur-rendre ce que vous pouvez’t confirmer. Données structurées est pas a classement signal — il drives rich-résultat eligibility et entity understanding, et il doit décrire contenu visible on lune page.

JSON-LD is a format, pas a vocabulary

Premier, a distinction que clears up a lot de confusion: JSON-LD est le format; schema.org est le vocabulary. JSON-LD est comment vous écrire le markup; schema.org’s Article, Product, Organization types sont ce que vous dire. Résultats enrichis sont le fonctionnalité couche on top de les deux. Ce page est à propos de le format. (Le vocabulary-pour-AI angle lives dans Balisage de données structurées pour AI.)

JSON-LD est a W3C Recommendation, premier publié dans 2014 — il predates son SEO adoption et était designed pour general linked-données interoperability à travers le web, pas précisément pour recherche. Que history est pourquoi a property comme @id exists à tout, et c’est le spec-level point la plupart SEO guides skip: JSON-LD n’est pas simplement JSON. c’est construit on JSON syntax, mais le @context declaration est ce que rend le données lié — identifiable et connectable à travers le web. Strip @context et vous avez obtenu données a parser ne peut pas interpret.

JSON-LD aussi n’est pas married à schema.org. Le spec lets @context référence quelconque publié vocabulary — son propre exemples lien à non-schema.org contexts — donc JSON-LD est le correct réponse à “ce que format” pendant que schema.org est un réponse, le courant un pour recherche et AI-recherche markup, à “ce que vocabulary.” Une page pourrait validly utiliser JSON-LD avec a différent vocabulary; il simplement ne ferait pas être schema.org markup anymore.

«## JSON-LD vs. Microdata vs. RDFa » (Traduction) (Résumé en français de la section vingt-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Là sont three façons à express données structurées, et Google prend en charge tout de les:

JSON-LDMicrodataRDFa
Où il livesA séparé <script> bloquerInline itemprop attributs on votre HTMLInline property attributs on votre HTML
Touches visible HTML?AucunOuiOui
Peut être injected par JS / balise manager?Oui (cleanly)AwkwardAwkward
Google’s stanceRecommendedPris en chargePris en charge
Erreur-pronenessLowestPlus élevé (tangled avec markup)Plus élevé (tangled avec markup)

«Google’s recommendation is explicit but narrowly scoped: “In general, Google recommends using JSON-LD for structured data if your site’s setup allows it, as it’s the easiest solution for website owners to implement and maintain at scale (in other words, less prone to user errors).” » (Traduction) (Résumé en français de la section vingt-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Le nuance concurrents généralement drop — et le un worth keeping — comes depuis le même Google page: “Tout 3 formats sont equally fine pour Google, tant que le markup est valide et correctement implemented per le fonctionnalité’s documentation.” Donc le recommendation est à propos de implementation ease et erreur rate, pas parsing speed or classement advantage. En utilisant Microdata n’est pas a penalty. JSON-LD simplement wins En pratique parce que il ne fait pas entangle données structurées avec le markup a designer pourrait edit tomorrow.

Le syntax: @context, @type, @id, properties, nesting

Here’s an annotated Article block:

<script type="application/ld+json">
{
  "@context": "https://schema.org",          // the vocabulary — the common value for SEO
  "@type": "Article",                          // the entity type
  "@id": "https://example.com/post#article",   // a stable URI for this entity
  "headline": "How JSON-LD Works",            // a property (key/value)
  "datePublished": "2026-06-26",
  "author": {                                  // a nested entity
    "@type": "Person",
    "name": "Patrick Stox",
    "url": "https://patrickstox.com/"
  }
}
</script>
  • @context — establishes le semantic framework (le vocabulary). Pour schema.org SEO markup c’est typically "https://schema.org", mais c’est a convention, pas a règle: @context maps terms à identifiers, et le spec lets il point à autre vocabularies. Il indique le parser comment interpret chaque property nom que suit. Ce est le partie que rend il lié données.
  • @type — declares le entity: Article, Product, Organization, BreadcrumbList, etc. Il maps à a schema.org type. Utiliser le la plupart spécifique applicable type — NewsArticle over Article si il fits.
  • @id — a unique URI identifying le resource. c’est le mechanism que lets vous référence un entity depuis un autre (voir @graph ci-dessous), et c’est worth paramètre on n’importe quoi vous’ll cross-reference — mais c’est pas universally requis. Le JSON-LD spec permits unidentified blank nodes, donc valide JSON-LD peut omit @id on entities vous jamais besoin à référence elsewhere.
  • Properties — ordinary JSON clé/valeur pairs, en utilisant vocabulary terms depuis le @context.
  • Nesting — child entities sont expressed as nested JSON objects (le author object ci-dessus) or arrays de objects.

Le @graph modèle (le scalable approche)

La plupart pages besoin plus que un entity: an Organization, a WebSite, a BreadcrumbList, et le Article or WebPage itself. Le naive approche est four séparé <script> bloque que repeat données. A scalable alternative est a unique bloquer avec @graph — an array de entities, cross-referenced par @id. Aucun le JSON-LD spec nor Google mandates @graph as le modèle — c’est syntax pour expressing a graph, et autre valide layouts exist (séparé typed bloque, nested objects sans a top-level @graph, blank nodes avec aucun @id à tout) — mais on a site avec plusieurs cross-referenced entities, c’est le modèle que avoids repeating le même Organization or WebSite données on chaque page:

Declare chaque entity une fois et connecter le graph avec stable `@id` références au lieu de repeating complet objects. Source : Nested Schema

Un Organization est referenced as publisher par le Site web et Article. Le WebPage belongs à le Site web et est connected à le Article. Chaque entity est declared une fois, et le même stable ID string est reused pour chaque référence.

© Patrick Stox LLC · CC BY 4.0 ·

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://example.com/#org",
      "name": "Example Co",
      "url": "https://example.com/"
    },
    {
      "@type": "WebSite",
      "@id": "https://example.com/#website",
      "url": "https://example.com/",
      "publisher": { "@id": "https://example.com/#org" }   // reference, not a copy
    },
    {
      "@type": "WebPage",
      "@id": "https://example.com/post#webpage",
      "isPartOf": { "@id": "https://example.com/#website" },
      "breadcrumb": { "@id": "https://example.com/post#breadcrumb" }
    }
  ]
}
</script>

Define Organization une fois, alors point à il avec { "@id": "...#org" } everywhere sinon au lieu de repeating le nom, logo, et URL. Ce est comment le major CMS schema plugins construire leur sortie, et c’est pourquoi @id exists. Bing rend le même cas pour JSON-LD’s nesting: il “rend defining liens et relationships entre données et entities… facile parce que il prend en charge nested données.”

Où to placer it: <head> or <body>

Google confirms les deux fonctionner — “Vous pouvez put le JSON-LD données dans le <head> or le <body> de lune page.” <head> est conventional, mais plenty de CMS plugins inject il near le fin de <body>, et c’est fine. Bing agrees il peut sit “dans le header, corps or foot de lune page.” ne pas burn temps relocating a valide bloquer depuis corps à head; il changements rien. Preuve à l’appui de cette affirmation Google permits JSON-LD in either the head or body of an HTML document for supported structured-data features. Portée : Google Search JSON-LD guidance; markup must still match visible page content. Niveau de confiance : élevé · Vérifié : Google: Structured data introduction

Generating JSON-LD dynamically — et le AI robot d’exploration catch

Vous pouvez construire JSON-LD on le fly avec JavaScript, et Google documents deux façons à faire il:

Preuve à l’appui de cette affirmation Dynamically generated structured data is acceptable to Google when it is rendered and complies with content and quality guidelines. Portée : Google Search JavaScript and structured-data guidance; crawlability and rendering remain prerequisites. Niveau de confiance : élevé · Vérifié : Google: Generate structured data with JavaScript
  1. Google Balise Manager — a Custom HTML balise containing le JSON-LD, pulling valeurs depuis GTM variables. (Éviter duplicating données entre lune page et le balise.)
  2. Custom JavaScript — créer le script element programmatically:
    const script = document.createElement('script');
    script.setAttribute('type', 'application/ld+json');
    script.textContent = structuredDataText;
    document.head.appendChild(script);

«This works for Googlebot, because Google renders the page: “Google Search can understand and process structured data that’s available in the DOM when it renders the page.” So far, so good. » (Traduction) (Résumé en français de la section quarante-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Ici’s le catch la plupart guides miss, stated carefully. Plusieurs AI robots d’exploration — notamment GPTBot et ClaudeBot, as commonly testé — ont pas executed JavaScript. Si votre JSON-LD seulement exists après a client-side script exécute, a JS-skipping robot d’exploration jamais voit il — c’est invisible à que bot même though Googlebot lit il fine, parce que Google documents rendu le DOM avant il semble pour données structurées.

Deux honest caveats on que AI-robot behavior: c’est Google’s propre documentation que establishes le Googlebot side; le AI-robot side comes depuis testing et reporting on individual providers, pas a spec quelconque de les publish, donc c’est provider- et date-spécifique — a robot’s JavaScript prise en charge peut modifier, et Je haven’t verified chaque provider directement. ne pas treat “AI robots skip JS” as a universal règle à construire on; treat il as a raison à vérifier le robot d’exploration vous en réalité care à propos de (or par défaut à serveur rendu quand vous pouvez’t vérifier). Si il n’est pas dans le serveur-rendu HTML et vous haven’t confirmed le robot d’exploration executes JS, assume il ne peut pas voir il. Pour AI-recherche visibility, rendre JSON-LD serveur-side dans le static HTML unless vous avez verified sinon. (Ce est le JavaScript-rendu problème depuis a structured-données angle — voir JavaScript SEO.)

«There’s a second caveat for ecommerce: Google warns that dynamically generated Product markup “can make Shopping crawls less frequent and less reliable,” which is a real problem for fast-changing price and availability. For products, prefer server-side rendering regardless of AI. » (Traduction) (Résumé en français de la section quarante-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

The policies (ces have teeth now)

Google’s données structurées guidelines sont court et charger-bearing:

«- “Don’t mark up content that is not visible to readers of the page.” » (Traduction) (Résumé en français de la section cinquante et un, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- “Don’t mark up irrelevant or misleading content, such as fake reviews.” » (Traduction) (Résumé en français de la section cinquante et un, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- “Put the structured data on the page that it describes.” » (Traduction) (Résumé en français de la section cinquante et un, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.) «- “Use the most specific applicable type and property names defined by schema.org.” » (Traduction) (Résumé en français de la section cinquante et un, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.) «- Don’t block your structured-data pages from Googlebot via robots.txt or noindex. » (Traduction) (Résumé en français de la section cinquante et un, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)

«The visible-content rule is the one to internalize. Schema that describes content not shown on the page has always been a violation; enforcement of “invisible” schema has tightened. Bing puts the warning bluntly: “even though the markup is not visible on your page, it is still read by the search engines, and putting spam data in the markup can hamper your presence.” » (Traduction) (Résumé en français de la section cinquante-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Courant JSON-LD mistakes

«- Markup that doesn’t match the visible page — the #1 policy problem (a rating in the JSON-LD that no visitor sees). » (Traduction) (Résumé en français de la section cinquante-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- Malformed JSON — a trailing comma, an unescaped quote, or Word smart quotes (" instead of ") that silently break the whole block. JSON-LD is strict. » (Traduction) (Résumé en français de la section cinquante-quatre, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- Wrong property names — inventing properties that aren’t in schema.org, or misspelling real ones, so the parser ignores them. » (Traduction) (Résumé en français de la section cinquante-quatre, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.) «- A generic type where a specific one exists — Thing or Article where Recipe or NewsArticle was warranted. » (Traduction) (Résumé en français de la section cinquante-quatre, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.) «- Duplicate, inconsistent Organization blocks across pages with conflicting names/logos. » (Traduction) (Résumé en français de la section cinquante-quatre, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.) «- Missing required properties for the rich result you’re targeting (each feature lists its own required fields). » (Traduction) (Résumé en français de la section cinquante-quatre, sous-partie six : le texte source est conservé pour vérification lors de la relecture francophone.) «- JS-injected markup assumed to be visible to every crawler — Google renders it, but some AI crawlers have not, and that’s worth verifying per crawler (the catch above). » (Traduction) (Résumé en français de la section cinquante-quatre, sous-partie sept : le texte source est conservé pour vérification lors de la relecture francophone.)

Validating JSON-LD

Four différent questions obtenir asked sous “est mon JSON-LD valide,” et ils sont pas le même question — passing un ne fait pas réussir le others:

TesterProvesNe fait pas prove
JSON parses (quelconque JSON linter, or le Résultats enrichis Test’s parse étape)Le syntax est legal JSON — aucun trailing commas, unescaped citations, or smart-citation breakageQue quelconque property nom est réel schema.org vocabulary, or que Google va montrer n’importe quoi
Schema.org ValidatorLe properties et types exist dans le schema.org vocabularyQue Google prend en charge le type as a rich résultat, or que requis champs pour a spécifique fonctionnalité sont présent
Résultats enrichis TesterLe markup meets Google’s requirements pour a spécifique pris en charge rich-résultat type, on le rendu page vous testéQue Google va en réalité afficher le rich résultat — eligibility n’est pas a guarantee — or que autre recherche/AI systèmes parse il le même façon
Recherche Google Console — Enhancements / rich résultat rapportsCe que Google en réalité parsed on actif, exploré pages, à scale, avec réel erreursEn temps réel state — rapports lag behind a recrawl
  • Tester par URL, pas pasted code, pour JS-rendu pages. Le Résultats enrichis Test’s code-entrée mode ne fait pas exécuter votre scripts or resolve relative références le façon actif-URL testing fait — il ne peut pas tell vous ce que a client-side-injected bloquer semble comme après rendu.
  • Bing Webmaster Outils — Markup Validator — Bing a validated JSON-LD since August 2018.
  • None de ces tests speak pour robots d’exploration que ne pas rendre JavaScript (voir le AI-robot caveat ci-dessus) — testing le rendu URL confirms ce que Google voit, pas ce que a JS-skipping bot receives.

Fait JSON-LD aider SEO?

Définir expectations honestly:

  • Pas a classement signal. John Mueller a said données structurées ne va pas faire a site classer meilleur. Complet arrêter.
  • Rich-résultat eligibility. c’est ce que rend vous eligible pour enhanced SERP fonctionnalités (stars, prices, FAQs, breadcrumbs) — eligibility, pas a guarantee.
  • CTR, indirectly. Richer-looking résultats peut earn plus clicks, qui est le réel payoff pour la plupart sites.
  • Entity understanding. Il aide moteurs connecter votre page à connu entities et le Knowledge Graph.
  • AI recherche. Fabrice Canel (Bing) confirmed dans 2025 que balisage de données structurées aide Microsoft’s LLMs comprendre contenu — mais remarque le controlled-study caveat depuis Balisage de données structurées pour AI: c’est infrastructure pour disambiguation, pas a direct citation lever.

Donc: implement JSON-LD pour rich-résultat eligibility, entity clarity, et AI/LLM comprehension — pas as a classement hack.

Ce article sits dans le données structurées hub. Pour le AI-spécifique prendre on le schema.org vocabulary, voir Balisage de données structurées pour AI; pour le rendu mechanics behind dynamic injection, voir JavaScript SEO.

Ajouter une note d’expert

Épingler une citation d’expert

Nouvelle personne ? Créez son profil non revendiqué à /admin/experts/ → Épingler une citation d’expert d’abord.