Réponse courte
Il faut un bloc Product en JSON-LD (ProductGroup si l'article existe en plusieurs tailles ou couleurs) avec au minimum le nom, l'image, le prix et la devise, complété par le GTIN, la disponibilité, l'état, la note, la livraison et les retours.
La réponse en détail
Il faut un bloc Product en JSON-LD (ProductGroup si l'article existe en plusieurs tailles ou couleurs) avec au minimum le nom, l'image, le prix et la devise, complété par le GTIN, la disponibilité, l'état, la note, la livraison et les retours. Sur Shopify, le thème fournit déjà le socle : à vous d'ajouter le reste et de faire concorder la page, le balisage et le flux Merchant Center.
Le repère
Google recommande le format JSON-LD, un bloc de code invisible à l'écran (Google Search Central), et liste les propriétés attendues sur une page où l'on peut acheter (Google Search Central). La dernière colonne donne la sortie du filtre Liquid structured_data de Shopify, relevée le 20 octobre 2026 sur les démos des thèmes Dawn et Horizon.
| Propriété | Statut Google | Sortie native Shopify |
|---|---|---|
name, image |
Requis | Oui |
offers.price (supérieur à zéro), offers.priceCurrency |
Requis | Oui, une offre par variante |
offers.availability |
Recommandé, une seule valeur | Oui, selon le stock de la variante |
gtin |
Recommandé | Oui, si le code-barres de la variante est rempli |
brand.name |
Recommandé, une seule marque | Oui (champ Fournisseur) |
variesBy (groupe de variantes) |
Recommandé | Non |
itemCondition |
Recommandé | Non |
aggregateRating, review |
Recommandé, note visible sur la page | Non, vient de l'application d'avis |
shippingDetails, hasMerchantReturnPolicy |
Recommandé | Non |
priceValidUntil |
Recommandé ; une date passée peut empêcher l'affichage | Non |
Les deux thèmes appellent ce filtre dans leur section produit (Dawn, Horizon). Il renvoie un ProductGroup dès qu'il y a des variantes (shopify.dev), mais sans variesBy, qui dit si elles diffèrent par la taille ou la couleur (Google Search Central). Un thème payant peut produire autre chose, d'où l'inventaire de l'étape 1.
La règle
Chaque information existe à trois endroits (l'écran, le balisage et le flux Merchant Center) et doit y être identique. Google conseille de fournir balisage et flux ensemble, l'un servant à vérifier l'autre (Google Search Central).
Mieux vaut compléter le socle du thème que l'écraser avec une application qui réécrit tout : chaque source de balisage en plus est une contradiction possible. Et ne balisez que ce qui se voit. Une note doit être lisible sur la page qui la déclare (Google Search Central), un délai de livraison aussi.
Les étapes
- Faire l'inventaire. Comptez les blocs
application/ld+jsond'une fiche et cochez dans le tableau ce qui manque (voir aussi la chasse aux doublons). Une marque de prêt-à-porter suivie par les auteur·rice·s avait ainsi deux entités par article : le ProductGroup du thème, sans avis, et un Product ajouté par l'application d'avis pour la note, signalé en double par la Search Console. - Remplir ce que le thème lit. Le GTIN (le numéro du code-barres) sort tout seul si le champ Code-barres de chaque variante est rempli, ce qui manque souvent (voir le code EAN et le GTIN). Une URL en
?variant=doit aussi afficher la bonne variante, avec son prix et son stock (Google Search Central). - Compléter le bloc produit. Ajoutez
variesByetitemCondition, puis rattachez la note au ProductGroup existant, conforme à ce que vous affichez comme avis. Gardez ce balisage dans le HTML initial : selon Google, un balisage injecté en JavaScript rend l'exploration Shopping moins fréquente et moins fiable (Google Search Central). - Déclarer livraison et retours une fois. Google recommande une politique générale sous
Organization, sur une seule page, le niveau produit servant aux exceptions (retours, livraison). Le modèle placé après la liste suit sa documentation (valeurs fictives). Des réglages déjà saisis dans Merchant Center l'emportent sur ce balisage. - Contrôler la concordance. Chaque mois, sur cinq produits, trois questions : le prix affiché est-il celui de
offers.price? un produit épuisé est-il déclaré disponible ? le nombre d'avis balisé est-il celui que l'on voit ? Merchant Center (mises à jour automatiques actives par défaut) corrige prix et stock d'après la page, ou refuse le produit s'il ne peut les établir (aide Merchant Center). - Valider. Testez une fiche en promotion et une en rupture dans le test des résultats enrichis, puis surveillez la Search Console.
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Votre marque",
"url": "https://www.votre-boutique.fr",
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": ["FR", "BE"],
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
},
"hasShippingService": {
"@type": "ShippingService",
"shippingConditions": [
{
"@type": "ShippingConditions",
"shippingDestination": { "@type": "DefinedRegion", "addressCountry": "FR" },
"orderValue": { "@type": "MonetaryAmount", "minValue": 0, "maxValue": 49.99, "currency": "EUR" },
"shippingRate": { "@type": "MonetaryAmount", "value": 5.90, "currency": "EUR" },
"transitTime": { "@type": "ServicePeriod", "duration": { "@type": "QuantitativeValue", "minValue": 2, "maxValue": 3, "unitCode": "DAY" } }
},
{
"@type": "ShippingConditions",
"shippingDestination": { "@type": "DefinedRegion", "addressCountry": "FR" },
"orderValue": { "@type": "MonetaryAmount", "minValue": 50, "currency": "EUR" },
"shippingRate": { "@type": "MonetaryAmount", "value": 0, "currency": "EUR" },
"transitTime": { "@type": "ServicePeriod", "duration": { "@type": "QuantitativeValue", "minValue": 2, "maxValue": 3, "unitCode": "DAY" } }
}
]
}
}
Le détail des propriétés de retour est sur schema.org ; le contenu de la politique se décide en amont.
Le piège
Chez cette même marque, le blocage venait du texte de la page plus que du code. Bandeau, FAQ et accordéon des fiches annonçaient la livraison offerte dès 39 € en France et en Belgique, alors que la page Livraisons et retours facturait 4,95 € aux client·e·s belges jusqu'à 59 €. Côté délai, presque tous les gabarits produit affichaient « recevez-la dans les 48 heures » (écrit en dur), la FAQ parlait de 2 à 3 jours ouvrés et la fiche calculait en JavaScript une date « au plus tard le ». Avec trois délais pour un même colis, personne ne pouvait dire lequel baliser.
Le JSON-LD ne fait que recopier une information décidée ailleurs. Confiez chaque délai et chaque durée de retour à un·e responsable, souvent au service client ou au juridique, et faites-en découler l'écran, le balisage et Merchant Center. Ce même délai pèse aussi sur la conversion.
La phrase à présenter
En interne, présentez ce travail comme un contrôle de cohérence. Une formulation possible (chiffres fictifs) :
« Sur nos 5 meilleures ventes, 3 annoncent dans leur balisage une politique de retour différente de nos CGV et 2 n'ont pas de code-barres saisi : une demi-journée de travail aligne la page, le balisage et Merchant Center, puis un contrôle mensuel de cinq produits suffit. »
Sources
- Google Search Central, introduction aux données structurées
- Google Search Central, fiches de marchand
- Thème Dawn, section produit
- Thème Horizon, section produit
- shopify.dev, filtre structured_data
- Google Search Central, variantes de produit
- Google Search Central, données structurées produit
- Google Search Central, extraits d'avis
- Google Search Central, politique de retour
- Google Search Central, politique de livraison
- Aide Merchant Center, mises à jour automatiques des articles
- schema.org, MerchantReturnPolicy
