Accueil Blog SEO
SEO

Schema Markup pour Shopify

Schema généré par Shopify Dawn, trous à combler et JSON-LD manuel pour obtenir des rich results Google sur vos fiches produit.

Lionel Fenestraz · 22 mai 2026 · 21 min de lecture · Mis à jour : mai 2026
Exemple de rich results Google pour une page produit Shopify avec note, prix et disponibilité
Dans cet article

La plupart des boutiques Shopify que j’audite en SEO ont le même trou en commun : elles croient ne rien faire avec le schema markup, et en réalité Shopify leur en injecte déjà la moitié. Le vrai sujet n’est pas « Shopify n’amène pas de schema ». Le sujet, c’est qu’il amène juste ce qu’il faut pour le listing de base, laisse de côté tout ce qui pourrait vous faire bouger en rich results, et quand vous ajoutez des apps par-dessus, vous finissez avec du JSON-LD dupliqué qui casse le rendu dans Google.

Selon la documentation officielle de Google Search Central, le balisage Product correctement implémenté est la condition nécessaire pour apparaître en rich results produit avec étoiles, prix et disponibilité. Google n’invente pas ce bloc visuel : il le lit du JSON-LD de votre page. Si votre thème ne l’émet pas, ou l’émet mal, vous perdez cet espace visuel au profit du concurrent qui le fait. Ce guide est l’inventaire technique que votre theme developer devrait vous remettre et qu’il livre rarement. Si vous arrivez ici après avoir lu le guide pilier SEO pour Shopify, voici la plongée technique qui manquait.

Points clés

  • Shopify Dawn génère automatiquement Product, Offer et Organization dans product.json.liquid, mais n’émet pas FAQPage, HowTo, Article ni BreadcrumbList de façon fiable (Shopify.dev, 2025)
  • Les pages produit avec Product + AggregateRating valides sont éligibles aux rich results avec étoiles, mais uniquement si les avis proviennent de clients vérifiés (Google Search Central, 2025)
  • Le Rich Results Test de Google valide l’éligibilité aux fonctionnalités visuelles ; le Schema Markup Validator valide la syntaxe pure
  • Dupliquer le schema (app + thème + autre app) est l’erreur la plus fréquente que je vois : Google peut tout ignorer s’il détecte un conflit
  • Une app d’avis bien intégrée revient souvent moins cher que payer un developer pour un snippet custom, si votre volume de produits est élevé

Sommaire

  1. Qu’est-ce que le schema markup et pourquoi Google le récompense avec des rich results ?
  2. Quel schema Shopify génère-t-il automatiquement dans Dawn ?
  3. Quel schema Shopify NE génère PAS et que vous devriez ajouter ?
  4. Comment ajouter du JSON-LD aux pages custom via des theme snippets ?
  5. Quand FAQPage a-t-il du sens sur une page produit ?
  6. Product + AggregateRating : quand pouvez-vous l’utiliser sans risque ?
  7. Comment valider votre schema avant de publier ?
  8. Apps de schema ou code maison ? Ce qui change sur la facture
  9. Questions fréquentes
  10. Le schema ne compte que si la page le justifie

Qu’est-ce que le schema markup et pourquoi Google le récompense avec des rich results ?

Le schema markup est un vocabulaire structuré défini sur Schema.org, un projet collaboratif fondé par Google, Microsoft, Yahoo et Yandex. La forme recommandée pour l’implémenter est JSON-LD, confirmée comme format préféré par Google Search Central. Sans ce balisage, Google lit votre page comme du texte brut ; avec, il comprend qu’il y a un produit, un prix et un stock.

La récompense visible, ce sont les rich results : étoiles de notation, fourchette de prix, disponibilité, FAQ dépliables, fil d’Ariane dans le snippet. Google ne les accorde pas par décret. Il les accorde s’il détecte un balisage valide, un contenu qui correspond à ce qui est marqué et une réputation minimale de l’URL. Ce dernier point, on l’oublie souvent. Vous pouvez avoir un JSON-LD parfait et ne toujours pas obtenir de rich results parce que Google trouve votre page faible.

La confusion la plus fréquente que je rencontre : croire que le schema markup vous fait grimper dans le classement. Non. La documentation de Google est explicite : ce n’est pas un facteur de classement direct. Ce qu’il fait, c’est augmenter la probabilité que, lorsque vous rankez déjà, votre snippet occupe plus de pixels dans la SERP et reçoive un meilleur CTR. Cette différence peut effectivement déplacer du trafic. Mais si vous ne rankez pas, plus de schema ne vous fera pas remonter.

Capsule citable : Le schema markup est un vocabulaire structuré de Schema.org, implémenté au format JSON-LD selon Google Search Central. Ce n’est pas un facteur de classement direct, mais il active les rich results (étoiles, prix, disponibilité, FAQ) qui augmentent la présence visuelle du snippet dans la SERP. Source : Google Search Central, 2025.


Quel schema Shopify génère-t-il automatiquement dans Dawn ?

Dawn est le thème de référence gratuit de Shopify. Selon la documentation des templates produit de Shopify.dev, le fichier product.json.liquid monte par défaut un bloc Product en JSON-LD qui inclut nom, description, image, SKU, marque et au moins une Offer avec prix, devise et disponibilité. Ce bloc est émis par le layout lui-même, pas par une app.

Schema produit (Product + Offer)

Voici ce que Dawn injecte sur chaque page /products/* :

{
  "@context": "https://schema.org/",
  "@type": "Product",
  "name": "Camiseta básica algodón orgánico",
  "url": "https://tu-tienda.com/products/camiseta-basica",
  "image": "https://cdn.shopify.com/s/files/1/.../camiseta-basica.jpg",
  "description": "Camiseta de algodón orgánico certificado GOTS.",
  "brand": {
    "@type": "Brand",
    "name": "Tu Marca"
  },
  "sku": "CAM-BAS-001",
  "offers": {
    "@type": "Offer",
    "price": "29.90",
    "priceCurrency": "EUR",
    "availability": "https://schema.org/InStock",
    "url": "https://tu-tienda.com/products/camiseta-basica"
  }
}

Le code réel qui le génère dans Dawn se trouve dans le snippet snippets/product-media.liquid et dans sections/main-product.liquid. Les valeurs sont lues depuis l’objet product de Liquid, donc si vous changez le nom ou le prix dans l’admin, le JSON-LD se met à jour au build suivant.

Schema d’organisation (Organization)

Sur la home, Dawn émet un bloc Organization simple avec nom et logo, à condition d’avoir chargé un logo dans les theme settings. Il n’émet pas sameAs avec vos réseaux sociaux tant que vous ne l’ajoutez pas vous-même. Si votre fiche Google Business ou votre Knowledge Panel repose sur vos profils sociaux, ça compte.

Ce qui n’est pas du schema mais en a l’air

Shopify émet aussi des balises Open Graph et Twitter Cards. Elles sont utiles pour Facebook et X, mais ne comptent pas comme données structurées pour Google. Ne confondez pas les deux quand vous faites l’inventaire.

Dans les audits de boutiques qui traînent des thèmes personnalisés anciens (antérieurs au lancement de Dawn en 2021), il est fréquent de trouver du schema au format microdata au lieu de JSON-LD, ou des blocs Product auxquels il manque priceCurrency ou availability. Google tolère les microdata, mais le Rich Results Test se plaint plus volontiers avec ces thèmes. Si vous migrez vers un thème OS 2.0, c’est le moment de nettoyer.

Capsule citable : Shopify Dawn injecte par défaut du JSON-LD avec les types Product, Offer et Organization. Le bloc Product sur les pages produit inclut nom, image, SKU, marque, prix, devise et disponibilité, lus depuis l’objet Liquid product. Source : Shopify.dev, 2025.


Quel schema Shopify NE génère PAS et que vous devriez ajouter ?

Voilà le vrai vide. Dawn n’émet FAQPage dans aucun template par défaut, il n’émet pas HowTo (il ne l’a jamais fait), et BreadcrumbList est généré de façon inconsistante selon le template. Sur les pages de blog (article.json.liquid), il n’émet pas non plus Article avec tous les champs que Google demande pour apparaître dans Top Stories.

Inventaire des trous par type de page

PageGénéré par DawnManquantImpact si vous l’ajoutez
ProduitProduct, OfferAggregateRating, Review, FAQPageÉtoiles et FAQ en SERP
CollectionRien de fiableItemList, BreadcrumbListMeilleur contexte, peu de visuel
HomeOrganization minimalsameAs, WebSite avec SearchActionSitelinks Searchbox
Article de blogArticle partielauthor complet, datePublished ISO, image structuréeÉligibilité Top Stories
Page customRienCe dont cette page a besoinDépend du contenu

Pourquoi ces manques ?

Schema.org compte des centaines de types. Shopify ne peut pas présumer ce que vous voulez baliser : il ne sait pas si votre page produit a une vraie FAQ, si vos avis proviennent de clients vérifiés, si votre blog relève de l’autorité éditoriale. Charger du schema qui ne correspond pas au contenu est pire que ne rien charger : Google peut appliquer une action manuelle pour structured data spam, d’après la documentation officielle.

L’approche saine est donc : vous décidez quoi baliser, en vous appuyant sur du contenu réel. Si vous n’avez pas de vraie FAQ sur la page, ne mettez pas FAQPage. Si vous n’avez pas d’avis collectés par une app vérifiée, n’inventez pas un AggregateRating.

Un détail qui n’apparaît presque jamais dans les tutoriels : depuis 2023, Google a drastiquement restreint l’éligibilité des rich results FAQPage aux sites « d’autorité officielle ou gouvernementale » pour la plupart des requêtes, selon la mise à jour de politique Google. Baliser votre FAQ reste utile pour les AI Overviews et pour ChatGPT Search, mais espérer le panneau dépliable classique en SERP n’est plus réaliste pour la plupart des boutiques.


Comment ajouter du JSON-LD aux pages custom via des theme snippets ?

Le pattern sain est de créer un snippet Liquid, de le rendre uniquement là où ça s’applique et de passer les variables depuis le template. D’après la documentation Liquid de Shopify, render isole les variables et évite les conflits, à la différence de include (déprécié). Ça vous donne un schema maintenable qui n’injecte pas de code mort dans les pages non concernées.

Étape 1 : créer le snippet

Dans l’éditeur de code du thème, créez snippets/schema-faq.liquid :

{%- comment -%} snippets/schema-faq.liquid {%- endcomment -%}
{%- if faq_items and faq_items.size > 0 -%}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {%- for item in faq_items -%}
    {
      "@type": "Question",
      "name": {{ item.question | json }},
      "acceptedAnswer": {
        "@type": "Answer",
        "text": {{ item.answer | json }}
      }
    }{%- unless forloop.last -%},{%- endunless -%}
    {%- endfor -%}
  ]
}
</script>
{%- endif -%}

Le filtre | json de Liquid échappe automatiquement guillemets, sauts de ligne et caractères unicode. Si vous sautez ce filtre et collez le texte brut, le JSON va casser dès qu’une réponse contient une apostrophe.

Étape 2 : appeler le snippet depuis le template

Dans templates/page.faq.json ou dans un bloc de section :

{% assign faq_items = section.blocks | where: "type", "faq_item" %}
{% render 'schema-faq', faq_items: faq_items %}

Si votre page utilise des metafields, passez faq_items: product.metafields.custom.faq.value. Si elle utilise un bloc de thème, assignez le tableau depuis section.blocks.

Étape 3 : valider

Avant de publier le thème, collez l’URL de la page dans le Rich Results Test. S’il signale une erreur de syntaxe, c’est presque toujours : guillemet non échappé, virgule de fin en trop ou champ obligatoire vide.

L’erreur qui revient sans cesse en audit, c’est de coller le JSON-LD dans le bloc <head> de theme.liquid de manière globale. Résultat : toutes les pages du site annoncent la même FAQ, y compris le checkout, le panier et le 404. Google pénalise l’incohérence. Ne rendez le snippet que là où il a du sens.

Capsule citable : Pour ajouter du JSON-LD custom dans Shopify, le pattern recommandé est de créer un snippet Liquid avec le filtre | json pour échapper les valeurs, de le rendre avec {% render %} uniquement dans les templates concernés, et de valider via le Rich Results Test de Google. Source : Shopify.dev, 2025.


Quand FAQPage a-t-il du sens sur une page produit ?

Ça a du sens si la FAQ existe visiblement sur la page, répond à de vraies questions clients et ne fait pas doublon avec la description. Selon la politique de structured data de Google, tout contenu balisé comme FAQPage doit être visible pour l’utilisateur et ne peut être ni promotionnel ni contradictoire avec la page.

Quand oui, quand non

  • Oui : un bloc avec 4 à 6 vraies questions sur tailles, matières, livraison, retours
  • Oui : des questions qui lèvent des doutes avant l’achat et réduisent les tickets au support
  • Non : une FAQ invisible, ajoutée uniquement pour le schema
  • Non : des questions recopiées depuis la page livraison
  • Non : du contenu promotionnel déguisé en FAQ (« Pourquoi sommes-nous la meilleure marque ? »)

Même si le rich result classique est restreint depuis 2023, baliser la FAQ garde deux bénéfices mesurables : ça améliore la compréhension de la page par les systèmes d’IA qui résument les produits (AI Overviews, ChatGPT Search, Perplexity) et ça augmente la probabilité d’apparaître comme source citée dans ces réponses.

Code minimal fonctionnel

En réutilisant le snippet de la section précédente, le résultat sur une page produit donne :

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Quelle est la bonne taille ?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Le t-shirt a une coupe regular. Si vous hésitez entre deux tailles, prenez la plus grande pour un fit relâché."
      }
    },
    {
      "@type": "Question",
      "name": "En combien de temps arrive la commande ?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Livraison France métropolitaine en 24-48h ouvrées. International en 3-7 jours."
      }
    }
  ]
}

Product + AggregateRating : quand pouvez-vous l’utiliser sans risque ?

Uniquement quand les avis sont collectés par un système vérifiable et affichés sur la page visible. Google demande explicitement, dans les guidelines du review snippet, que les avis proviennent de vrais clients, soient accessibles sur l’URL balisée et ne soient pas auto-envoyés par le commerçant lui-même.

Quelles apps font le boulot en pratique

Les apps d’avis intégrées à Shopify (Judge.me, Loox, Yotpo, Okendo, Shopify Product Reviews) émettent toutes leur propre JSON-LD avec AggregateRating dès que vous installez leur bloc d’avis sur la page produit. Vous n’avez pas besoin de toucher au code. Ce qu’il faut vérifier, c’est qu’il n’y ait pas de doublon avec le schema natif de Dawn.

Le problème du double schema

Je vois ça en permanence : le thème émet Product avec le prix. L’app d’avis émet un autre bloc Product avec AggregateRating et répète nom, image, offre. Google détecte deux blocs Product sur la même URL et peut ignorer les deux. La solution standard, c’est de les fusionner en un seul bloc.

Code qui fusionne les deux dans le snippet du thème (requiert que l’app expose les données comme metafield ou variable Liquid) :

{
  "@context": "https://schema.org/",
  "@type": "Product",
  "name": "Camiseta básica algodón orgánico",
  "sku": "CAM-BAS-001",
  "brand": {"@type": "Brand", "name": "Tu Marca"},
  "offers": {
    "@type": "Offer",
    "price": "29.90",
    "priceCurrency": "EUR",
    "availability": "https://schema.org/InStock"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "128"
  }
}

Pour que ça marche sans doublons, désactivez l’émission de schema par l’app (la plupart ont un toggle dans les settings) et faites que le thème lise les données agrégées de l’app via metafield ou API.

Couverture schema markup dans Shopify Dawn par type de page Couverture schema Shopify Dawn : vert = natif, rouge = manquant Produit Product Offer AggregateRating FAQPage Collection ItemList BreadcrumbList Accueil Organization WebSite SearchAction Article de blog Article (partiel) Author complet Page custom Rien par défaut Vert : émis par Dawn | Ambre : partiel | Rouge : à ajouter vous-même
Carte de couverture du schema markup dans Shopify Dawn par type de template. Source : inventaire basé sur Shopify.dev et revue du code Dawn, 2025.

Comment valider votre schema avant de publier ?

Avec deux outils complémentaires : le Rich Results Test de Google et le Schema Markup Validator de Schema.org. Ils font des choses différentes. D’après la documentation de Google Search Central, le premier valide si votre page est éligible aux fonctionnalités visuelles en SERP ; le second valide la syntaxe Schema.org indépendamment du fait que Google l’utilise ou non.

Workflow de validation en deux étapes

D’abord, collez l’URL (ou le code si c’est encore en staging) dans Rich Results Test. Il vous dit à quel rich result vous êtes éligible et quelles erreurs bloquent cette éligibilité. Erreurs typiques : priceCurrency absent, image en format relatif au lieu d’absolu, availability avec une chaîne invalide.

Ensuite, si la page passe Rich Results mais que votre schema est plus large (types que Google n’utilise pas mais que d’autres agents oui, comme Product avec material, color étendu, weight), validez-le dans Schema Markup Validator. Il vous dit si votre JSON est syntaxiquement valide et si les types existent dans le vocabulaire.

Que faire après publication

Passez 2 à 3 jours, puis regardez dans Google Search Console la section « Améliorations » ou « Enhancements ». Les types détectés, le nombre d’URLs par statut et les erreurs spécifiques y apparaissent. Si une URL sort en « Valide avec avertissements », corrigez les avertissements : ils ne bloquent pas mais limitent les performances.

Un client du secteur cosmétique arrivait avec 400 produits et un AggregateRating sur tous. Après avoir passé le Rich Results Test URL par URL pendant l’audit, on a découvert que l’app d’avis émettait reviewCount: 0 sur les produits sans avis, et Google ignorait tout le schema à cause de ce champ vide. On a filtré l’émission pour qu’elle n’apparaisse que sur les produits avec au moins 3 avis. Le rich result est apparu dans les SERP en moins de deux semaines.


Apps de schema ou code maison ? Ce qui change sur la facture

Ça dépend du volume, de la complexité du catalogue et de la durée de vie du thème. Selon la marketplace officielle de Shopify, il existe des dizaines d’apps de schema markup, avec des prix mensuels qui vont de gratuit à 30-50 euros par mois. Un snippet custom écrit par un developer Shopify certifié coûte généralement entre 300 et 800 euros dans la plupart des agences européennes, selon les grilles tarifaires publiées.

Avantages des apps

  • Zéro code pour le marchand
  • Mise à jour automatique quand les règles Google changent
  • Intégration plug-and-play avec avis, FAQ, variantes
  • Support inclus

Avantages du code maison

  • Coût unique, pas récurrent
  • Contrôle total sur l’output
  • Pas de risque qu’une app injecte du JS qui ralentit la page
  • Pas de dépendance à ce que l’app soit encore active dans 3 ans

Quand choisir quelle option

  • Petit catalogue (moins de 50 produits) et thème que vous n’allez pas changer bientôt : code maison
  • Gros catalogue, avis actifs, peu de temps technique : app d’avis avec schema intégré
  • Site avec developer interne : le code maison gagne presque toujours
  • Boutique sans ressources techniques : app, même gratuite comme JSON-LD for SEO

Le mix hybride le plus sain que je vois fonctionner : app uniquement pour les avis (elles le font bien parce qu’elles gèrent aussi l’UI), et code maison dans snippets/schema-*.liquid pour FAQ, BreadcrumbList et Article. Comme ça, vous ne payez pas de récurrence sur ce qui n’en a pas besoin.

Capsule citable : Le coût comparé de l’implémentation de schema dans Shopify oscille entre des apps mensuelles de 0 à 50 euros et un développement custom de 300 à 800 euros payé une seule fois, selon les grilles tarifaires publiées. L’hybride recommandé : app pour les avis et snippets Liquid maison pour FAQ et BreadcrumbList. Source : Shopify App Store, 2025.


Questions fréquentes

Shopify génère-t-il du schema markup automatiquement dans tous les thèmes ?

Oui dans Dawn et dans la plupart des thèmes OS 2.0 du theme store officiel, mais pas dans tous les thèmes custom ni dans les anciens thèmes hérités. Le bloc garanti, c’est Product sur les pages produit et Organization sur la home si vous avez chargé un logo. Tout le reste dépend du thème. Vérifiez votre product.json.liquid ou passez une URL produit au Rich Results Test avant de présumer de la couverture.

Puis-je ajouter du schema sans toucher au code du thème ?

Oui, avec une app de schema markup du Shopify App Store. Des apps comme JSON-LD for SEO, Smart SEO ou Schema Plus ajoutent FAQ, BreadcrumbList, Article et AggregateRating sans éditer Liquid. Le risque, c’est la duplication avec le schema natif et avec les apps d’avis, qui peut annuler l’effet. Si vous utilisez une app, désactivez les types déjà émis par votre thème pour éviter les conflits.

Pourquoi mes étoiles n’apparaissent-elles pas dans Google alors que mon schema est valide ?

Avoir un schema valide est nécessaire, pas suffisant. Selon Google Search Central, Google n’accorde le rich result étoiles que s’il estime que l’URL a une réputation suffisante et que les avis proviennent d’un système vérifiable. Pour les boutiques nouvelles ou avec peu d’avis, plusieurs semaines ou mois peuvent passer avant que les étoiles n’apparaissent, même si le schema est parfait.

Le schema markup aide-t-il avec ChatGPT, Perplexity et AI Overviews ?

Oui, plus qu’il n’aidait avec le Google traditionnel. Les systèmes d’IA générative extraient les données structurées pour citer produits, prix et réponses. Baliser votre contenu avec Product, FAQPage et Article augmente la probabilité que ces systèmes vous citent comme source. C’est la raison principale de continuer à investir dans le FAQ schema, même si le rich result classique est restreint depuis la mise à jour de 2023.

Comment éviter de dupliquer le schema entre le thème et les apps ?

Ça dépend, mais faites d’abord l’inventaire : ouvrez View Source sur une page produit, cherchez application/ld+json et comptez combien de blocs apparaissent. S’il y a plus d’un bloc avec @type: Product, vous avez un doublon. La solution est de désactiver l’émission dans l’app (settings de l’app) ou dans le thème (commenter le snippet), en ne laissant qu’une seule source. Jamais les deux. Le Rich Results Test signale le doublon explicitement.


Le schema ne compte que si la page le justifie

Le schema markup est l’un des rares éléments du SEO technique où la relation entre effort et impact visible est élevée et directe. Il ne vous fait pas monter dans les classements, mais une fois que vous rankez, il élargit le terrain qu’occupe votre snippet. Dans un ecommerce Shopify, cette différence se voit vite : étoiles, prix visible, disponibilité, FAQ, fil d’Ariane. Chacun de ces éléments réduit la friction du clic.

Ce qui ne change pas, c’est le principe sous-jacent : Google récompense le schema qui correspond à un vrai contenu. Baliser ce qui n’existe pas sur la page, c’est demander une pénalité. Ce qui marche, c’est d’inventorier ce que Dawn vous donne gratuitement, d’identifier les trous dans votre cas précis, et de les combler avec des snippets maison ou une app bien configurée. Sans doublons. Validé avant publication. Revu dans Search Console après.

Si votre boutique est à ce point où vous savez qu’il y a du schema, mais sans savoir s’il est complet ni si les apps le cassent, un audit technique vous épargne des semaines de tâtonnements. Réservez 30 minutes sans engagement et je vous dis ce que votre Shopify a aujourd’hui et ce qui lui manque.

Session de 30 min · Sans engagement

Lionel Fenestraz — Consultant Google Ads & Meta Ads Freelance
Lionel Fenestraz
Consultant PPC & CRO Freelance · Google Partner · CXL Certified · Google Ads Search Certified
Plus de 7 ans à gérer des campagnes Google Ads et Meta Ads pour des marques de location saisonnière, B2B et ecommerce. Trilingue ES/EN/FR.
Premier appel gratuit

Vos campagnes publicitaires
pourraient-elles mieux performer ?

30 minutes pour analyser votre situation et vous dire exactement ce que je changerais. Sans pitch, sans proposition commerciale.

Réserver un appel →
30 min · Google Meet · Sans engagement