# AggregateRating : avis Shopify lisibles IA
> Vos avis Loox, Judge.me, Yotpo sont-ils lus par ChatGPT, Perplexity, Mistral ? Analyse par app, par crawler IA, et chemins de correction server-side.
- Canonical HTML: https://verityscore.io/fr/kb/aggregate-rating/
- Markdown alternate: https://verityscore.io/fr/kb/aggregate-rating.md
- Language: fr
- Content type: kb
- Published: 2026-01-24
- Updated: 2026-04-15
- Tags: aggregate-rating, avis, reviews, schema-org, crawlers, llm
- Audit zone: Avis clients
## Le problème : vos avis chargés en JavaScript sont invisibles pour la majorité des IA

Les avis clients sont l'un des signaux de confiance les plus forts pour les agents d'achat IA. Pourtant, sur la majorité des stores Shopify, **les étoiles affichées aux visiteurs humains ne sont jamais lues par ChatGPT, Perplexity, Claude, Mistral Le Chat et la plupart des autres LLMs**.

La raison est technique. Loox, Judge.me, Yotpo, Reviews.io et la majorité des apps d'avis injectent leur `AggregateRating` côté client, via JavaScript, après le chargement de la page. Les crawlers IA récupèrent uniquement le HTML source initial retourné par le serveur : ils n'exécutent pas le JavaScript. Dans ce HTML source, il n'y a ni étoiles, ni note moyenne, ni compteur d'avis.

Un store avec 5 213 avis et une note de 4,8/5 est donc présenté aux IA comme un store à zéro avis, zéro étoile.

## Le test simple pour vérifier votre store

Depuis un terminal, lancez cette commande en remplaçant l'URL par l'une de vos fiches produit :

```bash
curl -A "GPTBot" -sL "https://votre-store.com/products/exemple" | grep -i "aggregaterating"
```

Si la commande ne retourne rien, votre AggregateRating n'est pas dans le HTML natif. Il est injecté en JavaScript, donc invisible pour GPTBot et tous les crawlers IA qui fonctionnent de la même manière.

Vous pouvez valider avec deux outils officiels :

- [Google Rich Results Test](https://search.google.com/test/rich-results) : onglet "Afficher le code source testé" pour voir exactement ce que Googlebot interprète
- [Schema.org Validator](https://validator.schema.org) : structure et validité du JSON-LD

## Pourquoi les crawlers IA ne rendent pas le JavaScript

Les principaux crawlers IA fonctionnent en mode HTTP simple, sans navigateur headless. Ils envoient une requête, lisent le HTML reçu, et passent au document suivant. Cette contrainte n'est pas anecdotique : elle est documentée par les éditeurs des modèles, mesurée sur de gros volumes, et recoupée entre études.

<figure>
  <img src="/diagrams/aggregate-rating-html-vs-js-fr.svg" alt="Comparaison HTML natif vs JavaScript : les avis en JSON-LD server-side sont visibles pour GPTBot, ClaudeBot, PerplexityBot, tandis que les avis chargés en JavaScript sont invisibles" width="800" height="340" loading="lazy" decoding="async" style="width:100%;height:auto;" />
  <figcaption style="text-align:center;font-size:0.875rem;color:#6B6B76;margin-top:0.5rem;">Figure 1 : Ce que voient les crawlers IA : le HTML server-side vs. le DOM après exécution du JavaScript</figcaption>
</figure>

### Matrice des crawlers IA et du rendu JavaScript

| Crawler | Opérateur | Exécute le JavaScript ? | Source |
|---------|-----------|:------------------------:|--------|
| GPTBot | OpenAI | Non | [OpenAI docs](https://platform.openai.com/docs/gptbot), [Vercel 500M+ req](https://vercel.com/blog/the-rise-of-the-ai-crawler) |
| OAI-SearchBot | OpenAI | Non (non documenté explicitement) | [OpenAI bots](https://developers.openai.com/api/docs/bots) |
| ChatGPT-User | OpenAI | Non | Même source |
| ClaudeBot | Anthropic | Non ("ne comptez pas sur le JavaScript") | [Anthropic privacy](https://privacy.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler) |
| Claude-SearchBot | Anthropic | Non | Même source |
| PerplexityBot | Perplexity | Non | [Perplexity crawlers](https://docs.perplexity.ai/docs/resources/perplexity-crawlers) |
| Meta-ExternalAgent | Meta | Non | [Meta webmasters](https://developers.facebook.com/docs/sharing/webmasters/web-crawlers/) |
| CCBot | Common Crawl | Non (officiel) | [Common Crawl FAQ](https://commoncrawl.org/faq) |
| MistralAI-User | Mistral | Mode session navigateur, sans respect de robots.txt | [docs.mistral.ai/robots](https://docs.mistral.ai/robots) |
| Google-Extended | Google | Oui (réutilise le Web Rendering Service de Googlebot) | [Google crawlers](https://developers.google.com/crawling) |
| Applebot / Applebot-Extended | Apple | Oui | [Apple support](https://support.apple.com/en-us/119829) |
| Bingbot | Microsoft | Oui, partiel (evergreen via Edge) | [Bing blog](https://blogs.bing.com/webmaster/october-2019/The-new-evergreen-Bingbot-simplifying-SEO-by-leveraging-Microsoft-Edge) |

Sur 12 crawlers majeurs, **seuls Googlebot, Bingbot et Applebot rendent le JavaScript de façon fiable**. Tous les autres lisent uniquement le HTML initial.

### Ce que cela signifie pour votre store

Si votre AggregateRating est chargé en JavaScript et que vous voulez apparaître dans :

- Les **réponses textuelles de ChatGPT** (via Bing + GPTBot/OAI-SearchBot) : invisible
- Les **citations Claude** (via ClaudeBot) : invisible
- Les **réponses Perplexity** (via PerplexityBot) : invisible
- **Mistral Le Chat** : invisible
- **Meta AI** dans WhatsApp, Instagram et Facebook : invisible
- **Grok** sur X, **DeepSeek**, **Qwen** : invisible
- Les **agents MCP custom** (Zapier, n8n, Make) qui se multiplient en 2026 : invisible
- Les **agents browser** qui scrapent le HTML des pages : invisible

Le feed Google Merchant Center, que nous détaillons plus bas, couvre une partie du problème : mais seulement pour 2 surfaces IA sur plus de 12.

## Pourquoi Shopify n'expose pas nativement l'AggregateRating

Le filtre Liquid officiel `{{ product | structured_data }}` produit un schema Product minimal contenant `@context`, `@id`, `@type`, `brand`, `category`, `description`, `image`, `name`, `offers` et `url`. Il **n'inclut pas** `aggregateRating`, `review` ni `rating`, comme documenté sur la [référence Shopify](https://shopify.dev/docs/api/liquid/filters/structured_data).

La raison a été donnée publiquement par un mainteneur du thème Dawn dans l'[issue GitHub #3535](https://github.com/Shopify/dawn/issues/3535) :

> "We are only returning fields in the structured data that come from concrete data, not sourced from metafields."

Les avis vivent dans des métafields d'apps tierces (Loox, Judge.me, Yotpo, etc.). Shopify ne les remonte donc pas dans son schema par défaut. Sur un thème officiel Online Store 2.0 (Dawn, Craft, Sense, Studio, Crave, Taste, Ride, Origin, Colorblock, Publish), le HTML server-side d'une fiche produit ne contient aucune donnée d'avis. Tout passe par les widgets JS des apps.

## Analyse détaillée des 7 principales apps d'avis Shopify

### Loox

**Rendu du widget** : app block via Shopify Online Store 2.0, script `loox core` exécuté côté client.

**JSON-LD AggregateRating** : Loox annonce générer automatiquement du JSON-LD `Product`, `Offer` et `AggregateRating` ([Loox rich results blog](https://loox.app/blog/rich-results-for-shopify)). La documentation publique ne précise pas explicitement si cette injection est server-side via un block Liquid du theme app extension, ou client-side via script : en pratique, elle fonctionne comme une injection JS dans le DOM.

**Syndication Google Merchant Center** : disponible à partir du plan Scale, nécessite au minimum 50 avis publiés, syndication de tous les avis vérifiés sans filtre ([Loox GMC help](https://help.loox.io/article/78-how-do-i-integrate-my-reviews-with-google-shopping)).

### Judge.me

**Rendu du widget** : template Liquid `<div class="jdgm-widget jdgm-preview-badge" data-id="{{ product.id }}">{{ product.metafields.judgeme.badge }}</div>` hydraté par `widget.js` côté client ([Judge.me Liquid code](https://judge.me/help/en/articles/12058208-liquid-code-for-judge-me-widgets)).

**Rich snippets JSON-LD** : option à activer dans Settings → Advanced → Rich Snippets. Judge.me recommande d'activer le JSON-LD et de désactiver le microdata pour éviter les doublons.

**Syndication Google Merchant Center** : setup manuel via Settings → Google and SEO → Google Shopping. Nécessite un minimum de 50 avis, des identifiants produit (GTIN de préférence), et une validation manuelle Google de 2 à 4 semaines ([Judge.me GMC help](https://judge.me/help/en/articles/8304363-understanding-the-review-issues-in-google-merchant-center)).

### Yotpo

**Rendu du widget** : Yotpo l'admet dans sa propre documentation : *"Yotpo's JavaScript automatically loads on your product pages, detects the product, fetches the latest review data, and injects the perfect JSON-LD schema into the page's code"* ([Yotpo blog](https://www.yotpo.com/blog/google-review-schema/)). C'est donc une injection **côté client** par construction.

**Syndication Google Merchant Center** : disponible sur Starter, Pro, Premium, Enterprise (pas sur Free). Nécessite 50 avis totaux et 3 avis minimum par produit. UGC photos réservé à Premium et Enterprise ([Yotpo GMC syndication](https://support.yotpo.com/docs/google-shopping-syndication)).

### Stamped

**Rendu du widget** : client-side via `<script>` avant `</body>` ([Stamped install](https://stampedsupport.stamped.io/hc/en-us/articles/8866686727579-Shopify-Installing-the-app-main-widget-and-script)).

**JSON-LD AggregateRating** : Stamped fournit un bloc JSON-LD à **coller manuellement** dans `product.liquid`, qui lit les métafields Stamped et produit un AggregateRating server-side ([Stamped rich snippets](https://stampedsupport.stamped.io/hc/en-us/articles/10098081315483-Google-Rich-Snippets)). Sans cette installation manuelle, rien n'apparaît côté serveur.

### Reviews.io

**Rendu par défaut** : 3 `<script>` avant `</body>` + un placeholder `<div data-sku>` ([Reviews.io rich snippets](https://support.reviews.io/en/articles/9184952-product-rich-snippets)). Injection **client-side**. Rich snippets limités aux plans Start-Up, Grow, Plus, Launch, Launch Plus.

### Okendo

**Rendu du widget** : pré-rendu server-side selon la doc marketing Okendo ([site speed reviews](https://okendo.io/resources/blog/site-speed-reviews/)).

**JSON-LD AggregateRating** : Okendo est la seule app qui **documente officiellement une injection server-side via un snippet Liquid**. Le guide officiel demande de créer `snippets/okendo-reviews-json-ld.liquid`, d'y inclure `{% render 'okendo-reviews-json-ld' %}` dans `theme.liquid`, et de lire les métafields `product.metafields.okendo.summaryData.reviewAverageValue` et `product.metafields.okendo.summaryData.reviewCount` ([Okendo rich snippets](https://support.okendo.io/en/articles/3813081-set-up-google-rich-snippets-for-product-ratings)).

C'est aujourd'hui la seule app du marché Shopify avec un chemin SSR natif clairement documenté.

### Opinew

**Approche hybride** : Opinew fournit un snippet qui lit des métafields côté serveur (`product.metafields.opinew_metafields.reviews_count`, `.reviews_rating`), puis utilise un script client-side pour créer un élément `<script type="application/ld+json">` et l'injecter dans le DOM après le load ([Opinew rich snippets](https://www.opinew.com/help-center/knowledge-base/displaying-review-rich-snippets-in-shopify/)).

Opinew s'intègre aussi avec des apps SEO tierces comme JSON-LD for SEO, Yoast SEO et SEO Booster, qui lisent les métafields Opinew server-side et émettent le JSON-LD dans le HTML natif. C'est la voie qui garantit la visibilité IA avec Opinew.

### Synthèse : AggregateRating server-side par app

| App | Widget | JSON-LD par défaut | Chemin SSR documenté |
|-----|--------|-------------------|----------------------|
| Loox | Client-side | Injection JS | Non documenté publiquement |
| Judge.me | Client-side | Option activable, injection JS | Non documenté publiquement |
| Yotpo | Client-side | Injection JS (admis par Yotpo) | Non |
| Stamped | Client-side | Non (installation manuelle requise) | Oui, manuel |
| Reviews.io | Client-side | Scripts clients par défaut | Non documenté |
| Okendo | Server-side | Snippet Liquid natif | Oui, documenté |
| Opinew | Client-side | JS par défaut, ou SEO app tierce | Oui, via app tierce |

## Le feed Google Merchant Center : une solution partielle

Toutes les grandes apps d'avis proposent une syndication vers Google Merchant Center. Ce chemin permet d'alimenter le carousel produit de ChatGPT (83% des carousels viennent de Google Shopping d'après l'[étude Peec AI relayée par Search Engine Land](https://searchengineland.com/new-finding-chatgpt-sources-83-of-its-carousel-products-from-google-shopping-via-shopping-query-fan-outs-470723)) et celui de Perplexity.

### Ce que le feed GMC couvre

- Le carousel produit ChatGPT (via Google Shopping)
- Le carousel produit Perplexity si le marchand est enrôlé dans le Perplexity Merchant Program
- Google Shopping classique
- Partiellement les carousels Google AI Mode

### Ce que le feed GMC ne couvre pas

- Les réponses textuelles et citations ChatGPT (pipeline Bing crawler, 87% des citations SearchGPT matchent Bing top 20 selon [Seer Interactive](https://www.seerinteractive.com/insights/87-percent-of-searchgpt-citations-match-bings-top-results))
- Les réponses textuelles Perplexity (crawler PerplexityBot sur HTML)
- Claude, Mistral Le Chat, Meta AI, Grok, DeepSeek, Qwen, Pi, Cohere (tous crawler-only)
- Les citations dans Google AI Overviews
- Les agents MCP custom (Zapier, n8n, Make, ChatGPT Apps)
- Les agents browser en live (Comet, Claude Computer Use, Browser Use)

Pour ces surfaces, l'AggregateRating doit être présent dans le HTML natif, en JSON-LD ou microdata, extractible sans exécution de JavaScript.

### Setup du feed GMC : pas par défaut, pas automatique

Aucune des 3 principales apps (Loox, Judge.me, Yotpo) n'active la syndication GMC par défaut. Chaque app exige un toggle manuel, des prérequis spécifiques et une validation Google en plusieurs semaines. Voir le tableau ci-dessus pour les exigences par app.

## Le correctif : exposer l'AggregateRating en HTML server-side

Même avec un widget client-side, toutes les apps d'avis écrivent les données dans des métafields Shopify accessibles côté serveur. Ces métafields sont lus au moment du rendu Liquid, ce qui permet d'émettre un JSON-LD directement dans le HTML initial.

Voici un exemple de snippet Liquid à placer dans `sections/main-product.liquid` ou `templates/product.liquid` :

```liquid
{% if product.metafields.reviews.rating_count and product.metafields.reviews.rating_count != "0" %}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "@id": "{{ shop.url }}{{ product.url }}#product",
  "name": {{ product.title | json }},
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "{{ product.metafields.reviews.rating.value }}",
    "reviewCount": "{{ product.metafields.reviews.rating_count }}",
    "bestRating": "5",
    "worstRating": "1"
  }
}
</script>
{% endif %}
```

Le namespace `product.metafields.reviews.*` est celui historique de l'app officielle Product Reviews by Shopify (aujourd'hui dépréciée). Pour les autres apps, adaptez le namespace :

| App | Namespace à utiliser |
|-----|----------------------|
| Judge.me | `product.metafields.judgeme.badge` (contient du HTML) + métafields numériques exposés |
| Okendo | `product.metafields.okendo.summaryData.reviewAverageValue` et `.reviewCount` |
| Opinew | `product.metafields.opinew_metafields.reviews_rating` et `.reviews_count` |
| Yotpo | `product.metafields.yotpo.reviews_average` et `.reviews_count` (confirmé par la communauté, non documenté publiquement) |

### Règles à respecter pour un JSON-LD valide

D'après la [spec officielle Google](https://developers.google.com/search/docs/appearance/structured-data/review-snippet) :

- `ratingValue` est obligatoire
- Au moins un de `ratingCount` ou `reviewCount` est obligatoire
- `ratingValue` doit être entre `worstRating` et `bestRating` (par défaut 1 et 5)
- N'émettez pas d'AggregateRating si le produit a 0 avis (déclenche des warnings dans la Search Console)

### Validation finale

Après ajout du snippet, validez par 3 canaux :

1. `curl -A "GPTBot" -sL "URL-produit" | grep aggregaterating` : doit retourner une ligne avec le JSON-LD
2. [Google Rich Results Test](https://search.google.com/test/rich-results) : doit afficher "Review snippets" valide
3. [Schema.org Validator](https://validator.schema.org) : doit valider la structure

## Données de contexte : combien d'IA lisent votre HTML ?

La plateforme Vercel, qui opère un CDN mesurant le trafic des crawlers IA, a publié en 2025 une analyse de plus de 500 millions de requêtes GPTBot et 370 millions de requêtes ClaudeBot par mois. Sur cet échantillon, **aucun des deux crawlers n'exécute le JavaScript** ([Vercel AI crawler](https://vercel.com/blog/the-rise-of-the-ai-crawler)).

Yext a analysé 6,8 millions de citations IA et identifié que **86% des citations IA proviennent de sources contrôlées par la marque** (site propre, feeds, FAQ structurées) ([Yext press release](https://investors.yext.com/news-events/press-releases/detail/376)). L'investissement sur son propre HTML est donc plus rentable que de dépendre exclusivement de sources tierces.

## Articles liés

- [Schema.org Product sur Shopify : guide complet](/fr/kb/schema-org)
- [Vendre dans ChatGPT : le guide Shopify 2026](/fr/kb/vendre-chatgpt-shopify)
- [Perplexity Shopping : guide marchand Shopify](/fr/kb/perplexity-shopping)
- [robots.txt et crawlers IA : ce qu'il faut autoriser](/fr/kb/robots-crawlers)
- [E-E-A-T pour l'IA : comment les agents évaluent la confiance](/fr/kb/eeat-signaux-ia)
- [Golden Record : complétude des données produit](/fr/kb/golden-record)

---

**Prêt à vérifier votre store ?** [Lancer un audit GEO gratuit →](https://verityscore.io)
## FAQ

### Pourquoi mes avis Loox, Judge.me ou Yotpo sont invisibles pour ChatGPT ?

Ces apps injectent leurs étoiles et leur AggregateRating via JavaScript après le chargement de la page. Les crawlers IA comme GPTBot, ClaudeBot, PerplexityBot, Meta-ExternalAgent et CCBot n'exécutent pas le JavaScript. Ils ne voient que le HTML initial envoyé par le serveur, qui ne contient aucune donnée d'avis.

### Le feed Google Merchant Center ne résout-il pas le problème ?

Partiellement. Le feed GMC alimente le carousel produit de ChatGPT (83% des carousels viennent de Google Shopping) et celui de Perplexity. Mais il ne couvre pas les réponses textuelles de ChatGPT, les citations, Claude, Mistral Le Chat, Meta AI, Grok, DeepSeek, ni les agents MCP ou browser. Pour ces surfaces, l'AggregateRating en HTML reste indispensable.

### Quelle app d'avis expose l'AggregateRating en HTML natif sur Shopify ?

Okendo est la seule app qui documente publiquement une injection server-side via un snippet Liquid. Stamped fournit du JSON-LD mais exige une installation manuelle dans le thème. Loox, Judge.me, Yotpo, Reviews.io injectent leur AggregateRating côté client par défaut. Opinew est hybride.

### Shopify expose-t-il nativement l'AggregateRating dans son schema ?

Non. Le filtre Liquid {{ product | structured_data }} génère Product, Offer, Brand et Image, mais omet délibérément aggregateRating et review. La raison officielle dans le repo Dawn : Shopify ne fait remonter que des données concrètes du catalogue, pas celles des métafields d'apps tierces.

### Comment tester si mon AggregateRating est lu par les crawlers IA ?

Utilisez la commande curl -A 'GPTBot' -sL 'https://votre-store.com/products/slug' | grep -i aggregaterating. Si rien ne matche, vos avis sont invisibles. Validez ensuite avec Google Rich Results Test et schema.org Validator.

### Quel schema.org utiliser pour les avis ?

Le type AggregateRating avec au minimum ratingValue et l'un des deux champs ratingCount ou reviewCount. La valeur ratingValue doit être entre bestRating (par défaut 5) et worstRating (par défaut 1). À émettre seulement si le produit a au moins 1 avis réel.

## Sources

- [Shopify structured_data Liquid filter (documentation officielle)](https://shopify.dev/docs/api/liquid/filters/structured_data) (official)
- [Shopify Dawn GitHub issue #3535 (explication aggregateRating absent)](https://github.com/Shopify/dawn/issues/3535) (official)
- [OpenAI GPTBot documentation](https://platform.openai.com/docs/gptbot) (official)
- [Anthropic Claude crawlers (ClaudeBot, Claude-User, Claude-SearchBot)](https://privacy.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler) (official)
- [Perplexity Crawlers (PerplexityBot, Perplexity-User)](https://docs.perplexity.ai/docs/resources/perplexity-crawlers) (official)
- [Common Crawl CCBot FAQ (JavaScript not executed)](https://commoncrawl.org/faq) (official)
- [Apple Applebot documentation (renders JavaScript)](https://support.apple.com/en-us/119829) (official)
- [Vercel : analyse de 500M+ requêtes de crawlers IA (GPTBot, ClaudeBot ne rendent pas le JS)](https://vercel.com/blog/the-rise-of-the-ai-crawler) (industry)
- [Okendo : JSON-LD server-side via snippet Liquid](https://support.okendo.io/en/articles/3813081-set-up-google-rich-snippets-for-product-ratings) (official)
- [Loox Google Merchant Center integration (plan Scale, 50+ avis)](https://help.loox.io/article/78-how-do-i-integrate-my-reviews-with-google-shopping) (official)
- [Judge.me Google Merchant Center feed (2 à 4 semaines de validation)](https://judge.me/help/en/articles/8304363-understanding-the-review-issues-in-google-merchant-center) (official)
- [Yotpo Google Shopping Syndication (50+ avis, 3+ par produit)](https://support.yotpo.com/docs/google-shopping-syndication) (official)
- [Google Review / AggregateRating structured data spec](https://developers.google.com/search/docs/appearance/structured-data/review-snippet) (official)
- [Peec AI : 83% des produits ChatGPT viennent de Google Shopping](https://searchengineland.com/new-finding-chatgpt-sources-83-of-its-carousel-products-from-google-shopping-via-shopping-query-fan-outs-470723) (industry)
- [Seer Interactive : 87% des citations SearchGPT matchent Bing top 20](https://www.seerinteractive.com/insights/87-percent-of-searchgpt-citations-match-bings-top-results) (industry)
- [Yext : 86% des citations IA proviennent de sources contrôlées par la marque](https://investors.yext.com/news-events/press-releases/detail/376) (industry)

