Skip to content
New

Announcement placeholder — product sites pass real copy via the announcement prop.

Learn more →

Review schema markup explained

What it is, which type to use, and the 2019 rule that decides whether your stars can appear in search at all.

What review schema markup is

Review schema markup is structured data you add to a page so search engines can read a review as a review rather than as ordinary text. It records who wrote it, what it is about, and what rating they gave, in a format defined at schema.org.

It is what makes a star rating possible in a search result. It does not make one happen — Google decides that separately — but without the markup there is nothing for it to decide about.

Review, AggregateRating and the thing they attach to

Three types get mixed up constantly, and they do different jobs.

TypeWhat it describesWhen to use it
ReviewOne review by one personA single testimonial, with author and rating
AggregateRatingThe average and the count“4.8 from 312 reviews” — the summary, not the individual reviews
The parent itemWhat is being reviewedProduct, LocalBusiness, Organization, Service, Recipe, Book, Course, Event, SoftwareApplication

Review and AggregateRating are never standalone. They are nested inside the thing they are about. Markup that declares an AggregateRating with nothing attached to it is invalid, and it is the most common mistake in this area.

What valid markup looks like

JSON-LD in a script tag is the format Google prefers. This is an AggregateRating on a Product, which is the eligible case.

Schema typeReview rich resultsNotes
ProductEligibleThe route that still works
Recipe, Book, Course, Event, Movie, SoftwareEligibleOnly if the page really is one of these
LocalBusinessNot shown since 2019Self-serving reviews were excluded
OrganizationNot shown since 2019Same exclusion
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Merino Wool Scarf",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "312",
    "bestRating": "5"
  }
}
</script>

Four things make it valid: ratingValue is a number, reviewCount or ratingCount is present and not zero, the rating scale is stated or defaults to 5, and the marked-up reviews are actually visible on the page. Marking up reviews that a visitor cannot see is a guidelines violation and gets the rich result removed.

How to check whether yours works

Google’s Rich Results Test tells you whether the markup is valid and eligible. Search Console reports what Google has actually indexed and any errors it found across the site, which is the more useful signal because it reflects real pages rather than a single test.

Validation is not the same as display. A page can pass every test and still show no stars, either because of the self-serving restriction above or because Google simply chose not to.

What our widget outputs

Our widget emits Product schema with an AggregateRating built from your collected reviews. Product is the type that still produces star ratings in search results, so that is the type we use.

You do not have to set anything up. Connect your reviews, place the widget, and the markup goes out with it, formatted the way Google reads it.

It is on by default and there is a toggle to turn it off. The one time to switch it off is when another plugin on the same page already emits review markup — two conflicting sets are worse than one, and Google will usually ignore both.

Questions

More from Learn