How do I add review (AggregateRating) schema in Shopify?
Nearly every Shopify store shows star ratings to shoppers but hides them from AI and Google — because review apps default to JavaScript rendering that crawlers can't read. To fix it: enable structured data output in your review app's settings, verify with Google's Rich Results Test, and confirm the JSON-LD block appears in raw page source. Here's exactly how to do it, app by app.

The Gap Nobody Talks About: Visible Reviews ≠ Machine-Readable Reviews
Your star ratings are almost certainly invisible to AI. StoreCited scanned 24 leading Shopify brands and found 88% displayed customer reviews on their product pages — yet not a single one exposed valid AggregateRating schema that an AI crawler or Google's indexer could actually parse. That's not a review quality problem; it's a structured data problem.
The root cause is how review apps load their widgets. Most inject star ratings via JavaScript after the initial HTML is served. Google's crawlers can execute JS in some cases, but AI agents, LLMs doing product research, and tools like Google's Rich Results Test often see only the raw HTML — which contains nothing. No schema, no stars, no signal.
Why Review Apps Often Don't Emit Schema (Even When You Think They Do)
Review apps are built to show ratings to humans first. Schema is an afterthought, buried in an advanced settings tab, disabled by default, or only available on paid tiers. There are three failure modes:
- No schema emitted at all — the widget is pure CSS/JS, zero structured data.
- Schema emitted via JS — a
scripttag is injected client-side, which many crawlers miss entirely. - Schema emitted but malformed — missing required fields like
ratingCountorbestRating, causing Google to silently ignore it.
The fix in all three cases is the same: force your app to output a static application/ld+json block in the server-rendered HTML of the product page, then verify it's actually there.
How to Enable AggregateRating Schema: App-by-App
| App | Where to Enable Schema | Default State | Notes |
|---|---|---|---|
| Judge.me | Settings → SEO → "Rich Snippets" toggle | OFF | Emits JSON-LD in page source when enabled. Free plan supported. |
| Yotpo | Account Settings → Integrations → Google Rich Snippets | OFF | Requires Growth plan or above for full JSON-LD output. |
| Loox | Settings → SEO → "Google Rich Snippets" | OFF | Emits JSON-LD; verify it's server-side, not injected post-load. |
| Okendo | Settings → Integrations → Google Structured Data | OFF | Enterprise-tier feature; confirm with support for your plan. |
| Stamped.io | Settings → Integrations → Rich Snippets | OFF | Toggle available on all paid plans. |
| Shopify Product Reviews (deprecated) | Theme code — manual snippet required | N/A | App is sunset; migrate or add schema manually. |
If your app isn't in this table, search its help docs for "rich snippets," "structured data," or "JSON-LD." If you find nothing, contact support directly — it's a legitimate question and the answer tells you a lot about the app's SEO maturity.
Step-by-Step: Turning On and Verifying AggregateRating Schema
- Enable the schema toggle in your review app's settings (see table above). Save and publish.
- Open a product page in your browser that has at least a few reviews and a calculated average rating.
- View the raw page source (Ctrl+U / Cmd+U) and search for
AggregateRating. You should see ascript type="application/ld+json"block containing fields likeratingValue,reviewCount, andbestRating. - Copy the product page URL and paste it into Google's Rich Results Test. Run the test and look for a "Product" result with an
AggregateRatingdetected. - Check for errors or warnings — common issues include missing
ratingCount,bestRatingnot set to5, or the@typebeingProductwithout a nestedaggregateRatingproperty. Fix these in your app settings or theme code. - Spot-check a second product with a different rating to confirm the values are dynamic, not hardcoded.
- Re-run StoreCited on your store to confirm the schema is now detected across your product catalog.
A valid output block looks like this:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Your Product Name",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "312",
"bestRating": "5",
"worstRating": "1"
}
}This follows the schema.org/Product and schema.org/Review specifications exactly. Google's structured data documentation requires ratingValue and reviewCount at minimum — everything else is strongly recommended.
The One Rule You Cannot Break
Only mark up reviews that are genuinely visible on the page. If your product page shows a star rating widget, that's fine to mark up. If you're adding schema for reviews that live on a separate /reviews page, or that are hidden behind a tab that never renders in HTML — don't. Google's structured data guidelines explicitly prohibit marking up content that isn't present to the user. Violations can result in a manual action that suppresses your rich results entirely.
The honest version of this advice: if you're unsure whether your reviews are server-rendered, run the Rich Results Test. If it detects the schema, you're fine. If it doesn't, your app is almost certainly JS-injecting — and you need to either fix the app settings or switch apps.
Run a free StoreCited scan on your store to instantly see whether your product pages are exposing valid AggregateRating schema or silently failing — no setup required.
Get the answer for your specific store