Un client m'a envoyé un jour un mail paniqué : « Google affiche mon étoile de notation mais le prix est faux dans les résultats. » Le prix n'était pas dans la page. Il était dans un vieux bloc JSON-LD que personne n'avait touché depuis des mois. Neuf caractères. C'étaient neuf caractères qui pourrissaient l'aperçu de ses produits depuis des semaines.
C'est ça, le balisage schema. On n'y pense pas jusqu'au jour où il raconte n'importe quoi à notre place. Et quand on commence à structurer ses données avec le balisage schema pour le SEO, on découvre vite que le sujet n'est pas « ajouter du code », mais « décider quel code reste vrai ». Voilà l'angle dont personne ne parle vraiment.
Points clés à retenir
- Le balisage schema ne fait pas monter un site dans les classements. Il aide les moteurs à comprendre ce que dit une page, ce qui peut changer son affichage.
- Le format JSON-LD s'est imposé comme la référence. Un seul bloc
@graphbien construit vaut mieux que huit blocs éparpillés. - Un balisage faux est plus destructeur qu'un balisage absent. Google fait confiance à ce que vous déclarez, puis se fâche quand c'est faux.
- La validation ne se fait pas dans un outil, mais en continu : test des résultats enrichis, rapport Search Console, et une alerte quand une valeur change.
- Pour les moteurs IA génératifs, un graphe clair devient un avantage : moins d'entités ambiguës, moins de risque d'attribuer vos chiffres à un concurrent.
Structurer ses données avec le balisage schema : ce que ça change concrètement
La confusion la plus répandue tient en une phrase : on croit que le balisage est un levier de position, alors que c'est un levier de compréhension. Google ne vous récompense pas pour avoir écrit du JSON-LD. Il récompense le fait que vous ayez levé son ambiguïté.
La différence paraît mince. Elle ne l'est pas. Prenons une page produit où le prix apparaît trois fois : dans le texte, dans un tableau comparatif, dans une mention « à partir de ». Sans balisage, le moteur hésite. Avec un balisage correct, vous lui dites : voici le prix, voici la devise, voici la date de mise à jour. Il arrête de deviner.
Ce que le balisage ne fait pas (et qu'on lit partout)
Il ne fait pas grimper une page de la position 12 à la position 3. J'ai vu cette promesse dans des articles, jamais dans une console Search Console. Ah, et il ne « rend » pas non plus votre site plus rapide, contrairement à ce qu'un prestataire m'a affirmé un jour, sérieusement, en réunion.
Ce qu'il fait, en revanche : il sécurise l'affichage. Un article peut obtenir une date, un auteur, un fil d'Ariane cliquable. Un commerce local peut afficher ses horaires directement dans les résultats, ce qui évite vingt appels pour demander « vous ouvrez à quelle heure ? ». C'est moins spectaculaire qu'un bond au classement. C'est plus mesurable.
Données structurées et non structurées : la vraie différence
Une donnée non structurée, c'est du texte libre. « Comptoir du Canal, 14 rue des Vannes, ouvert du mardi au samedi jusqu'à 19h, bières belges. » Les moteurs savent globalement de quoi il s'agit, mais ils doivent deviner chaque élément.
Une donnée structurée, c'est la même information rangée dans des cases nommées : name, address, openingHours, servesCuisine. Vous ne changez pas le contenu, vous changez sa lisibilité pour une machine.
Le malentendu classique : « si je structure tout, Google va afficher exactement ce que je veux ». Non. Vous déclarez une intention, le moteur décide de l'afficher ou non, selon des règles qui lui appartiennent.
Pourquoi JSON-LD dans la quasi-totalité des cas
Trois formats existent historiquement : microdonnées, RDFa, et JSON-LD. Le troisième s'est imposé parce qu'il vit dans un bloc <script> séparé du HTML visible. Concrètement, cela veut dire que je peux modifier mon balisage sans toucher à une seule ligne de mon gabarit d'affichage.
Sur un site de 400 pages que j'ai repris, tout était en microdonnées itemprop disséminées dans le corps du texte. Chaque changement de mise en page cassait le balisage. La migration vers un bloc JSON-LD centralisé nous a pris neuf jours. On a récupéré zéro position. On a récupéré la paix.
Un exemple de balisage schema réel, avec les erreurs que j'ai commises
Voici le bloc que j'utilise aujourd'hui pour un article, en JSON-LD. Je l'ai coupé au strict nécessaire, mais il est complet et copiable.
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://exemple.fr/#organization",
"name": "Exemple",
"url": "https://exemple.fr/",
"logo": "https://exemple.fr/logo.png"
},
{
"@type": "WebSite",
"@id": "https://exemple.fr/#website",
"url": "https://exemple.fr/",
"publisher": { "@id": "https://exemple.fr/#organization" }
},
{
"@type": "Article",
"headline": "Structurer ses données avec le balisage schema",
"datePublished": "2026-03-04",
"dateModified": "2026-07-27",
"author": { "@id": "https://exemple.fr/#auteur" },
"publisher": { "@id": "https://exemple.fr/#organization" }
}
]
} L'erreur n°1 : déclarer ce que la page ne dit pas
Mon premier balisage produit annonçait une fourchette de prix en euros alors que la page affichait des francs suisses pour une boutique en ligne. Résultat : un avertissement dans Search Console, et un aperçu de résultat qui affichait un prix trois fois trop bas pour un public français. Ce n'était pas Google qui était en faute.
Depuis, je m'applique une règle simple : si ce n'est pas visible à l'écran pour un humain, je ne le mets pas dans le JSON-LD. Elle m'a évité plus de problèmes qu'aucun outil de validation.
L'erreur n°2 : empiler les blocs au lieu de les relier
Au début, je collais un bloc par type : un pour Organization, un pour Article, un pour BreadcrumbList. Chacun répétait le nom du site. Résultat : des entités dupliquées que les moteurs peinaient à rattacher. La solution s'appelle @graph, et elle consiste à tout rassembler dans un seul tableau avec des identifiants @id réutilisables. Je vous renvoie au bloc ci-dessus : l'article pointe vers l'auteur et l'éditeur par @id, pas en recopiant leurs données.
Comment tester ses données structurées sans y passer la journée
Deux outils suffisent, et un troisième pour la surveillance.
- L'outil de test des résultats enrichis de Google : il vous dit quels types sont éligibles à un affichage enrichi, et quels champs manquent. C'est le juge de paix.
- Le validateur Schema.org : plus permissif, il vérifie que votre syntaxe respecte le vocabulaire. Utile pour repérer une propriété mal orthographiée ou un type inexistant.
- Search Console : la seule source qui parle au nom de Google sur votre site réel. C'est là que remontent les erreurs de traitement, parfois des semaines après la mise en ligne.
Une chose que personne ne dit : valider à la main une fois ne sert à rien si votre balisage est généré dynamiquement. Sur une boutique que je suivais, un champ de disponibilité changeait selon le stock. Un jour, un bug a figé toutes les fiches en « en stock ». Le balisage, lui, continuait de dire la vérité au moteur — c'est-à-dire un mensonge.
Comparatif des trois formats d'implémentation
| Critère | JSON-LD | Microdonnées | RDFa |
|---|---|---|---|
| Recommandé par Google | Oui | Toléré | Toléré |
| Séparé du HTML visible | Oui | Non | Non |
| Maintenance sur gros site | Simple | Fragile | Fragile |
| Risque de casser la mise en page | Nul | Élevé | Moyen |
| Adapté aux gabarits dynamiques | Oui | Difficile | Moyen |
Données structurées FAQ : le piège qui se referme
Le balisage FAQPage a longtemps été la technique la plus rentable du lot : quelques questions, un balisage propre, et un bloc de résultats qui pousse le contenu vers le bas de la page. Sauf que les règles d'affichage ont été resserrées, et que de nombreux sites qui balisaient n'importe quelle page avec des questions inventées se sont retrouvés avec un avertissement plutôt qu'un enrichissement.
Ma position, sans détour : balisez une FAQ uniquement si les questions sont réellement posées par vos visiteurs et réellement visibles sur la page. Une FAQ fabriquée pour occuper l'espace ne tient pas longtemps.
Et surtout, ne dupliquez pas. J'ai vu un site baliser la même réponse sur douze URLs pour couvrir des variantes de recherche. Le rapport Search Console a mis quatre mois à signaler le problème. Quatre mois pendant lesquels l'équipe a cru que ça fonctionnait.
Données structurées et moteurs IA : ce qui se joue vraiment
Voilà le point que je trouve le plus intéressant, et le plus mal expliqué.
Quand un moteur génératif résume une page, il manipule des entités : cette entreprise, ce produit, cette date, ce prix. Un balisage correct lui donne ces entités sur un plateau. Un balisage absent l'oblige à les extraire d'un texte, avec le risque d'erreur que cela suppose.
Est-ce que cela garantit votre citation dans une réponse générée ? Non, personne ne peut le garantir, et méfiez-vous de quiconque vous vend l'inverse. Ce que j'observe, en revanche, c'est que les pages dont les données sont propres produisent des résumés plus fidèles. Moins de chiffres attribués au mauvais acteur, moins de dates décalées. Pour une marque, une erreur de prix reprise dans une réponse générée coûte autrement plus cher qu'une position perdue.
Par où commencer, dans quel ordre
- Organization sur la page d'accueil, avec un
@idstable. C'est la racine de tout le reste. - WebSite, relié à l'Organization par cet identifiant.
- Le type qui correspond à votre activité réelle : Article, Product, LocalBusiness, Event.
- BreadcrumbList, parce qu'il change l'affichage du chemin dans les résultats.
- FAQPage, seulement si vos questions sont authentiques.
- Et rien d'autre, jusqu'à ce que le premier lot soit validé et stable.
Cette liste n'a rien de spectaculaire. J'ai pourtant vu des équipes empiler quinze types de balisage sur un site de dix pages, parce qu'un audit le recommandait. Résultat : trois avertissements, deux entités dupliquées, et personne capable de dire quel bloc produisait quel affichage.
Le cas particulier du balisage en SNT seconde
On me demande régulièrement pourquoi ce sujet apparaît dans le programme de SNT en seconde. La réponse est simple : c'est l'un des rares endroits du web où l'on voit, noir sur blanc, la différence entre ce qu'un humain comprend et ce qu'une machine comprend. Deux lignes de JSON montrent mieux cette distinction qu'un long chapitre théorique. Et franchement, c'est un bon point d'entrée : quand on a écrit un @type soi-même, on ne voit plus jamais une page web de la même manière.
Ce qu'il faut retenir
Le balisage schema n'est pas un truc qu'on ajoute une fois pour cocher une case. C'est un contrat que vous passez avec des machines qui, elles, ne vérifient pas toujours si vous tenez parole.
Ma règle tient en trois mots : déclarer, vérifier, maintenir. Déclarer uniquement ce que la page montre. Vérifier sur les pages réellement publiées, pas sur un aperçu local. Maintenir, parce qu'un champ de prix ou de stock reste rarement vrai pendant deux ans.
Alors voilà la question que je me pose maintenant, et que je vous laisse : si un moteur résumait votre site demain sans jamais l'ouvrir, que raconterait-il de vous ? C'est probablement ce que votre balisage dit déjà.