GEO-056·Issue 05·Technical Foundation·56 / 132
Review Structured Data: Aggregate Ratings and Individual Reviews
Aggregate ratings break when the count is orders, not reviews. Reconcile the fields against visible reviews, split the two markup types, and gate the build.
Issue focusEvidence of Trust: Reviews, UGC, and Third-Party Corpora
Consider a composite case. An ergonomic chair brand selling into the US and Germany opens its May review meeting with a screenshot: 4.8 stars from 1,284 reviews, and the JSON-LD agrees. Then someone opens the storefront: 128 reviews, and the third page is the last. The 1,284 was a year of orders. That afternoon an assistant, asked whether the lumbar support lasts, paraphrases a Reddit thread about a creak and never mentions the rating.
A rating’s value is not the star count but the visible reviews behind it; an aggregate and a single review answer different questions, and one mismatch tells a model your numbers do not reconcile.
The model reads field relationships, not stars
A rating block is a set of assertions that check one another. ratingValue says how good, reviewCount how many, bestRating the scale, itemReviewed what is rated, and every Review needs an author and datePublished. Remove one and fact drops to claim.
The two answer different questions. “How is this brand overall” needs a mean, a sample size, a time window; “what goes wrong” needs one quotable negative. An aggregate alone says little; scattered reviews hide whether a complaint is an outlier.
Engines cross-check the page, the JSON-LD, and the off-site corpus. When those disagree, the model retreats to the safest true sentence — “the brand has user ratings” — which is also what keeps you off shortlists. Inconsistent evidence functions as no evidence, the failure mapped in the four trust prerequisites for AI to recommend you.
The neglected variable is the denominator. reviewCount: 1284 never says whether it counts orders, reviews, or four markets summed; a German shopper who sees 1,284 and finds 128 in German reads a contradiction, not a rating.
Two assets, two eligibility bars
Split the two before touching fields: an aggregate is a conclusion, an individual review is evidence. The first attaches to Product or Offer; the second maps a node to one evaluation.
| Markup | Attaches to | Key fields | Passes when |
|---|---|---|---|
| AggregateRating | Product / Offer | ratingValue, reviewCount or ratingCount, bestRating | Average recomputes from reviews a shopper can open |
| Review | Product / Organization | author, datePublished, reviewRating, reviewBody | Same text and author appear on the page |
| Eligibility | Sitewide | One product, not a whole category | User-written, readable without tricks |
Two hard bars. Reviews must be readable by users; crawler-only output does not count. And a brand’s own assessment is not a user review — Google has long treated self-serving reviews as ineligible (check the current review-snippet documentation, as of 2026-05). Rich results keep shrinking, as with FAQ, HowTo, and Review markup; display is the platform’s call, correct fields are yours.
Three failures that make every rating suspect
First, copying and self-review. Stars lifted from Trustpilot or Amazon into your JSON-LD, or a marketing “expert test” typed as a customer review with the company as author. One confirmed copy discounts every other rating on the site.
Second, a watered denominator. Orders, “customers served”, or markets summed and repeated on each locale. That costs more trust than no rating: it says the number was assembled for display.
Third, hidden reviews. Low scores collapsed with CSS, reviews behind a “load more” a bot never triggers, JSON-LD served only to a crawler agent. Content a person cannot reach should not be marked up; it reads as two datasets, for people and for machines.
Fixing all three is cheap. Being caught twice is not.
Five steps from a reconciliation sheet to a build gate
Order matters: make review data one source of truth, then let it feed page and markup. JSON-LD written first becomes a second source.
| Step | What you do | Owner | Passes when |
|---|---|---|---|
| 1 Master data | SKU × market × window; rating, count, denominator | Data, ecommerce | Page, JSON-LD, feed share one record |
| 2 Split markup | Aggregate on product; Review for visible text | Front end, content | Every Review node has visible copy |
| 3 Complete fields | author, datePublished, bestRating, reviewRating | Front end | Zero validator errors |
| 4 Gate the build | No aggregate when rating is empty, count drops, or reviews under five | Front end, QA | The build fails, not a person’s eye |
| 5 Monthly regression | Reconcile 20 SKUs by hand | Content, growth | Zero variance, logged deviations |
Start at step 4. Rating corruption is silent: a template swap or a timed-out API, and ratingValue ships empty while the page renders normally. Only the build notices.
Example: one chair, two versions
Example — brand, ratings, and reviews are invented; no real product is described.
Before: 4.8 stars, reviewCount: 1284, no bestRating, no Review nodes, and a German page reusing the US block. After:
{
"@type": "Product",
"name": "Ergo Chair S2",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.6,
"reviewCount": 128,
"bestRating": 5
},
"review": [{
"@type": "Review",
"author": { "@type": "Person", "name": "M. Weber" },
"datePublished": "2026-03-11",
"reviewRating": { "@type": "Rating", "ratingValue": 2, "bestRating": 5 },
"reviewBody": "Lumbar support started creaking in month three; support sent a replacement bracket in two weeks."
}]
}
Three changes: the average recomputes from 128 visible reviews, the count is reviews, not orders, and one negative review carries an author, a date, a body. Publishing a two-star is not self-harm: it gives “what are the downsides” an answer you wrote, the question assistants ask before a shortlist, and the case for handling negative reviews so AI doesn’t amplify them.
Where this breaks
Below five reviews, skip the aggregate and mark individual reviews. A 5.0 from three reviews advertises sample size, not quality.
If most revenue closes inside a marketplace, its AI reads listings, reviews, and fulfillment; your on-site rating carries less weight — check which of AI search’s four entry points is yours.
Custom goods, B2B quotes, and made-to-order products have no public rating system; a “composite score” adds a surface to question. If the source is compromised — cashback reviews, seeded ratings, lab scores relabeled as opinion — schema multiplies it, and EU rules require traders to explain how they ensure reviews are authentic.
Rating markup sits on the technical foundation line, beside crawling, Offer data, and entities: the layer where facts can be checked.
This month, build one reconciliation sheet for your best-selling SKU: ratingValue, reviewCount, bestRating, and the reviews a shopper can open. Make them agree, then write “no aggregate below five reviews” into the template.