Schema.org JSON-LD : les données structurées pour la recherche Google

Comment choisir, générer et valider des données structurées conformes au contenu visible, et éligibles aux résultats enrichis sans jamais les garantir.

Les données structurées Schema.org forment un vocabulaire que les moteurs de recherche utilisent pour comprendre le contenu des pages. Bien implémentées, elles transforment un snippet ordinaire en résultat enrichi : notes en étoiles, prix des produits, horaires d’ouverture ou photos affichés directement dans les résultats de Google.

Cet article couvre le système complet : du choix du format et de la hiérarchisation des schémas jusqu’au code JSON-LD concret pour Organization, Product, AggregateRating, Review et ImageObject, avec une attention particulière aux sous-types les plus souvent négligés.

Le parcours du JSON-LD : le balisage placé dans <script> → Google analyse la structure → rich snippet avec étoiles de notation et prix directement dans la SERP.
Google recommande officiellement le JSON-LD comme format privilégié. Contrairement aux Microdata et au RDFa, le JSON-LD est placé dans une balise <script> et ne s’intègre pas au balisage HTML : il est donc plus facile à maintenir et à mettre à jour indépendamment de la mise en page.

Qu’est-ce que Schema.org et pourquoi utiliser les données structurées

Schema.org est un projet commun de Google, Bing, Yahoo et Yandex, lancé en 2011. Le vocabulaire compte plus de 900 types de données et des milliers de propriétés. Tous les types héritent du type de base Thing et se répartissent en Person, Organization, Product, Event, CreativeWork, Action et d’autres.

Visible

Correspondre à la page

Le balisage doit décrire des informations que les lecteurs peuvent voir et vérifier.

Éligible

Respecter les règles de la fonctionnalité

Utilisez un type pris en charge et respectez ses règles de contenu et techniques.

Valider

Tester le graphe

Contrôlez la syntaxe et les exigences de la politique, puis inspectez la page après rendu.

Observer

Aucune garantie d’affichage

Réussir un test ne garantit pas qu’un résultat enrichi sera affiché.

Le balisage Schema.org répond à trois besoins à la fois. Pour les moteurs de recherche, il identifie sans ambiguïté les entités : il s’agit d’une organisation, et non d’un simple texte portant un nom d’entreprise ; il s’agit d’un prix de produit, et non d’un simple nombre. Pour les internautes, les résultats enrichis rendent le snippet plus informatif avant le clic. Pour l’entreprise, ils améliorent le CTR et renforcent la présence dans le Knowledge Graph.

Formats : JSON-LD, Microdata, RDFa

Les données structurées Schema.org peuvent être ajoutées de trois façons. Pour un nouveau projet, le choix est clair : le JSON-LD. Les deux autres formats sont pris en charge, mais plus difficiles à maintenir.

FormatEmplacementLien avec le HTMLRecommandation Google
JSON-LDBalise <script type="application/ld+json">Séparé du HTMLPréféré
MicrodataAttributs itemscope, itemtype, itempropIntégré aux éléments HTMLPris en charge
RDFaAttributs vocab, typeof, propertyIntégré aux éléments HTMLPris en charge
Le JSON-LD est le choix évident pour les nouveaux projets : le code est isolé de la mise en page, il se génère facilement de façon dynamique et se met à jour sans toucher aux modèles HTML. Microdata et RDFa sont pris en charge par Google, mais toute modification de la mise en page peut casser le balisage sans que personne ne s’en aperçoive.

Le modèle JSON-LD de base est le même pour toutes les pages : une balise <script> de type application/ld+json, contenant un objet JSON avec les champs obligatoires @context et @type. La balise peut être placée dans <head> ou à la fin de <body>. Plusieurs schémas, c’est plusieurs blocs <script> distincts.

html
<!-- Base JSON-LD template -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "Site Name",
  "url": "https://example.com"
}
</script>

<!-- Multiple schemas — multiple <script> blocks -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Company",
  "url": "https://example.com"
}
</script>

Priorité des schémas : ce qui produit des résultats enrichis dans Google

Tous les types Schema.org ne donnent pas un résultat enrichi. Google prend en charge un ensemble limité de types qui apportent des améliorations visuelles dans la SERP. Les autres schémas aident Google à comprendre le contenu, sans modifier l’apparence du snippet.

Entreprises et organisations

LocalBusiness, Restaurant, Store : horaires, adresse, téléphone et notes dans le Knowledge Panel. Priorité absolue pour les entreprises locales.

Produits et prix

Product + Offer : prix, disponibilité et notes directement dans le snippet. Google Shopping et rich snippets. Indispensable pour l’e-commerce.

Contenu et FAQ

Article et les autres types pris en charge doivent représenter fidèlement le contenu visible. Le contenu de type FAQ reste utile aux lecteurs, mais il ne garantit pas une extension du résultat de recherche.

Notes et avis

AggregateRating + Review : notes en étoiles dans le snippet. L’élément le plus visible. Fonctionne pour Product, LocalBusiness, Recipe et Course.

Type de schémaRésultat enrichi dans GooglePriorité
Product + OfferPrix, disponibilité, notes dans le snippet ; cartes ShoppingCritique pour l’e-commerce
LocalBusiness + AggregateRatingKnowledge Panel, Map Pack, étoilesCritique pour le commerce local
Article / NewsArticleCarrousel Top Stories, date de publicationÉlevée pour les médias et les blogs
BreadcrumbListFil d’Ariane à la place de l’URL dans le snippetÉlevée pour tout site
EventCarte d’événement avec date et lieuMoyenne pour les pages d’événements
RecipeCarte de recette avec photo, durée et caloriesMoyenne pour les sites de cuisine
Organization (non local)Knowledge Graph, logo dans les résultatsBase pour tous les sites

Organization : schéma de base et tous ses sous-types

Organization est le type de base pour toute entreprise, organisation ou marque. La hiérarchie des sous-types est large, et chacun ajoute des champs spécifiques. Le choix du bon sous-type compte : Google s’en sert pour déterminer le contexte de l’entreprise et ce qu’il affiche dans le Knowledge Panel.

TypeDestiné àChamps complémentaires clés
OrganizationToute entreprise, ONG ou marque sans adresse physiquename, url, logo, sameAs
LocalBusinessToute entreprise disposant d’une adresse physiqueaddress, telephone, openingHours, geo
StoreMagasin de détailcurrenciesAccepted, paymentAccepted
FoodEstablishmentCafé, restaurant (type de base)servesCuisine, menu, hasMap
RestaurantRestaurantservesCuisine, menu, acceptsReservations
CafeOrCoffeeShopSalon de caféservesCuisine
FastFoodRestaurantRestauration rapideservesCuisine
MedicalOrganizationÉtablissement de santé (type de base)medicalSpecialty
HospitalHôpitalavailableService, medicalSpecialty
MedicalClinicCliniquemedicalSpecialty, availableService
DentistCabinet dentaireavailableService
LegalServiceCabinet juridique—
LawyerAvocat—
AccountingServiceCabinet comptable ou d’audit—
FinancialServiceBanque, assureur, société d’investissement—
RealEstateAgentAgence immobilière—
AutomotiveBusinessConcession ou réparation automobile (type de base)—
AutoDealerConcession automobile—
AutoRepairGarage de réparation automobile—
HotelHôtelamenityFeature, checkinTime, checkoutTime
SportsActivityLocationÉquipement sportif (type de base)availableService
GymOrHealthClubSalle de sport, club de fitness—
GovernmentOrganizationOrganisme public—
EducationalOrganizationÉtablissement d’enseignement (type de base)—
CollegeOrUniversityUniversité, établissement d’enseignement supérieur—
SchoolÉcole—
CorporationGrande entreprisetickerSymbol, legalName

Organization de base

Le schéma Organization de base s’ajoute à la page d’accueil de tout site. Il aide Google à identifier la marque et à la relier à ses profils externes via sameAs. Le champ @id, avec un identifiant unique, permet aux autres schémas de référencer cette organisation sans dupliquer les données.

json
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://example.com/#organization",
  "name": "Company Name",
  "legalName": "Example LLC",
  "url": "https://example.com",
  "logo": {
    "@type": "ImageObject",
    "url": "https://example.com/logo.png",
    "width": 200,
    "height": 60
  },
  "description": "Brief company description for Knowledge Graph.",
  "foundingDate": "2015",
  "contactPoint": {
    "@type": "ContactPoint",
    "telephone": "+1-800-123-4567",
    "contactType": "customer service",
    "availableLanguage": "English"
  },
  "sameAs": [
    "https://www.linkedin.com/company/yourcompany",
    "https://twitter.com/yourcompany",
    "https://www.facebook.com/yourcompany"
  ]
}

LocalBusiness : entreprise dotée d’une adresse physique

LocalBusiness est le sous-type le plus important pour les entreprises disposant d’un lieu physique. Un schéma correctement renseigné améliore les chances d’apparaître dans le Google Map Pack (le bloc carte en haut de la SERP) et dans un Knowledge Panel avec les horaires d’ouverture. Champs clés : address, geo, openingHoursSpecification, telephone, priceRange.

json
{
  "@context": "https://schema.org",
  "@type": "Restaurant",
  "@id": "https://example.com/#business",
  "name": "The Birch Restaurant",
  "url": "https://example.com",
  "telephone": "+1-212-555-0100",
  "email": "info@example.com",
  "servesCuisine": ["American", "European"],
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main Street",
    "addressLocality": "New York",
    "addressRegion": "NY",
    "postalCode": "10001",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 40.7128,
    "longitude": -74.0060
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "12:00",
      "closes": "23:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Saturday", "Sunday"],
      "opens": "12:00",
      "closes": "00:00"
    }
  ],
  "image": "https://example.com/photos/restaurant.jpg",
  "hasMap": "https://maps.google.com/?cid=XXXXXX"
}
Dans openingHoursSpecification, les jours de la semaine s’écrivent en anglais avec une majuscule : Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday. Les heures utilisent le format 24 h HH:MM. Pour une ouverture permanente : opens « 00:00 » et closes « 23:59 ».

sameAs : relier les profils externes

Le champ sameAs indique à Google que votre organisation est la même entité que des profils présents sur d’autres plateformes. C’est le champ clé pour construire le Knowledge Graph, la base d’entités de Google. Plus les sources fiables confirment l’existence d’une organisation, plus elle a de chances d’apparaître dans un Knowledge Panel.

  • Wikidata (la plus fiable) : https://www.wikidata.org/wiki/Q...
  • Wikipédia : https://en.wikipedia.org/wiki/...
  • LinkedIn, Twitter/X, Facebook, Instagram
  • La chaîne YouTube de l’organisation
  • Fiche Google Business Profile (pour les entreprises locales)
  • Annuaires sectoriels : registres médicaux, ordres professionnels, etc.

Product : schéma produit et tous ses sous-types

Product est le schéma de base pour tout produit ou article. Il fonctionne avec Offer (prix et disponibilité) et AggregateRating (note). Correctement implémenté, il donne un résultat enrichi dans Google : prix, statut de disponibilité et notes en étoiles directement dans le snippet.

TypeCas d’usageRemarques
ProductSchéma de base pour tout produitname, image, description obligatoires
OfferOffre précise : prix et disponibilitéprice, priceCurrency, availability obligatoires
AggregateOfferFourchette de prix (plusieurs offres)lowPrice, highPrice, offerCount
ProductGroupGroupe de produits avec variantesvariesBy, hasVariant
IndividualProductVariante précise au sein d’un ProductGroupisVariantOf → ProductGroup
BrandMarque du produit (imbriquée dans Product)name obligatoire

Product de base avec Offer

Google exige un ensemble minimal de champs pour un résultat enrichi : name, image, description et une Offer imbriquée avec priceCurrency, price et availability. Si l’un de ces champs manque, le snippet produit ne sera pas enrichi.

json
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Air X Pro Running Shoes",
  "description": "Lightweight running shoes with foam sole for road running. Weight 230g, drop 10mm.",
  "sku": "AIRX-001-BLK",
  "mpn": "AIRX001",
  "gtin13": "0123456789012",
  "brand": {
    "@type": "Brand",
    "name": "RunMax"
  },
  "image": [
    "https://example.com/photos/airx-front.jpg",
    "https://example.com/photos/airx-side.jpg",
    "https://example.com/photos/airx-back.jpg"
  ],
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/products/air-x-pro",
    "priceCurrency": "USD",
    "price": "89.99",
    "priceValidUntil": "2026-12-31",
    "itemCondition": "https://schema.org/NewCondition",
    "availability": "https://schema.org/InStock",
    "seller": {
      "@type": "Organization",
      "name": "RunMax Store"
    }
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "128"
  }
}
La valeur de disponibilité doit utiliser le vocabulaire attendu par le type de schéma concerné. Suivez la documentation en vigueur de la fonctionnalité et validez la valeur complète dans son contexte : ne déduisez pas un résultat enrichi d’un seul champ.

AggregateOffer : fourchette de prix

Si un produit est proposé par plusieurs vendeurs ou existe en variantes à prix différents, utilisez AggregateOffer. Il affiche une fourchette de prix (lowPrice – highPrice) au lieu d’un prix unique.

json
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Galaxy S25 Smartphone",
  "brand": { "@type": "Brand", "name": "Samsung" },
  "image": "https://example.com/galaxy-s25.jpg",
  "offers": {
    "@type": "AggregateOffer",
    "priceCurrency": "USD",
    "lowPrice": "799",
    "highPrice": "1099",
    "offerCount": "3",
    "offers": [
      {
        "@type": "Offer",
        "name": "128 GB / Black",
        "price": "799",
        "priceCurrency": "USD",
        "availability": "https://schema.org/InStock"
      },
      {
        "@type": "Offer",
        "name": "256 GB / White",
        "price": "899",
        "priceCurrency": "USD",
        "availability": "https://schema.org/InStock"
      },
      {
        "@type": "Offer",
        "name": "512 GB / Violet",
        "price": "1099",
        "priceCurrency": "USD",
        "availability": "https://schema.org/PreOrder"
      }
    ]
  }
}

ProductGroup : produits avec variantes

ProductGroup regroupe des produits liés qui diffèrent par certains paramètres (taille, couleur, matière). Il sert sur les pages produit proposant des variantes. Chaque variante précise est un Product imbriqué, dont isVariantOf pointe vers le ProductGroup parent.

json
{
  "@context": "https://schema.org",
  "@type": "ProductGroup",
  "name": "Air X Pro Running Shoes",
  "description": "Road running shoes available in multiple colours and sizes.",
  "url": "https://example.com/products/air-x-pro",
  "brand": { "@type": "Brand", "name": "RunMax" },
  "productGroupID": "AIRX-PRO",
  "variesBy": ["https://schema.org/color", "https://schema.org/size"],
  "hasVariant": [
    {
      "@type": "Product",
      "name": "Air X Pro — Black, US 9",
      "sku": "AIRX-BLK-9",
      "color": "Black",
      "size": "US 9",
      "offers": {
        "@type": "Offer",
        "price": "89.99",
        "priceCurrency": "USD",
        "availability": "https://schema.org/InStock"
      }
    },
    {
      "@type": "Product",
      "name": "Air X Pro — Blue, US 11",
      "sku": "AIRX-BLU-11",
      "color": "Blue",
      "size": "US 11",
      "offers": {
        "@type": "Offer",
        "price": "89.99",
        "priceCurrency": "USD",
        "availability": "https://schema.org/OutOfStock"
      }
    }
  ]
}
Pour un résultat enrichi Product, Google exige : name, image et une Offer imbriquée. Sans Offer (prix et disponibilité), le snippet enrichi ne s’affichera pas. Par ailleurs, brand, sku ou gtin13 améliorent les chances d’apparaître dans Google Shopping.

AggregateRating et Review : notes et avis

Les notes en étoiles dans les résultats de recherche sont l’élément le plus visible du snippet. Elles s’implémentent via deux types liés : AggregateRating (le score global issu de toutes les notes) et Review (un avis textuel individuel). Les deux types s’imbriquent toujours dans un schéma parent : Product, LocalBusiness, Recipe, Course, Book, etc.

AggregateRating : score global

AggregateRating reflète le score agrégé : valeur moyenne et nombre de votes. Google l’affiche sous forme d’étoiles dans le snippet. Champs obligatoires : ratingValue (moyenne) et reviewCount ou ratingCount.

json
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Air X Pro Running Shoes",
  "image": "https://example.com/airx.jpg",
  "offers": {
    "@type": "Offer",
    "price": "89.99",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "bestRating": "5",
    "worstRating": "1",
    "reviewCount": "128",
    "ratingCount": "215"
  }
}
ratingCount : nombre total de notes, y compris celles sans texte. reviewCount : nombre d’avis textuels. Si vous ne disposez que de notes en étoiles sans texte, utilisez ratingCount. Si vous ne disposez que d’avis textuels, utilisez reviewCount. Les deux champs peuvent être renseignés en même temps.

Review : avis individuels

Review est le schéma d’un avis textuel individuel. Il s’imbrique dans l’objet parent via la propriété review. Chaque Review contient un auteur, une note et le texte de l’avis. Google peut afficher un extrait du texte de l’avis dans le résultat enrichi.

json
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Air X Pro Running Shoes",
  "image": "https://example.com/airx.jpg",
  "offers": {
    "@type": "Offer",
    "price": "89.99",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "128"
  },
  "review": [
    {
      "@type": "Review",
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": "5",
        "bestRating": "5"
      },
      "name": "Great shoes for daily runs",
      "reviewBody": "Been running in them for 3 months — sole holds up well, feet don't tire. Recommend for road running.",
      "datePublished": "2026-03-15",
      "author": {
        "@type": "Person",
        "name": "Alex K."
      }
    },
    {
      "@type": "Review",
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": "4",
        "bestRating": "5"
      },
      "reviewBody": "Good cushioning, but runs a little small. Order half a size up.",
      "datePublished": "2026-04-01",
      "author": {
        "@type": "Person",
        "name": "Maria S."
      }
    }
  ]
}
Exigence critique de Google : les avis présents dans le balisage doivent être de vrais avis d’utilisateurs réels, publiés sur votre site. Sont interdits : ne montrer que les avis à 5 étoiles, masquer les avis négatifs, publier des avis rédigés par l’équipe éditoriale. Ces manquements entraînent une action manuelle et la perte des résultats enrichis.

ImageObject : les photos dans les données structurées

Les images dans Schema.org peuvent être indiquées de deux façons : sous forme de chaîne d’URL ("image": "https://example.com/photo.jpg") ou sous forme d’ImageObject avec métadonnées. Une simple chaîne suffit pour la plupart des schémas, mais pour Article, Recipe et HowTo, Google recommande ImageObject : il permet de préciser les dimensions, la légende et le format.

Type de schémaExigences pour les imagesLargeur min.
ProductAu moins une image du produit ; fond blanc préféré800 px recommandés
Article / NewsArticleAu moins 3 images : 16:9, 4:3, 1:11 200 px
RecipePhoto obligatoire du plat finiAu choix ; 1 200×628 optimal
LocalBusinessPhotos de l’entrée, de l’intérieur et de la façadeAu choix
Organization (logo)Logo rectangulaire, fond blanc ou transparent112×112 min, ratio jusqu’à 1×10
Exemple de balisage d’image Schema.org en JSON-LD :
json
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Air X Pro Running Shoes",
  "image": [
    {
      "@type": "ImageObject",
      "url": "https://example.com/airx-front.jpg",
      "width": 1200,
      "height": 1200,
      "caption": "Air X Pro — front view"
    },
    {
      "@type": "ImageObject",
      "url": "https://example.com/airx-side.jpg",
      "width": 1200,
      "height": 1200,
      "caption": "Air X Pro — side view"
    }
  ],
  "offers": {
    "@type": "Offer",
    "price": "89.99",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  }
}
Pour Article, Google exige au moins une image de 1 200 px de large, au format 16:9, 4:3 ou 1:1. Fournissez les trois variantes : Google sélectionne la plus adaptée à chaque emplacement. Les images doivent être crawlables (non bloquées dans robots.txt) et disposer d’une URL stable.

Combiner plusieurs schémas sur une même page

Plusieurs schémas sur une même page s’ajoutent sous forme de blocs <script> distincts. Voici le balisage complet d’une page produit : l’organisation qui vend, le fil d’Ariane, puis le produit avec son prix, sa note et son avis.

html
<!-- Schema 1: Selling organisation (on all site pages) -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://example.com/#organization",
  "name": "RunMax Store",
  "url": "https://example.com",
  "logo": "https://example.com/logo.png"
}
</script>

<!-- Schema 2: Breadcrumbs -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://example.com" },
    { "@type": "ListItem", "position": 2, "name": "Footwear", "item": "https://example.com/shoes" },
    { "@type": "ListItem", "position": 3, "name": "Air X Pro" }
  ]
}
</script>

<!-- Schema 3: Product with price, rating and review (on product page) -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Air X Pro Running Shoes",
  "description": "Road running shoes.",
  "sku": "AIRX-001",
  "brand": { "@type": "Brand", "name": "RunMax" },
  "image": "https://example.com/airx.jpg",
  "offers": {
    "@type": "Offer",
    "price": "89.99",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "priceValidUntil": "2026-12-31",
    "seller": { "@id": "https://example.com/#organization" }
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "128",
    "bestRating": "5"
  },
  "review": {
    "@type": "Review",
    "reviewRating": { "@type": "Rating", "ratingValue": "5" },
    "author": { "@type": "Person", "name": "Alex K." },
    "reviewBody": "Excellent shoes, run in them every day.",
    "datePublished": "2026-04-10"
  }
}
</script>
Dans seller, la valeur { "@id": "https://example.com/#organization" } renvoie à l’organisation définie plus haut par son @id. On parle de liaison de graphe : Google relie les entités dans un graphe de connaissances unifié, sans dupliquer les données.

Valider les données structurées

Après l’implémentation, validez toujours le balisage. Google met à disposition deux outils officiels, et la Search Console donne la vision réelle de ce que voit le crawler sur les pages indexées.

Étape 1Rich Results Test

Ouvrez search.google.com/test/rich-results, puis saisissez une URL ou du HTML. L’outil indique les résultats enrichis disponibles pour le schéma, les champs obligatoires et les champs mal renseignés. C’est le seul moyen de confirmer que le balisage produira réellement des améliorations visuelles dans la SERP.

Étape 2Schema Markup Validator

Ouvrez validator.schema.org pour une validation complète selon la norme Schema.org, et pas seulement pour les types pris en charge par Google. Il vérifie les propriétés obligatoires de chaque type et signale les combinaisons incompatibles : utile pour les schémas imbriqués complexes.

Étape 3Google Search Console

Search Console → Améliorations, puis sélectionnez le type de schéma. Cette section affiche les erreurs réelles sur les pages indexées. Ce sont elles qui bloquent aujourd’hui les résultats enrichis, sur les URL en ligne : c’est le signal le plus directement exploitable.

Contrôle rapide : vérifiez que le JSON-LD figure dans la réponse HTML du serveur, et pas seulement ajouté par JavaScript. Ouvrez les DevTools → Network → sélectionnez la première requête → Preview → recherchez script type="application/ld+json". Si le bloc est absent, Googlebot risque de ne pas voir le balisage.

Liste de contrôle des données structurées

Implémentation de base du JSON-LD

  • Balise <script type="application/ld+json"> ajoutée dans <head> ou à la fin de <body>
  • Chaque bloc contient @context (valeur « https://schema.org ») et @type
  • Chaque entité principale possède un @id unique au format URL avec fragment (#nom)
  • Le JSON est valide : pas de virgule finale, toutes les chaînes correctement fermées
  • Le balisage est présent dans la réponse HTML du serveur (pas seulement via JavaScript)

Organization / LocalBusiness

  • Sous-type adapté choisi (Restaurant, Dentist, AutoDealer, etc.) plutôt qu’un simple Organization
  • Renseignés : name, url, telephone, address (pour LocalBusiness)
  • geo ajouté avec des coordonnées précises (latitude, longitude)
  • openingHoursSpecification renseigné avec les noms de jours en anglais et les heures au format HH:MM
  • sameAs renseigné avec au moins les profils sociaux et Wikidata (si disponible)

Product

  • Renseignés : name, description, image (au moins une image)
  • Offer imbriquée avec : price, priceCurrency, availability, priceValidUntil
  • availability au format d’URL complète : https://schema.org/InStock
  • sku et/ou gtin13 renseignés pour Google Shopping
  • AggregateRating imbriqué si la page affiche des notes d’utilisateurs

Notes et avis

  • AggregateRating contient ratingValue, reviewCount, bestRating, worstRating
  • Les valeurs d’AggregateRating correspondent aux données réelles du site
  • Review est imbriquée dans l’objet parent (Product / LocalBusiness), et non isolée
  • Chaque Review comporte author (Person), reviewRating, datePublished et reviewBody
  • Les avis présents dans le balisage proviennent de vrais utilisateurs

FAQ

Le balisage Schema.org influence-t-il directement le classement dans Google ?
Les données structurées aident Google à comprendre les fonctionnalités éligibles d’une page, mais Google ne garantit pas de résultat enrichi et ne présente pas le balisage comme un raccourci direct vers le positionnement. Servez-vous-en pour représenter fidèlement les faits visibles.
Peut-on ajouter des données structurées via Google Tag Manager ?
Techniquement oui : GTM peut injecter une balise <script> contenant du JSON-LD. Mais Google privilégie un balisage présent dans la réponse HTML du serveur, et non ajouté par JavaScript. Un balisage injecté par GTM peut ne pas être correctement reconnu lors du crawl si Googlebot n’exécute pas le JavaScript de la page. La méthode optimale consiste à générer le JSON-LD côté serveur.
Combien d’avis faut-il inclure dans le balisage Review ?
Google n’impose aucun nombre fixe. En pratique : si vous avez moins de 10 avis, incluez-les tous ; s’il y en a des centaines, 3 à 5 avis récents suffisent. La qualité compte davantage : chaque Review doit comporter un texte, un auteur et une date. Trop peu d’avis peut empêcher Google d’afficher les étoiles dans le snippet.
Pourquoi les résultats enrichis n’apparaissent-ils pas alors que le balisage passe la validation ?
Plusieurs raisons possibles : (1) Google n’a pas encore recrawlé la page : patientez 1 à 4 semaines ou demandez une réindexation ; (2) reviewCount est trop faible ; (3) la page enfreint les règles de Google (par exemple, des avis qui semblent manipulés) ; (4) les résultats enrichis de ce type de schéma sont en concurrence avec d’autres fonctionnalités de la SERP. Vérifiez dans Search Console → Améliorations.
Comment indiquer le prix pour une boutique internationale ?
Utilisez une Offer distincte par devise, ou plusieurs Offer dans une AggregateOffer. Le champ priceCurrency utilise les codes ISO 4217 : USD, EUR, GBP, JPY. Google affiche le prix du pays et de la langue auxquels la page est destinée. Vérifiez que hreflang est correctement configuré, afin que chaque version linguistique voie un balisage dans sa propre devise.

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it