Schema.org Product en JSON-LD : le guide e-commerce 2026
Le JSON-LD Product débloque les rich results Google (étoiles, prix, disponibilité). Voici l'implémentation complète en 2026, erreurs à éviter incluses.

Schema.org Product en JSON-LD : le guide e-commerce 2026
Vous avez déjà vu ces résultats Google où une fiche produit affiche directement les étoiles, le prix et "En stock" sous le titre ? C'est un rich result, et c'est ce qu'un schema.org Product bien implémenté déclenche. Les sites qui en bénéficient voient leur CTR augmenter de 15 à 40 % sur la position équivalente sans rich result.
En 2026, l'implémentation via JSON-LD est la méthode officielle et recommandée par Google. Voici la version complète, testable et production-ready.
Pourquoi JSON-LD et pas Microdata ou RDFa
Trois formats permettent d'ajouter du schema.org à une page web : Microdata (directement dans le HTML), RDFa (attributs HTML5), et JSON-LD (bloc de données structurées séparé).
Google recommande JSON-LD depuis 2015, et en 2026 c'est devenu le standard de fait. Raisons :
- Séparation données/présentation : le JSON-LD vit dans un
<script type="application/ld+json">dans le<head>, indépendamment du HTML visible - Plus simple à générer : un seul bloc JSON par page, facile à maintenir
- Pas de conflit avec votre thème : pas besoin d'aller modifier la structure HTML des templates
- Meilleure compatibilité avec les frameworks modernes (Next.js, Nuxt, etc.)
Microdata reste lisible par Google mais n'est plus recommandé pour les nouvelles implémentations.
Les 7 champs obligatoires (ou recommandés) pour un Product
Voici un JSON-LD Product minimal qui passe les tests Google et débloque les rich results :
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Chaussure Derby cuir homme",
"description": "Chaussure Derby en cuir italien, finie à la main, disponible du 38 au 46.",
"image": [
"https://example.com/products/derby-01.jpg",
"https://example.com/products/derby-02.jpg",
"https://example.com/products/derby-03.jpg"
],
"sku": "DERBY-BLK-44",
"brand": {
"@type": "Brand",
"name": "Atelier Maison"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/products/derby-cuir-homme",
"priceCurrency": "EUR",
"price": "149.00",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "38"
}
}
Décomposition :
@contextet@type— déclarent qu'on parle d'un Product schema.orgname— le nom du produit (≤100 car. recommandé)description— description courte (150-300 car.)image— tableau d'URLs d'images (minimum 1, idéalement 3-6 en haute résolution)sku— identifiant unique du produit (obligatoire pour rich results)brand— marque du produitoffers— structure de prix et disponibilité (critique)aggregateRating— note moyenne si vous avez des reviews (déclenche les étoiles dans les SERP)
Offer et AggregateRating : les détails critiques
Offer
La partie la plus sensible. Quatre règles à respecter :
priceCurrency en ISO 4217 : "EUR", "USD", "GBP"… pas "€", "$" ou "£". Erreur fréquente qui fait échouer le rich result.
price en string, pas en nombre : "149.00" pas 149.00. Google tolère les deux en 2026 mais les guidelines recommandent string.
availability en URL schema.org complète :
https://schema.org/InStock→ en stockhttps://schema.org/OutOfStock→ rupturehttps://schema.org/PreOrder→ précommandehttps://schema.org/BackOrder→ commande spéciale avec délai
priceValidUntil (optionnel mais recommandé) : date de fin de validité du prix au format ISO 8601 ("2026-12-31"). Google l'apprécie pour détecter les prix obsolètes.
AggregateRating
Déclenche les étoiles dans les SERP. Déclencheurs :
ratingValueentre 1 et 5reviewCount: minimum 1, mais Google recommande 3+ pour afficher- Les reviews correspondantes doivent être visibles sur la page — fausser l'AggregateRating avec des reviews inexistantes = pénalité manuelle possible
Astuce : si vous avez peu de reviews, affichez-les sur votre page via un widget (Yotpo, Judge.me, Trustpilot) et récupérez le count + rating moyen depuis leur API pour le JSON-LD.
Tester avec Rich Results Test
Avant de pousser en prod, testez chaque template de page produit avec Rich Results Test de Google.
Il vérifie :
- Syntaxe JSON valide
- Tous les champs obligatoires présents
- Valeurs dans les formats attendus (URLs, dates, devises)
- Éligibilité aux rich results
Erreurs courantes remontées :
"availability" expected schema.org URL→ vous avez mis "In stock" au lieu de l'URL schema.org"priceCurrency" invalid→ devise non ISO 4217Missing field "sku"→ pas de SKU dans l'OfferMultiple products in single offer→ vous avez essayé de mettre plusieurs produits dans un seul bloc JSON-LD
Une fois le test passé, Google Search Console remonte les performances et erreurs sur 2-4 semaines via Enhancements → Products.
Implémentation par plateforme
Shopify
Depuis 2023, Shopify génère automatiquement un schema Product sur les pages produit si vous utilisez un thème officiel. Problème : le schema par défaut est souvent incomplet (pas d'AggregateRating, pas de brand).
Pour un schema complet :
- Éditez votre thème : Online Store → Themes → Edit code
- Ouvrez
snippets/product-structured-data.liquidousections/main-product.liquid - Ajoutez les champs manquants ou remplacez par un template custom
Alternative : installez une app comme SEO JSON-LD Schema ou Smart SEO qui gère le schema sur tout le catalogue en mode autonome.
WooCommerce
WooCommerce génère aussi un schema par défaut depuis v5+, mais incomplet. Plugins recommandés pour compléter :
- RankMath (free) : gère schema Product avec Offer et AggregateRating
- Yoast WooCommerce SEO (paid) : enrichit le schema par défaut de Yoast
- WP SEO Structured Data Schema : plus de granularité si vous voulez customiser par template
Next.js / headless
Si vous êtes sur un frontend custom, vous injectez le JSON-LD dans le <head> via un composant SSR :
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify(productSchema)
}}
/>
Attention : générer le JSON-LD côté client (via useEffect) ne fonctionne pas pour le SEO — Google scrape en server-render. Assurez-vous que le JSON-LD est bien dans le HTML initial retourné par le serveur.
Erreurs typiques à éviter
Contradictions entre page visible et JSON-LD. Si la page affiche "En stock" mais le JSON-LD dit OutOfStock, Google ignore le JSON-LD. Synchronisez les deux à la même source de données.
Prix différent en JSON-LD et sur la page. Même logique : Google détecte la divergence et ignore le rich result.
Plusieurs Product dans un même <script>. Un seul @type: Product par script. Si vous avez des variantes, utilisez @type: ProductGroup avec hasVariant: [...] pour les lier.
Images non accessibles. Les URLs d'images doivent être publiques (pas derrière un login). Testez chaque URL avec curl pour vérifier qu'elle retourne un 200.
AggregateRating inventé. Mettre 4.9 étoiles sur une fiche sans reviews visibles = pénalité manuelle possible, risque non négligeable.
Et les variantes ?
Si votre produit a plusieurs tailles ou couleurs, 2 approches :
Approche 1 : un seul schema Product (le parent)
Plus simple, convient à 90 % des cas. Le schema parent décrit le produit générique, et la page gère les variantes via le sélecteur. Le prix affiché est celui par défaut, l'availability est InStock si au moins une variante est disponible.
Approche 2 : ProductGroup avec hasVariant
Plus précis mais plus complexe. Recommandé si vos variantes ont des prix très différents ou des disponibilités divergentes (rupture sur la taille 44 mais pas sur la 42). Google supporte ProductGroup depuis 2022.
FAQ
Combien de temps pour voir les rich results apparaître dans Google ?
Entre 1 et 4 semaines après publication du schema correct. Google doit re-crawler la page et déclencher l'éligibilité côté algorithme. Vous pouvez accélérer en soumettant l'URL via Search Console → URL Inspection → Request Indexing.
Le schema.org Product fait-il ranker la fiche ?
Pas directement. Le schema n'est pas un signal de ranking. Il débloque les rich results (étoiles, prix, dispo dans les SERP) qui augmentent le CTR, ce qui peut améliorer le ranking indirectement via le signal d'engagement.
Faut-il inclure les reviews complètes dans le JSON-LD, pas juste l'agrégat ?
Optionnel. Ajouter des Review individuelles dans le JSON-LD peut débloquer plus de rich features, mais alourdit le code. Sur des catalogues de 5 000+ fiches, l'AggregateRating seul est largement suffisant.
Le schema est-il pénalisé si ma fiche est générée par IA ?
Non. Google ne pénalise pas l'origine du contenu, il pénalise la qualité. Un JSON-LD correct sur une fiche IA de qualité bénéficie des rich results comme n'importe quelle autre fiche.
Mon JSON-LD doit-il être dans <head> ou <body> ?
Les deux fonctionnent, mais <head> est la bonne pratique. Place le JSON-LD juste avant la balise de fermeture </head> pour être sûr qu'il est lu tôt par les crawlers.
Les rich results apparaissent-ils aussi sur Bing et DuckDuckGo ?
Bing oui, avec un délai plus long (parfois 2-3 mois). DuckDuckGo utilise Bing en backend, donc oui indirectement. Les deux utilisent le même standard schema.org, pas besoin d'adapter.
Sur Ecomptimize, le JSON-LD Product est généré automatiquement à partir des données de votre catalogue Shopify ou WooCommerce. Voir la page Shopify ou WooCommerce.
Tu as aimé cet article ?