Données structurées et schema
Des déclarations lisibles par une machine sur ce que contient une page. Cela ne fait pas monter les positions directement ; cela décide si vous apparaissez en rich result, et de plus en plus si un assistant IA peut vous citer.
Pourquoi ce module existe
La validité compte plus que le volume. Un type correct vaut mieux que six types cassés.
Module I 25 actions n° 148 à 172 sur 410
-
148
Ajouter le schema Organization sur la page d’accueil : name, url, logo, sameAs, contactPoint
- Comment
- Sur la page d’accueil, ajoutez un JSON-LD Organization (ou un sous-type : LocalBusiness, ProfessionalService) avec @id, name, url, logo (ImageObject), sameAs (profils officiels) et contactPoint (téléphone, type, langues).
- Utilisez le nom exact affiché sur le site et dans vos profils.
- Donnez au logo une image carrée d’au moins 112 × 112 px accessible publiquement.
- Réutilisez le même @id comme éditeur des articles et pages.
- À éviter
- Un name différent du nom commercial affiché
- Des sameAs vers des profils inexistants ou d’autres entreprises
- Un logo en SVG seulement ou derrière une redirection
- Vérifier
- Test des résultats enrichis et validator.schema.org sur l’accueil : Organization sans erreur.
- Chaque URL de sameAs répond 200 et correspond bien à l’organisation.
-
149
Ajouter le schema WebSite avec potentialAction SearchAction (champ de recherche dans les sitelinks)
- Comment
- Ajoutez sur la page d’accueil un JSON-LD WebSite avec name, url et @id.
- Si le site a une recherche interne, ajoutez potentialAction SearchAction avec target (URL de recherche contenant {search_term_string}) et query-input.
- Vérifiez que l’URL cible renvoie bien une page de résultats.
- Utilisez le même nom que celui que vous souhaitez voir comme nom du site dans Google (alternateName pour les variantes).
- À éviter
- Déclarer une SearchAction alors que le site n’a pas de recherche
- Une URL cible qui renvoie une erreur
- S’attendre à ce que Google affiche la barre de recherche des sitelinks (il a retiré cet affichage fin 2024 ; le balisage WebSite reste utile pour le nom du site)
- Vérifier
- Validez le JSON-LD sur validator.schema.org.
- Ouvrez l’URL cible avec un terme de test : la page de résultats s’affiche.
-
150
Ajouter le schema Article/BlogPosting : headline, author (Person), datePublished, dateModified, image
- Comment
- Sur chaque article, ajoutez un JSON-LD Article ou BlogPosting avec headline, image (URL absolue, grande), datePublished et dateModified au format ISO 8601, author (Person avec name et url) et publisher (référence @id de l’organisation).
- Générez ces valeurs depuis les champs du CMS, pas à la main.
- Faites correspondre headline et dates à ce qui est affiché.
- Mettez à jour dateModified seulement lors de vraies modifications.
- À éviter
- Un author en texte simple au lieu d’un objet Person
- Des dates sans fuseau ou différentes de celles affichées
- Une image de 100 px ou un logo en guise d’image d’article
- Vérifier
- Test des résultats enrichis sur 3 articles : Article valide, sans avertissement bloquant.
- Les dates du JSON-LD correspondent aux dates visibles.
-
151
Ajouter le schema BreadcrumbList correspondant au fil d’Ariane visible
- Comment
- Générez le JSON-LD BreadcrumbList depuis la même donnée que le fil d’Ariane visible.
- Un ListItem par niveau, avec position (1, 2, 3…), name et item (URL absolue).
- Le dernier niveau (la page courante) peut omettre item.
- Ne balisez pas un chemin qui n’est pas affiché.
- À éviter
- Un balisage qui indique Accueil › Blog alors que le fil visible est Accueil › Guides › SEO
- Des positions qui ne commencent pas à 1
- Des URLs relatives
- Vérifier
- Test des résultats enrichis : BreadcrumbList valide sur chaque gabarit.
- Comparaison visuelle : noms et ordre identiques au fil affiché.
-
152
Ajouter le schema Person pour les auteurs, avec sameAs (LinkedIn, X, Wikipédia, ORCID)
- Comment
- Pour chaque auteur, créez une page auteur et un JSON-LD Person : name, url (page auteur), jobTitle, image, worksFor (référence de l’organisation) et sameAs vers ses profils réels (LinkedIn, X, ORCID, Wikipédia s’il existe).
- Référencez cette Person dans le champ author des articles via son @id.
- N’indiquez que des profils vérifiables appartenant à la personne.
- Tenez la page auteur à jour.
- À éviter
- Des sameAs vers des profils homonymes
- Un auteur fictif avec une photo de banque d’images
- Un objet Person différent sur chaque article pour la même personne
- Vérifier
- validator.schema.org sur la page auteur : Person valide.
- Chaque sameAs mène au profil de la même personne.
-
153
N’ajouter le schema FAQPage que là où les questions-réponses sont visibles sur la page (Google sanctionne le balisage FAQ caché)
- Comment
- Balisez en FAQPage uniquement les pages où la liste de questions-réponses est visible, en entier, sur la page.
- Recopiez exactement le texte visible dans name (question) et acceptedAnswer.text (réponse).
- N’utilisez pas FAQPage pour des questions soumises par des utilisateurs (utilisez QAPage) ni pour de la publicité.
- Sachez que Google limite désormais l’affichage enrichi des FAQ aux sites gouvernementaux et de santé faisant autorité : le balisage ne garantit aucun affichage.
- À éviter
- Des questions dans le JSON-LD absentes de la page
- La même FAQ balisée sur toutes les pages
- Des réponses qui ne sont que des appels à l’action
- Vérifier
- Test des résultats enrichis : FAQPage sans erreur sur les pages concernées.
- Chaque question du JSON-LD se retrouve mot pour mot sur la page.
-
154
Ajouter le schema HowTo pour les contenus pas à pas, avec une image par étape
- Comment
- Pour un tutoriel, balisez HowTo avec name, step (HowToStep avec name, text et image par étape), totalTime et, si pertinent, supply et tool.
- Faites correspondre chaque étape du JSON-LD à une étape visible.
- Ajoutez une image réelle par étape.
- Sachez que Google n’affiche plus les résultats enrichis HowTo (retirés en 2023) : le balisage reste lisible par d’autres moteurs et assistants, sans effet d’affichage Google.
- À éviter
- Baliser en HowTo une page de vente
- Des étapes du JSON-LD qui n’existent pas sur la page
- Attendre un affichage enrichi Google qui n’existe plus
- Vérifier
- validator.schema.org : HowTo valide.
- Chaque étape balisée a son équivalent visible et son image.
-
155
Ajouter Product et Offer : price, priceCurrency, availability, priceValidUntil, itemCondition
- Comment
- Sur chaque fiche produit, ajoutez Product avec name, image, description, sku, brand et offers (Offer avec price, priceCurrency au format ISO 4217, availability en URL schema.org, url, itemCondition, priceValidUntil si le prix est limité dans le temps).
- Générez les valeurs depuis la base produits pour qu’elles suivent le prix et le stock réels.
- Pour les variantes, utilisez ProductGroup avec hasVariant.
- Ajoutez shippingDetails et hasMerchantReturnPolicy si vous vendez en ligne.
- À éviter
- Un prix dans le JSON-LD différent du prix affiché
- availability « InStock » codée en dur
- Un priceValidUntil déjà dépassé
- Vérifier
- Test des résultats enrichis : Product (fiches marchandes) valide.
- Search Console → Améliorations → Fiches produits : 0 erreur ; comparez 5 prix balisés aux prix affichés.
-
156
N’ajouter AggregateRating et Review que pour des avis authentiques et affichés sur la page (jamais de fausses notes complaisantes)
- Comment
- Ne balisez AggregateRating et Review que pour des avis réellement laissés par des clients et affichés sur la page.
- Renseignez ratingValue, reviewCount (ou ratingCount), bestRating, et pour chaque avis author et reviewRating.
- Ne balisez pas d’avis sur votre propre organisation dans LocalBusiness ou Organization sur votre site : Google ne les affiche pas (avis « autoproclamés »).
- Ne sélectionnez pas uniquement les bons avis.
- À éviter
- Une note 5/5 codée en dur dans le thème
- Importer des avis Google dans son balisage
- Des avis balisés mais invisibles pour le visiteur
- Vérifier
- Test des résultats enrichis : Review et AggregateRating valides sur les fiches concernées.
- Le nombre d’avis balisés correspond au nombre d’avis visibles.
-
157
Ajouter VideoObject : name, description, thumbnailUrl, uploadDate, duration, contentUrl
- Comment
- Pour chaque page dont la vidéo est le contenu principal, ajoutez VideoObject avec name, description, thumbnailUrl, uploadDate (ISO 8601), duration (ISO 8601, ex. PT4M30S) et contentUrl ou embedUrl.
- Ajoutez hasPart (Clip) ou SeekToAction pour les moments clés si la vidéo est longue.
- Faites correspondre titre et description à ce qui est affiché.
- Assurez-vous que la miniature est accessible et que la vidéo n’est pas bloquée au robot.
- À éviter
- Une durée au mauvais format (4:30 au lieu de PT4M30S)
- Une miniature en 404
- Baliser des vidéos décoratives en arrière-plan
- Vérifier
- Test des résultats enrichis : Vidéo valide.
- Search Console → Vidéos : pages avec « Vidéo indexée » et raisons d’exclusion à traiter.
-
158
Ajouter LocalBusiness (ou un sous-type) : NAP, geo, openingHoursSpecification, priceRange
- Comment
- Ajoutez un JSON-LD LocalBusiness ou le sous-type le plus précis (Dentist, Restaurant, TravelAgency…) : name, address (PostalAddress complet), telephone, geo (latitude, longitude), openingHoursSpecification, priceRange, url, image.
- Utilisez exactement le même nom, la même adresse et le même téléphone que sur Google Business Profile.
- Une page par établissement si vous en avez plusieurs, chacune avec son balisage.
- Mettez à jour les horaires exceptionnels (specialOpeningHoursSpecification).
- À éviter
- Des horaires balisés différents des horaires affichés
- Une adresse abrégée différemment de la fiche Google
- Baliser un établissement physique pour une activité sans adresse accueillant du public
- Vérifier
- Test des résultats enrichis : LocalBusiness valide.
- Comparez nom, adresse et téléphone balisés à la fiche Google Business Profile : identiques.
-
159
Ajouter les schemas Recipe, Event, JobPosting, Course ou SoftwareApplication quand le type de contenu correspond
- Comment
- Recensez vos types de contenus : recettes, événements, offres d’emploi, formations, logiciels.
- Pour chacun, appliquez le type correspondant avec les propriétés requises par Google : Recipe (image, recipeIngredient, recipeInstructions), Event (startDate, location, eventStatus), JobPosting (datePosted, validThrough, hiringOrganization, jobLocation), Course (provider), SoftwareApplication (operatingSystem, applicationCategory, offers).
- Générez-les depuis les données structurées du CMS.
- Retirez le balisage quand l’événement ou l’offre expire.
- À éviter
- Un JobPosting laissé en ligne après la fin du recrutement
- Baliser un article de blog en Recipe parce qu’il cite un plat
- Des propriétés requises manquantes qui rendent la page inéligible
- Vérifier
- Test des résultats enrichis sur un exemple de chaque type : valide.
- Search Console → Améliorations : un rapport par type, sans erreur.
-
160
Ajouter ImageObject avec license et acquireLicensePage pour être éligible aux images sous licence
- Comment
- Pour les images dont vous détenez les droits, ajoutez dans le JSON-LD de la page un ImageObject avec contentUrl, license (URL de votre page de licence), acquireLicensePage (page où obtenir une licence), creditText, creator et copyrightNotice.
- Créez réellement ces pages de licence.
- Alternativement, renseignez les métadonnées IPTC dans le fichier image.
- N’appliquez pas ces propriétés à des images dont vous n’êtes pas l’ayant droit.
- À éviter
- Déclarer une licence sur une photo de banque d’images
- Une acquireLicensePage qui renvoie vers la page d’accueil
- Des métadonnées IPTC effacées par la compression
- Vérifier
- Test des résultats enrichis : Métadonnées d’image valides.
- Google Images : le badge « Licence » apparaît sur vos images après indexation.
-
161
Ajouter partout des liens sameAs pour rattacher l’entité à Wikidata, Wikipédia, Crunchbase et aux réseaux sociaux
- Comment
- Listez les profils officiels de l’organisation : Wikidata, Wikipédia (si l’article existe), Crunchbase, LinkedIn, réseaux sociaux, annuaires professionnels reconnus.
- Ajoutez leurs URLs dans sameAs de l’Organization (et des Person pour les auteurs).
- Vérifiez que chaque profil renvoie vers votre site et porte le même nom.
- Ne créez pas de fiche Wikidata ou Wikipédia pour l’occasion si l’organisation ne remplit pas leurs critères.
- À éviter
- Lier des profils abandonnés ou vides
- Lier une page Wikipédia d’une entité homonyme
- Ajouter des dizaines de sameAs vers des annuaires de faible qualité
- Vérifier
- Chaque URL de sameAs répond 200 et décrit la même organisation.
- Recherche Google sur le nom de la marque : un panneau d’entité ou des profils cohérents apparaissent avec le temps.
-
162
Utiliser un unique @graph connecté, avec des références @id, pour que les entités se lient entre elles (organisation ↔ auteur ↔ article)
- Comment
- Regroupez le balisage de chaque page dans un seul script JSON-LD avec "@graph": [ … ].
- Donnez un @id stable à chaque entité (https://votresite.com/#organization, #website, /auteur/nom/#person, URL de la page + #article).
- Reliez les entités par référence : publisher: {"@id": "…#organization"}, author: {"@id": "…#person"}, isPartOf: {"@id": "…#website"}.
- Définissez chaque entité complètement une seule fois et référencez-la ailleurs.
- À éviter
- Des @id qui changent d’une page à l’autre pour la même organisation
- Des références vers un @id jamais défini
- Plusieurs blocs JSON-LD contradictoires générés par différents plugins
- Vérifier
- validator.schema.org : un graphe où les références se résolvent, sans entité orpheline.
- Même @id d’organisation sur toutes les pages du site.
-
163
Ajouter le schema speakable sur les contenus d’actualité et les tutoriels éligibles à la recherche vocale
- Comment
- Identifiez les sections qui se prêtent à la lecture à voix haute : résumé d’actualité, réponse courte, définition.
- Ajoutez sur la page un objet WebPage avec speakable (SpeakableSpecification) et cssSelector pointant vers ces sections (ou xpath).
- Gardez les passages courts (20 à 30 secondes de lecture) et autonomes.
- Sachez que Google réserve speakable aux éditeurs d’actualité, en bêta et en anglais : pour les autres, c’est un signal pour d’autres assistants, sans garantie.
- À éviter
- Pointer speakable vers toute la page
- Des sélecteurs CSS qui ne correspondent à aucun élément
- Attendre un effet Google en français
- Vérifier
- validator.schema.org : speakable valide.
- document.querySelectorAll('sélecteur') dans la console renvoie bien les sections voulues.
-
164
Ajouter MerchantReturnPolicy et shippingDetails pour les fiches produit et les annonces marchandes
- Comment
- Dans l’Offer de chaque produit, ajoutez shippingDetails (OfferShippingDetails : shippingRate avec value et currency, shippingDestination avec addressCountry, deliveryTime avec handlingTime et transitTime).
- Ajoutez hasMerchantReturnPolicy (MerchantReturnPolicy : applicableCountry, returnPolicyCategory, merchantReturnDays, returnMethod, returnFees).
- Si la politique est la même pour tout le site, définissez-la une fois au niveau de l’Organization.
- Faites correspondre ces valeurs à vos conditions générales affichées.
- À éviter
- Une livraison « gratuite » balisée alors que la fiche annonce des frais
- Un délai de retour différent des CGV
- Un pays de livraison au mauvais format (France au lieu de FR)
- Vérifier
- Test des résultats enrichis : Fiches marchandes valides avec livraison et retours.
- Search Console → Fiches marchandes : aucun avertissement sur shippingDetails ou hasMerchantReturnPolicy.
-
165
Ajouter le schema QAPage sur les vraies pages de questions-réponses d’utilisateurs (et non FAQPage)
- Comment
- Réservez QAPage aux pages où une question est posée par un utilisateur et où d’autres utilisateurs répondent (forum, communauté, support public).
- Balisez mainEntity en Question (name, text, answerCount, dateCreated, author) avec acceptedAnswer et/ou suggestedAnswer (Answer avec text, author, upvoteCount, url).
- Une seule question par page.
- Utilisez FAQPage (et non QAPage) pour vos propres questions-réponses éditoriales.
- À éviter
- Baliser une FAQ rédigée par vous en QAPage
- Plusieurs questions dans une QAPage
- Des réponses balisées absentes de la page
- Vérifier
- Test des résultats enrichis : Questions et réponses valide sur une page de forum.
- Chaque réponse balisée est visible avec son auteur.
-
166
Valider chaque gabarit dans le test des résultats enrichis de Google et le validateur Schema.org ; corriger toutes les erreurs et alertes
- Comment
- Listez vos gabarits (accueil, article, fiche produit, catégorie, page locale, événement).
- Testez une URL de chaque gabarit dans le test des résultats enrichis de Google (search.google.com/test/rich-results) puis dans validator.schema.org.
- Corrigez les erreurs (bloquantes pour l’éligibilité) puis les avertissements utiles (propriétés recommandées manquantes).
- Retestez après chaque changement de gabarit ou de plugin.
- À éviter
- Ne tester que la page d’accueil
- Ignorer tous les avertissements, y compris ceux qui privent d’un affichage enrichi
- Tester le HTML local au lieu de l’URL rendue en ligne
- Vérifier
- Tableau par gabarit : date du test, 0 erreur, avertissements restants justifiés.
- Search Console → Améliorations : 0 élément non valide.
-
167
Garder les valeurs du schema cohérentes avec le contenu visible (une discordance rend inéligible, voire pénalise)
- Comment
- Générez les valeurs du JSON-LD depuis les mêmes données que la page (prix, stock, note, dates, auteur, adresse).
- Contrôlez automatiquement à chaque build ou dans vos tests : comparez les valeurs balisées au texte affiché.
- Retirez toute propriété dont la valeur n’est pas visible ou vérifiable sur la page.
- Revérifiez après une promotion, un changement d’horaires ou une mise à jour de prix.
- À éviter
- Un prix balisé figé pendant que le prix affiché change
- Une note moyenne balisée sans avis visibles
- Des horaires balisés différents de ceux de la page contact
- Vérifier
- Prenez 10 pages : chaque valeur balisée se retrouve sur la page.
- Search Console → Actions manuelles : aucune action pour « données structurées non conformes ».
-
168
Surveiller la Search Console → Améliorations pour les erreurs de schema et les impressions par type de résultat enrichi
- Comment
- Ouvrez Search Console → Améliorations (ou « Résultats enrichis » selon l’interface) et parcourez chaque type détecté.
- Traitez les éléments non valides, puis cliquez « Valider la correction ».
- Dans Performances → Apparence dans les résultats de recherche, suivez impressions et clics par type d’affichage enrichi.
- Programmez un contrôle mensuel et après chaque déploiement de gabarit.
- À éviter
- Découvrir une erreur de balisage produit trois mois après
- Ignorer les alertes e-mail de la Search Console
- Corriger sans lancer la validation
- Vérifier
- Rapport mensuel : nombre d’éléments valides par type, et tendance des impressions enrichies.
- Aucune erreur ouverte depuis plus de 30 jours.
-
169
Préférer le JSON-LD dans le <head> ; le faire rendre côté serveur pour que Googlebot le lise sans JavaScript
- Comment
- Écrivez le balisage en JSON-LD dans un <script type="application/ld+json">, de préférence dans le <head>.
- Produisez-le côté serveur (gabarit, plugin SEO, génération statique) plutôt que par un script client ou le gestionnaire de balises.
- Vérifiez qu’il est présent dans le code source initial (Ctrl+U), pas seulement dans l’inspecteur.
- Évitez de mélanger JSON-LD et microdonnées pour les mêmes entités.
- À éviter
- Injecter le JSON-LD via Google Tag Manager : lecture incertaine et retardée
- Produire du JSON invalide (virgule finale, guillemets typographiques)
- Deux balisages concurrents, un en microdonnées et un en JSON-LD
- Vérifier
- Affichez le code source : le JSON-LD y est avant toute exécution de JavaScript.
- Search Console → Inspection de l’URL → Tester l’URL en ligne : les données structurées sont détectées.
-
170
Ajouter un dateModified qui ne change qu’en cas de modification réelle du contenu (il alimente la fraîcheur)
- Comment
- Alimentez dateModified depuis la date de dernière modification réelle du contenu dans le CMS.
- Ne le mettez pas à jour lors d’une correction de faute, d’un changement de gabarit ou d’une republication sans modification.
- Utilisez le format ISO 8601 avec fuseau (2026-09-14T10:00:00+01:00).
- Gardez la même date dans le JSON-LD, dans la mention visible et dans le <lastmod> du sitemap.
- À éviter
- Un dateModified égal à la date du build sur toutes les pages
- Un plugin qui met la date du jour à chaque visite
- Changer la date sans changer le contenu pour paraître frais
- Vérifier
- Déployez sans modifier de contenu : aucun dateModified ne change.
- Modifiez un article : son dateModified, sa date visible et son <lastmod> changent ensemble.
-
171
Ajouter le typage WebPage/CollectionPage et primaryImageOfPage dans les gabarits
- Comment
- Déclarez le type de chaque page dans le graphe : WebPage par défaut, CollectionPage pour les catégories et listes, AboutPage, ContactPage, FAQPage, ItemPage selon le cas.
- Reliez la page au site (isPartOf → @id du WebSite) et à son sujet (mainEntity ou about).
- Ajoutez primaryImageOfPage (ImageObject) avec l’image principale de la page.
- Générez ce typage depuis le gabarit.
- À éviter
- Déclarer toutes les pages en Article
- Une primaryImageOfPage différente de l’image réellement principale
- Oublier isPartOf et laisser la page isolée dans le graphe
- Vérifier
- validator.schema.org sur une catégorie : CollectionPage relié au WebSite.
- Chaque gabarit déclare le type de page correspondant.
-
172
Supprimer le balisage obsolète ou abusif (fausses notes, HowTo caché) qui expose à une action manuelle
- Comment
- Recensez le balisage existant sur tous les gabarits, y compris celui ajouté par des plugins oubliés.
- Supprimez les notes et avis inventés ou non affichés, les FAQ et HowTo invisibles, les types sans rapport avec la page.
- Retirez les propriétés dépréciées ou abandonnées par Google qui n’apportent plus rien.
- Vérifiez Search Console → Actions manuelles et traitez une éventuelle action pour données structurées abusives.
- À éviter
- Garder un plugin d’étoiles qui ajoute une note 5/5 à toutes les pages
- Laisser des FAQ cachées ajoutées pour occuper la page de résultats
- Supprimer le balisage utile en même temps que l’abusif
- Vérifier
- Test des résultats enrichis sur chaque gabarit : plus aucun type non justifié.
- Search Console → Actions manuelles : aucune.
Continuer
Module suivant
← Module H / 14 actions
Autorité thématique et sémantique
Se classer sur une requête, c’est de la chance. Se classer sur un domaine, c’est une structure : clusters, pages piliers, couverture d’entités, et…
Module J / 12 actions →
Fraîcheur
Certaines requêtes récompensent la récence, la plupart non. Ces actions distinguent les deux et mettent fin à l’erreur classique : remonter la date…