Skip to main content

Learn · Structured data

Review schema explained

Review schema is structured data that describes a review of a product, business or service so search engines can display star ratings — the gold-star rich results — underneath your site in the search listings. In 2026, Google reads two related Schema.org types: Review (a single review) and AggregateRating (the overall star rating and review count).

Last reviewed by the Reviews Widget product team.

What review schema is

Review schema is structured data in the schema.org vocabulary that tells search engines a piece of content is a review: who wrote it, what it is about, the star rating and the text. It is normally written as a JSON-LD block in the page's HTML.

Structured data does not change what a page says; it changes how reliably a machine can read it. That matters for classic rich results and, increasingly, for AI answer engines summarising a business from its own site.

Review vs AggregateRating

Review and AggregateRating compared
ReviewAggregateRating
DescribesOne individual reviewThe summary of many reviews
Key propertiesauthor, reviewRating, reviewBody, datePublishedratingValue, reviewCount or ratingCount
Usually nested inThe item being reviewedThe item being reviewed
Used alone?Yes, but weak on its ownRisky — engines expect reviews behind the number

A minimal working example

The smallest well-formed block for a local business with reviews:

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Acme Café",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "217"
  },
  "review": [{
    "@type": "Review",
    "author": { "@type": "Person", "name": "Sam T." },
    "datePublished": "2026-06-14",
    "reviewRating": {
      "@type": "Rating",
      "ratingValue": "5",
      "bestRating": "5",
      "worstRating": "1"
    },
    "reviewBody": "Best flat white in the neighbourhood."
  }]
}

Reviews Widget outputs a superset of this automatically for every embed, matched to the reviews actually rendered on the page, so you never author the JSON-LD yourself.

What Google actually shows in search

When a page is eligible, review rich results can add gold stars, the numeric rating and the review count beneath the title in search. Eligibility is the operative word: valid markup makes a page a candidate, it does not entitle it to the treatment.

Google decides per query and per page whether to render a rich result at all. Correct markup that produces no visible stars is a normal outcome, not a bug in your implementation.

Google's self-serving review policy

Google excludes self-serving reviews from review rich results: reviews about a business, displayed on that business's own site. This applies even when the reviews are genuine and originally came from Google, Trustpilot, Yelp, TripAdvisor, Facebook, Booking.com, Airbnb, Amazon, ProductReview.com.au, G2 or Etsy. Embedded reviews are a conversion asset, not a star-snippet tactic.

It is worth being blunt about this, because the widget market is full of the opposite claim. Where review stars legitimately do appear for a business in search, they usually come from Google's own Business Profile data in the local results, not from JSON-LD on the business's website.

Product review markup is different: reviews of a product you sell, on that product's page, can be eligible when fed by genuine per-product review data.

Mistakes that break review rich results

Common review schema mistakes, their symptom and the fix
MistakeSymptomFix
Marking up an unsupported entity typeRich Results Test finds no eligible itemNest ratings under LocalBusiness, Product, Recipe, Event, etc.
AggregateRating with no Review objectsMarkup valid, rich result never appearsInclude the individual reviews behind the number
Non-default rating scale, no boundsRatings misread, e.g. 8 out of 5Set bestRating and worstRating explicitly
Markup describing content not on the pageRisk of a manual action for hidden contentOnly mark up reviews the visitor can actually see
Two conflicting AggregateRating blocksEngines pick one, often the wrong oneEmit one aggregate per entity per page
Stale counts hard-coded in the templateSchema disagrees with visible contentGenerate the JSON-LD from the same data you render

A five-minute validation checklist

  1. Run the live URL through Google's Rich Results Test and confirm zero errors.
  2. Confirm the ratingValue matches the average shown on the page.
  3. Confirm reviewCount matches the reviews actually available.
  4. Check only one aggregate exists per entity on the page.
  5. Re-check after any redesign — templates are where duplicate blocks creep in.

Sources & further reading

Frequently asked questions

Does adding review schema guarantee gold stars in Google?+

No. Schema is a prerequisite, not a guarantee. Google decides whether to display review rich results per-page based on content quality, the schema being valid, and the reviews being about a supported type (Product, LocalBusiness, Recipe, Book, Movie, Software, Event, etc.). Self-serving reviews are ineligible — see the policy section above.

Should I use Review or AggregateRating?+

Both. AggregateRating summarises the overall star rating and review count for search results, while Review provides the individual review objects that back it up. Reviews Widget outputs both automatically.

What's the difference between JSON-LD and Microdata for reviews?+

JSON-LD is the format Google recommends — a single <script type="application/ld+json"> block. Microdata sprinkles attributes across your HTML. Both work; JSON-LD is simpler to maintain and easier to validate.

How do I test my review schema?+

Use Google's Rich Results Test at search.google.com/test/rich-results. Paste your URL and it tells you whether the review markup is valid and eligible for the review snippet.

Ship review schema without writing any JSON-LD

Reviews Widget outputs valid Review + AggregateRating markup for every embed.

All learn