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.

Last updated 2026-04-30 · Ranking-spread signal · 10 pts · Highest failure rate of any signal

10 / 70Ranking-spread weight
~90%Stores fail this signal
5 minTypical fix time
What this signal scores: an 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:

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:

  1. Open any PDP, view source.
  2. Search for aggregateRating (case-sensitive). It should appear inside a <script type="application/ld+json"> block whose top-level @type is Product.
  3. If you find it: confirm both ratingValue and reviewCount are present, non-zero, and parseable.
  4. 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 appWhere the toggle livesWhat it's called
Judge.meSettings → SEO & rich snippets"Enable rich snippets"
Yotpo (Reviews)Reviews → Settings → On-site display → SEO"Schema markup" / "Star ratings in search"
LooxSettings → Integrations → Rich snippets"Display in Google search results"
StampedSettings → Display → SEO"Enable schema-org / rich snippets"
OkendoSettings → SEO & integrations"Aggregate rating schema"
Shopify Product Reviews (legacy, retired May 2025)App was retiredMigrate to Judge.me Free or one of the above
Toggle on rich snippets in your reviews app2 minfree

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.

Inline directly in main-product.liquid15 minfree

If 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.

CatalogScan Pro — auto-injection2 min$49/mo

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