Home · The 15 signals · AggregateRating
Shopify AggregateRating schema
AggregateRating is the most-failed signal across every Shopify store CatalogScan has ever scanned: roughly 9 in 10 of the launch-scan stores were missing it entirely, even when they had Yotpo, Judge.me, Loox, Stamped, or Okendo installed and showing a star widget on every PDP. The visible stars on the page and the schema-readable stars in the JSON-LD are two different things — and AI shopping agents only see the second one. This is the dial to flip first; it's free, fast, and almost always one toggle inside your existing reviews app.
aggregateRating node inside your Product JSON-LD with both ratingValue (1–5, decimal allowed) and reviewCount (integer). Both fields present and non-zero = full credit. A single field, an empty value, or a missing node = zero credit.
What it is
AggregateRating is the schema.org vocabulary node that summarizes all customer reviews of a single product into two numbers: the average rating and the count. It's the structured-data equivalent of "★ 4.7 (3,284)" that you display on the page. The required shape, inline on a Product:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Wool Runner",
...
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "3284",
"bestRating": "5",
"worstRating": "1"
}
}
The bestRating and worstRating fields are optional but recommended — without them, agents assume a 1–5 scale by convention, but explicit is better than implicit. reviewCount must be an integer; some apps emit "3284 reviews" as a string, which trips strict parsers.
Why AI shopping agents care
This is the tie-breaker signal. When two stores sell the same-or-similar product and both clear every other signal, the one with parseable AggregateRating wins. Specifically:
- Confidence weighting. A 4.7 / 3,200-review product carries more confidence than a 4.9 / 12-review product for an agent ranking results. But agents can only weight what they can read — no aggregateRating node, no input.
- Review-count threshold. Some agents won't surface a product without a minimum review count (varies by query type — e.g., "best running shoes" filters more aggressively than "where to buy Allbirds"). A 4.9-rated, 850-review product without aggregateRating in JSON-LD is invisible to that filter.
- Rich-card rendering. When ChatGPT Shopping cites your product in a response, the star rating in the rich card comes from this field. Missing aggregateRating = star line disappears = lower click-through.
How to test it on your store
The visible-star widget on your PDP and the schema-readable AggregateRating in JSON-LD are two completely separate things. Most stores have the first and not the second. To check the second:
- Open any PDP, view source.
- Search for
aggregateRating(case-sensitive). It should appear inside a<script type="application/ld+json">block whose top-level@typeisProduct. - If you find it: confirm both
ratingValueandreviewCountare present, non-zero, and parseable. - If you don't find it: your reviews app is rendering stars on the page but not injecting structured data. The fix is below.
For a faster overview across all your PDPs, run the free CatalogScan scan — it'll report aggregateRating presence on the sampled product and tell you which review app you appear to have installed.
How to fix it
Almost every Shopify reviews app has a "rich snippets" / "schema injection" toggle, often shipped off by default. The exact path varies by app:
| Reviews app | Where the toggle lives | What it's called |
|---|---|---|
| Judge.me | Settings → SEO & rich snippets | "Enable rich snippets" |
| Yotpo (Reviews) | Reviews → Settings → On-site display → SEO | "Schema markup" / "Star ratings in search" |
| Loox | Settings → Integrations → Rich snippets | "Display in Google search results" |
| Stamped | Settings → Display → SEO | "Enable schema-org / rich snippets" |
| Okendo | Settings → SEO & integrations | "Aggregate rating schema" |
| Shopify Product Reviews (legacy, retired May 2025) | App was retired | Migrate to Judge.me Free or one of the above |
Find the toggle in your reviews app's settings (table above), enable it, save. Most apps re-inject the schema on the next page render. Verify in the page source within 5 minutes of saving.
main-product.liquid15 minfreeIf your reviews app doesn't have this toggle (rare) or you'd rather not depend on it, inject the AggregateRating node into your existing Product JSON-LD block by reading review counts via your app's Liquid API. Judge.me exposes {{ product.metafields.judgeme.badge }}; Yotpo exposes a similar metafield set. The variables differ but the pattern is the same: pull ratingValue + reviewCount from the metafield, slot into the Product node.
Pro reads your live reviews data via Shopify Admin API metafields and patches the AggregateRating node into your Product JSON-LD without touching theme code. See Pro pricing.
5 mistakes we keep finding
1. Reviews app installed but rich snippets toggle is off
This is 80% of the failures. The widget renders on the page (you see the stars) but the JSON-LD never gets injected. Check the toggle table above for your specific app.
2. AggregateRating injected as a separate <script> block, not on the Product
Some apps inject AggregateRating as its own top-level JSON-LD block (e.g., {"@type": "AggregateRating", ...} floating with no parent Product). Strict parsers reject this — the node must live inside or be linked to a Product. Workaround: ensure your theme's existing Product JSON-LD inlines the aggregateRating field, even if it duplicates what the app injects separately.
3. ratingValue as "0" on products with no reviews yet
Schema.org requires ratingValue ≥ 1 for AggregateRating to be valid. New products with zero reviews must omit the AggregateRating node entirely — emitting a zero-rating block silently fails validation. Most apps handle this correctly; some don't.
4. Reviews live on a third-party domain (Reviews.io, Trustpilot widget)
If your reviews are stored on reviews.io or Trustpilot and only embedded as an iframe, the AggregateRating data isn't on your page at all. Fix: enable the on-site rich-snippets sync these services offer. Trustpilot calls it "Rich Snippets" under your dashboard's "Integrations" tab; Reviews.io has it under "Schema."
5. Star rating shows in search, but Google still warns "missing field" in Rich Results Test
Google has been flexible historically; AI shopping agents are stricter. If Rich Results Test reports missing bestRating or worstRating, fix that — those agents will silently down-weight you regardless of what Google does.
See also
Is your AggregateRating actually visible to ChatGPT?
Free 2-minute scan. We test the JSON-LD, not just the page-rendered stars — so you can see if your reviews are scoring or invisible.
Scan my store → See all 15 signals