Spotlight

JSON-LD enrichi pour entités nommées & contexte

GEO - JSON-LD enrichi pour entités nommées & contexte

Le balisage JSON-LD est devenu un élément essentiel pour aider les moteurs de recherche et les IA génératives à comprendre le contenu d’un site. Si les thèmes Blogger modernes proposent déjà un balisage de base pour chaque article, celui-ci reste souvent limité au strict minimum. Résultat : vos pages manquent de contexte et ne profitent pas pleinement de la montée en puissance des moteurs IA comme Bing Copilot, Perplexity ou Gemini, qui s’appuient sur des graphes d’entités pour produire des réponses fiables.

Dans cet article, nous allons voir comment enrichir le JSON-LD intégré au gadget Blog pour qu’il décrive mieux vos articles, et comment ajouter un JSON-LD global dans l’entête du thème afin de fournir une “carte d’identité” complète de votre blog. L’objectif : transformer un balisage générique en un graphe structuré et cohérent, plus facile à interpréter par les moteurs IA.

GEO & JSON-LD : le duo gagnant

Le GEO (Generative Engine Optimization) ne vise pas seulement à séduire Google, mais aussi à rendre vos contenus lisibles, fiables et réutilisables par les moteurs IA comme Bing Copilot, Perplexity ou Gemini. Ces systèmes utilisent des graphes d’entités pour comprendre et relier les informations. Le JSON-LD, qui est déjà partiellement intégré dans Blogger, est la porte d’entrée idéale pour créer ce graphe : il décrit en langage structuré l’auteur, l’organisation, le titre, la date, l’image et les sujets de vos articles.

Sur un blog de voyage ou de cuisine, un balisage natif va indiquer uniquement qu’il s’agit d’un BlogPosting publié par “Blogger”, sans rien dire du contexte réel. Résultat : une IA ne sait pas si “Super Toto” est l’auteur de la recette ou simplement un invité, ni si “Namur” est une destination de voyage ou une marque citée dans l’article. Avec un JSON-LD enrichi, vous pouvez préciser : “Cet article est rédigé par Super Toto, blogueur culinaire, publié par l’organisation MonPetitBlog.be, et parle de recettes namuroises.” Cela change tout pour les moteurs IA qui reprennent vos informations.

Concrètement, le GEO repose sur des micro-signaux contextuels : un @id unique par article, des mots-clés bien déclarés via keywords, des liens vers des profils sociaux ou pages externes fiables grâce à sameAs, et des propriétés comme about ou mentions pour clarifier les thèmes abordés. Avec ce maillage, vos articles ne sont plus de simples pages mais des briques bien identifiées dans le grand puzzle des connaissances IA.

Ce que propose Blogger par défaut : un balisage "light"

Les thèmes Blogger de la dernière génération génèrent automatiquement un petit bloc JSON‑LD pour chaque article. Ce balisage est inséré dans le gadget Blog sous le type BlogPosting. C’est une base fonctionnelle, mais elle reste assez minimaliste. Par exemple, si vous publiez un billet de voyage sur Namur, le code ressemblera à ceci :

<script type='application/ld+json'>
{
  "@context": "http://schema.org",
  "@type": "BlogPosting",
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://monblogvoyage.blogspot.com/2025/07/escapade-namur.html"
  },
  "headline": "Escapade gourmande à Namur",
  "description": "Un week‑end dédié aux boulettes, frites à la sauce tomate…",
  "datePublished": "2025-07-24T09:15:00+02:00",
  "dateModified": "2025-07-24T09:15:00+02:00",
  "image": {
    "@type": "ImageObject",
    "url": "https://blogger.googleusercontent.com/…",
    "height": 630,
    "width": 1200
  },
  "publisher": {
    "@type": "Organization",
    "name": "Blogger",
    "logo": {
      "@type": "ImageObject",
      "url": "https://blogger.googleusercontent.com/…",
      "width": 206,
      "height": 60
    }
  },
  "author": {
    "@type": "Person",
    "name": "Super Toto"
  }
}
</script>

Ce balisage suffit pour indiquer à Google qu’il s’agit bien d’un article avec un titre, une date, une image et un auteur. Mais pour le GEO, c’est très limité :

  • Le publisher est “Blogger”, ce qui n’aide pas à identifier votre blog ni votre logo.

  • L’article n’a pas de @id unique pour être relié facilement à un graphe d’entités.

  • Aucun mot‑clé, sujet ou contexte n’est indiqué (ni about, ni mentions).

  • L’auteur est réduit à un simple nom texte, sans URL ni profil qui confirme son identité.

Résultat : pour un moteur IA, votre article “Escapade gourmande à Namur” ressemble à des milliers d’autres billets sans contexte. Une IA comme Perplexity ne saura pas si “Namur” est un thème culinaire, une destination de voyage ou même le nom d’un restaurant.

Le JSON‑LD global : votre carte d’identité

Pour que les moteurs IA sachent qui est derrière votre blog, il est essentiel de leur fournir un balisage global qui décrit votre site dans son ensemble. Ce JSON‑LD agit comme une carte d’identité : il précise le nom du site, l’organisation, le logo, et éventuellement les profils sociaux. Sans ce repère, chaque article reste une entité isolée. Avec lui, tous vos contenus se rattachent à un graphe cohérent que les IA peuvent comprendre et exploiter.

Le modèle le plus simple, mais déjà très efficace, se compose généralement de deux entités :

  • WebSite : pour définir l’adresse, le nom et la description de votre blog.

  • Organization : pour identifier la “marque” ou la structure éditrice, avec logo et réseaux sociaux via sameAs.

Exemple XML de JSON‑LD global

<script type='application/ld+json'>
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#website",
      "url": "<data:blog.homepageUrl.canonical.jsonEscaped/>",
      "name": "<data:blog.title.jsonEscaped/>",
      "description": "Blog de voyage pour découvrir la Belgique",
      "publisher": {
        "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#organization",
      "name": "<data:blog.title.jsonEscaped/>",
      "url": "<data:blog.homepageUrl.canonical.jsonEscaped/>",
      "logo": {
        "@type": "ImageObject",
        "url": "https://blogger.googleusercontent.com/…/logo-rectangle.png",
        "width": 320,
        "height": 80
      },
      "sameAs": [
        "https://www.facebook.com/monblogvoyage",
        "https://www.instagram.com/monblogvoyage"
      ]
    }
  ]
}
</script>

Insérez ce code juste avant la balise </head> dans votre thème XML et remplacez les valeurs correspondant à votre blog. Ce bloc sera alors présent sur toutes les pages, y compris la page d’accueil et les pages statiques.

Une fois le code en place, testez votre page d’accueil dans Schema Markup Validator. Vous devriez voir les entités WebSite et Organization reliées par leurs @id.

Enrichir le balisage pour les articles, pages statiques et listes

Blogger fournit un balisage par défaut via l’inclusion postMetadataJSON, mais il est trop basique pour le GEO. Nous allons le remplacer par un balisage plus complet selon le type de page :

  • Articles & Pages statiques (pages uniques) → BlogPosting enrichi.

  • Pages multi-items (accueil, archives, recherche) → ItemList.

Pages d’articles & pages autonomes

Pour les pages d'articles et les pages autonomes, nous allons remplacer le contenu original de l’inclusion postMeta et ainsi éviter de "manipuler" des inclusions "invisibles" :

Code original

<b:includable id='postMeta' var='post'>
  <b:include data='post' name='postMetadataJSON'/>
</b:includable>

Exemple XML - Code enrichi GEO-ready

<b:includable id='postMeta' var='post'>

  <b:if cond='data:view.isSingleItem'>
    <!-- BlogPosting (articles) -->
    <script type='application/ld+json'>
    {
      "@context": "https://schema.org",
      "@type": "BlogPosting",
      "@id": "<data:post.url.canonical.jsonEscaped/>#blogpost",
      "mainEntityOfPage": {
        "@type": "WebPage",
        "@id": "<data:post.url.canonical.jsonEscaped/>"
      },
      "headline": "<data:post.title.jsonEscaped/>",
      "description": "<b:eval expr='(data:post.body snippet { length: 150, links:false, linebreaks:false, ellipsis:true }).jsonEscaped'/>",
      <b:if cond='data:view.isPost'>"keywords": [<b:loop index='i' values='data:post.labels' var='label'>
        "<data:label.name.jsonEscaped/>"<b:if cond='data:i + 1 lt data:post.labels.size'>,</b:if>
      </b:loop>],</b:if>
      "datePublished": "<data:post.date.iso8601.jsonEscaped/>",
      "dateModified": "<data:post.lastUpdated.iso8601.jsonEscaped/>",
      "image": {
        "@type": "ImageObject",
        <b:if cond='data:post.featuredImage.isResizable'>
        "url": "<b:eval expr='resizeImage(data:post.featuredImage, 1200, "1200:630")'/>",
        "width": 1200,
        "height": 630
        <b:else/>
        "url": "https://blogger.googleusercontent.com/…/default-featured-image-1200x630.jpg",
        "width": 1200,
        "height": 630
        </b:if>
      },
      "author": {
        "@type": "Person",
        "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#author",
        <b:if cond='data:post.author.url'>"url": "<data:post.author.url.jsonEscaped/>",</b:if>
        "name": "<data:post.author.name.jsonEscaped/>"
      },
      "publisher": {
        "@type": "Organization",
        "@id": "<data:blog.homepageUrl.canonical.jsonEscaped/>#organization"
      }
    }
    </script>
  </b:if>

</b:includable>

Pages multi-items

Pour les pages qui listent plusieurs articles (accueil, recherche, archives), nous ajoutons une nouvelle inclusion postListMeta dans le gadget Blog.

Exemple XML - Code enrichi GEO-ready

<b:includable id='postListMeta'>

  <b:if cond='data:view.isMultipleItems and data:posts.notEmpty'>
    <!-- ItemList (pages multi-items : accueil, labels, archives) -->
    <script type='application/ld+json'>
    
    {
      "@context": "https://schema.org",
      "@type": "ItemList",
      "@id": "<data:view.url.canonical.jsonEscaped/>#itemlist",
      "itemListElement": [
        <b:loop index='i' values='data:posts' var='post'>
          {
            "@type": "ListItem",
            "position": <b:eval expr='data:i + 1'/>,
            "url": "<data:post.url.canonical.jsonEscaped/>"
          }<b:if cond='data:i + 1 lt data:posts.size'>,</b:if>
        </b:loop>
      ]
    }
    </script>
  </b:if>

</b:includable>

Ajouter l'appel de l'inclusion

<b:includable id='main'>
  <!-- Ajout du ItemList JSON-LD pour les pages multi-items -->
  <b:include name='postListMeta'/>
  
  <!-- contenu de l'inclusion 'main' -->
  
</b:includable>

Ajoutez l’appel postListMeta à la première ligne de l'inclusion main.

Les propriétés clés d’un JSON-LD GEO-ready

Un JSON-LD bien optimisé repose sur des propriétés essentielles qui apportent contexte et cohérence. Ces champs, comme @id, keywords ou about, permettent aux moteurs IA de comprendre précisément qui publie, sur quoi et pourquoi, sans ambiguïté.

L’ancre unique et stable

Chaque article ou entité doit avoir un @id unique, par exemple : https://monblogvoyage.blogspot.com/2025/07/escapade-namur.html#blogpost.

Cet identifiant agit comme une référence permanente : il relie l’article à l’organisation, à l’auteur et aux autres données associées. Sans @id fiable, une IA peut mélanger deux contenus similaires ou ne pas retrouver le bon article dans son graphe de connaissances.

Les balises contextuelles

Ces propriétés apportent une couche de contexte indispensable :

  • keywords : mots-clés essentiels (“recette namuroise”, “week-end gourmand”).

  • articleSection : catégorie principale (“Gastronomie”, “Voyage”).

  • about : sujets centraux, déclarés comme entités ("@type": "Thing", "name": "Cuisine namuroise").

  • mentions : thèmes ou éléments cités, mais non principaux (“frites”, “boulettes à la sauce tomate”).

Ces signaux structurés aident les moteurs IA à comprendre le sujet exact d’un article, à découper le contenu en segments pertinents (chunking) et à éviter les résumés hors contexte.

La signature de confiance

Le champ publisher doit pointer vers votre Organization globale, et non “Blogger” par défaut. Cela permet aux IA comme Perplexity ou Bing Copilot d’afficher clairement la source de l’information.

De même, l’author ne doit pas se limiter à un simple nom : reliez-le via un @id (#author) et, si possible, ajoutez une URL de profil ou un site. Résultat : votre contenu gagne en crédibilité et en attribution.

Le réseau d’autorité

sameAs permet de lier vos entités à vos profils officiels : Instagram, LinkedIn, YouTube, etc. Ces liens servent de “preuve d’identité” et renforcent votre légitimité aux yeux des IA.

Structurer le graphe des entités : relier le global et le local

Un balisage GEO-ready ne se limite pas à empiler des scripts JSON-LD : il forme un graphe cohérent où chaque entité (site, organisation, auteur, article) est clairement identifiée et reliée. Cette structure permet aux moteurs IA de comprendre votre contenu sans ambiguïté et de l’attribuer correctement.

Les trois nœuds fondamentaux

Le graphe repose sur trois entités principales :

Entité Rôle dans le graphe Exemple d’@id
WebSite La racine du blog https://monblogvoyage.blogspot.com/#website
Organization L’identité éditrice (même si vous êtes solo) https://monblogvoyage.blogspot.com/#organization
Person L’auteur principal https://monblogvoyage.blogspot.com/#author

Chaque article fait référence à ces entités via leurs @id plutôt que de dupliquer leurs informations, par exemple :

"publisher": { "@id": "https://monblogvoyage.blogspot.com/#organization" },
"author":    { "@id": "https://monblogvoyage.blogspot.com/#author" }

Un @graph clair et compact

Dans le <head>, on peut définir les entités globales de cette manière :

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://monblogvoyage.blogspot.com/#website",
      "url": "https://monblogvoyage.blogspot.com/",
      "publisher": { "@id": "https://monblogvoyage.blogspot.com/#organization" }
    },
    {
      "@type": "Organization",
      "@id": "https://monblogvoyage.blogspot.com/#organization",
      "name": "Mon Blog Voyage"
    },
    {
      "@type": "Person",
      "@id": "https://monblogvoyage.blogspot.com/#author",
      "name": "Super Toto"
    }
  ]
}

Et dans le <body> de chaque article :

{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "@id": "https://monblogvoyage.blogspot.com/2025/07/frites-boulettes.html#blogpost",
  "publisher": { "@id": "https://monblogvoyage.blogspot.com/#organization" },
  "author":    { "@id": "https://monblogvoyage.blogspot.com/#author" },
  ...
}

Ainsi, tous les articles pointent vers les mêmes entités globales, formant un graphe unique et compréhensible.

Les erreurs à éviter

  • Dupliquer des entités

    Avoir plusieurs Organization ou Person avec des @id différents brouille la compréhension des IA.

  • Changer un @id en cours de route

    Par exemple, passer de #org à #organization sans redirection peut casser l’attribution historique.

  • Oublier les références

    Si un BlogPosting ne mentionne pas l’Organization, le moteur doit deviner la source – souvent, il ignore l’article.

Vérification et validation

Mettre en place un graphe JSON-LD ne suffit pas : il faut s’assurer qu’il est correctement interprété par les moteurs de recherche et les IA. Cette étape de validation permet de corriger les erreurs, de vérifier la cohérence des entités et de confirmer que les informations sont correctement attribuées.

Contrôler la structure avec les outils officiels

Outil Fonction principale
Schema Markup Validator Vérifie la validité du code JSON-LD, les types d’entités et les relations
Google Rich Results Test Confirme l’éligibilité des pages aux rich snippets

Astuce

Testez la page d’accueil (pour le graphe global) et un article (pour vérifier le BlogPosting). Le validateur doit afficher une seule entité WebSite, Organization et Person, puis le bon BlogPosting ou ItemList selon le type de page.

Vérifier la lecture par les IA

Les moteurs IA comme Perplexity ou Bing Copilot peuvent servir de test grandeur nature :

  • Demandez par exemple : "Qui est l’auteur de la recette frites et boulettes à la sauce tomate sur Mon Blog Voyage ?"

    L’IA doit citer "Super Toto" et "Mon Blog Voyage".

  • Ou encore : "Quels sujets sont abordés dans cet article ?"

    Les réponses devraient reprendre vos about, keywords et mentions (ex. “Cuisine namuroise”, “Frites”).

Si les réponses manquent de clarté ou n’affichent pas la bonne attribution, c’est souvent qu’un @id ou un champ contextuel manque dans le JSON-LD.

Conclusion

Enrichir le JSON-LD d’un blog Blogger, ce n’est pas seulement une affaire de SEO : c’est un levier stratégique pour le GEO. En structurant vos données autour d’un graphe d’entités cohérent (site, organisation, auteur, articles), vous facilitez la compréhension de votre contenu par les moteurs IA. Résultat : vos articles sont mieux interprétés, correctement attribués et plus visibles dans les réponses générées par des systèmes comme Bing Copilot ou Perplexity.

L’implémentation que nous avons vue – JSON-LD global dans le <head>, BlogPosting enrichi pour les articles et ItemList pour les pages multi-items – constitue une base solide pour tout blog Blogger équipé d'un thème de la dernière génération. Une fois validé via les outils officiels, ce balisage prépare le terrain pour aller plus loin : balises spécifiques (FAQ, HowTo, Product) et optimisations avancées pour les LLM.

Populaires cette semaine

Structurer une campagne Google Ads

Maîtriser l’aperçu social : Open Graph & Twitter Cards sur Blogger

Définir les objectifs pour votre blog