Review schema: when Google shows stars

·4 min read

Review schema is structured data that describes a rating, either one person's Review or an AggregateRating across many reviews, and it can earn your page a star rating in Google's results. Google shows those stars only when the reviewed item is an eligible type, the required properties are present, the reviews are visible on the page, and the business is not reviewing itself.

That last condition knocks out more sites than any syntax error. If you run a local business and marked up your testimonials page hoping for stars, read the self-serving section first.

Which pages can get a review snippet?

A review snippet is the star rating line Google can show under a result, and only certain item types qualify. Google's review snippet documentation lists them: Book, Course, CreativeWorkSeason, CreativeWorkSeries, Episode, Event, Game, HowTo, LocalBusiness, MediaObject, Movie, MusicPlaylist, MusicRecording, Organization, Product, Recipe and SoftwareApplication.

In practice, most stars you see belong to products, recipes and software. A review of a service, a blog post or a person is outside the list, so markup on those pages does nothing for the result.

Being on the list is only the entry ticket. Some of those types have rich results of their own that Google has retired or narrowed, and LocalBusiness and Organization carry the self-serving restriction below.

Review vs AggregateRating schema: required properties

Use Review for a single review and AggregateRating for the summary of many. Most sites want AggregateRating, because that is what produces the "4.6 (212)" line people associate with star ratings in Google.

Review AggregateRating
Describes One person's review The average of many ratings
Required author, reviewRating with ratingValue, itemReviewed with a name ratingValue, ratingCount or reviewCount, itemReviewed with a name
Recommended datePublished, bestRating, worstRating bestRating, worstRating

You can skip itemReviewed when you nest the rating inside the item it rates, which is the cleaner way to write it. Google assumes a 5-point scale when bestRating is missing, so set it whenever your scale is anything else.

AggregateRating schema example for a product

Nest the AggregateRating inside the Product so the rating is attached to the thing it rates.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Trailhead 40L Hiking Pack",
  "image": "https://example.com/img/trailhead-40.jpg",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.6",
    "bestRating": "5",
    "ratingCount": "212"
  },
  "offers": {
    "@type": "Offer",
    "price": "129.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  }
}

The 4.6 and the 212 must match what the page shows a visitor. If your review widget says 4.4 from 198 reviews, either feed the real numbers into the markup or drop the markup. For the rest of a product page's properties, see the Product schema guide.

Self-serving reviews are not eligible

Since September 2019, Google ignores review stars when a business marks up reviews about itself on its own site. Google announced the change on September 16, 2019, and the current documentation still says that if the reviewed entity controls the reviews about itself, its pages with LocalBusiness or Organization markup are ineligible for stars.

Embedding a widget does not get around it. Google's guidelines name embedded third-party widgets, such as a Google Business or Facebook reviews widget, as covered by the same rule.

So a dentist's testimonials page will not get stars, whatever the markup says. A product page on a store's site can, because the reviewed item is the Product, not the store. If you run a local business, put your effort into your LocalBusiness markup and your Google Business Profile reviews, and leave the rating out of your own schema.

Why star ratings in Google often don't show

Valid markup makes a page eligible. Google decides whether to show the stars, and its documentation says plainly that it does not guarantee any structured data feature appears. When stars are missing, check these in order.

  1. The reviews are not on the page. Google requires marked-up review content to be readily available to users from that page. A rating that exists only in JSON-LD, or behind a link to another site, breaks the rule.
  2. You copied ratings from elsewhere. Google's guidelines say not to aggregate reviews or ratings from other websites. Pulling your Trustpilot score into Product markup is exactly that.
  3. The type is ineligible or self-serving. A Service, a WebPage or your own Organization will not get stars.
  4. A required property is missing. An AggregateRating with a ratingValue but no count is the classic one.
  5. Google chose not to. Page quality, query type and how often Google shows the feature all play a part, and none of it shows up in a validator.

To see what Google itself reads from the page, run it through the Rich Results Test. For how review markup fits with the rest of your structured data, start with the schema markup guide.

Check your review markup for missing properties

Our Schema Markup Checker fetches the HTML your server sends, or takes JSON-LD you paste in, and checks every JSON-LD block against Google's rich result rules. On review markup it flags an aggregateRating with no ratingValue, or with neither ratingCount nor reviewCount, along with missing required and recommended properties for each type it knows, such as a Product Offer without a price.

It reads JSON-LD only and does not run JavaScript, so a rating injected by a review app on the client side will not appear in its results. It also cannot tell you whether Google will show the stars. A run costs 8 credits.

Keep reading