Skip to content
StoreCited
Answer

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.

Bright yellow stars arranged on a vivid orange and blue background with copy space.
Photo: Towfiqu barbhuiya / Pexels

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:

  1. No schema emitted at all — the widget is pure CSS/JS, zero structured data.
  2. Schema emitted via JS — a script tag is injected client-side, which many crawlers miss entirely.
  3. Schema emitted but malformed — missing required fields like ratingCount or bestRating, 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

AppWhere to Enable SchemaDefault StateNotes
Judge.meSettings → SEO → "Rich Snippets" toggleOFFEmits JSON-LD in page source when enabled. Free plan supported.
YotpoAccount Settings → Integrations → Google Rich SnippetsOFFRequires Growth plan or above for full JSON-LD output.
LooxSettings → SEO → "Google Rich Snippets"OFFEmits JSON-LD; verify it's server-side, not injected post-load.
OkendoSettings → Integrations → Google Structured DataOFFEnterprise-tier feature; confirm with support for your plan.
Stamped.ioSettings → Integrations → Rich SnippetsOFFToggle available on all paid plans.
Shopify Product Reviews (deprecated)Theme code — manual snippet requiredN/AApp 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

  1. Enable the schema toggle in your review app's settings (see table above). Save and publish.
  2. Open a product page in your browser that has at least a few reviews and a calculated average rating.
  3. View the raw page source (Ctrl+U / Cmd+U) and search for AggregateRating. You should see a script type="application/ld+json" block containing fields like ratingValue, reviewCount, and bestRating.
  4. 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 AggregateRating detected.
  5. Check for errors or warnings — common issues include missing ratingCount, bestRating not set to 5, or the @type being Product without a nested aggregateRating property. Fix these in your app settings or theme code.
  6. Spot-check a second product with a different rating to confirm the values are dynamic, not hardcoded.
  7. 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

Free · No login · Results in ~60 seconds

Frequently asked questions

Does Judge.me automatically add AggregateRating schema to Shopify product pages?

No — not by default. You have to manually enable it under Settings → SEO → Rich Snippets in your Judge.me dashboard. Once toggled on, Judge.me injects a JSON-LD block into the server-rendered HTML of each product page that has reviews. It works on the free plan, which makes it one of the most accessible options available.

Why does Google's Rich Results Test not detect my review schema even though my app says it's enabled?

Almost always because the schema is being injected via JavaScript after page load, not written into the initial HTML. The Rich Results Test fetches raw HTML first. Check your page source manually (Ctrl+U) and search for 'AggregateRating' — if it's not there, your app is JS-injecting the schema and you need to contact support to request server-side output.

Can I add AggregateRating schema manually if my review app doesn't support it?

Yes. You can add a Liquid snippet to your product template that outputs a JSON-LD block using Shopify's metafields or review app metaobjects to populate ratingValue and reviewCount dynamically. This requires developer access and careful testing, but it's fully valid as long as the data reflects reviews actually visible on the page.

Does having AggregateRating schema guarantee star ratings appear in Google search results?

No — and anyone who tells you otherwise is wrong. Valid schema makes you *eligible* for rich results, but Google decides whether to display them based on its own quality signals. That said, you cannot get rich result stars without valid schema, so it's a necessary first step. Focus on getting the schema right; the display follows from there.

Does AggregateRating schema help with AI search visibility, not just Google?

Yes, increasingly. AI agents and large language models that crawl product pages to answer shopping queries rely on structured data to understand ratings without parsing visual widgets. Exposing clean AggregateRating schema means your product data is machine-readable to a much broader range of AI systems beyond traditional search — which is exactly the visibility gap StoreCited was built to surface.