Review Schema

No Comments
Review schema

Element Code: RI-012

TL;DR: Your pages display reviews, but without Review or AggregateRating structured data Google has no reliable way to read them, so you give up the star ratings that make listings stand out. Add valid review markup to eligible page types, keep it in sync with what visitors actually see, and validate it before and after every deploy.
Element code
RI-012
Category
Structured data
Rich result
Review snippet with stars
Impact
SERP visibility and CTR
Fix effort
Low to medium

What this check actually flags

This check fires when a page clearly presents review content, think star widgets, customer testimonials with scores, or an editorial verdict, while the HTML carries no Review or AggregateRating structured data. Google can read the visible text just fine. What it cannot do without markup is trust that "4.6 out of 5" is a rating, tie that number to the specific product or recipe on the page, and turn it into a review snippet with stars under your title in the results.

I run into this constantly in audits: the review system renders beautifully for humans while the structured data layer was never wired up, or a theme update quietly dropped the markup and nobody noticed because the page still looks fine in a browser. The visible reviews and the machine readable reviews are two separate systems, and this check is telling you the second one is missing.

Review, AggregateRating, or both

These two types get mixed up all the time, so let's settle it. A Review is one written evaluation: it has an author, a body, and a single reviewRating. An AggregateRating is a statistical summary: the average score across many ratings plus a count of how many people rated. They are not interchangeable, and the stars you see in search results are usually powered by the aggregate.

Both belong nested inside the thing being reviewed. You do not publish a lonely Review block floating in the page; you publish a Product, Recipe, or SoftwareApplication entity that contains a review property and an aggregateRating property. Google is explicit that review markup must describe the primary item on that page, not something mentioned in passing.

Which review markup does the page need? Page shows review content One written editorial review a verdict by a named author Many user ratings averaged into one score Both kinds on the page editorial plus user scores Use Review Use AggregateRating Nest both in the item Always nest the markup inside the reviewed item, such as Product or Recipe

Why the stars are worth the effort

Review snippets do one job: they make your result physically bigger and visually different from the plain links around it. Nobody serious will promise you a fixed CTR lift, and you should side-eye anyone quoting a universal percentage, but on commercial queries where half the results carry stars and yours does not, you look like the off-brand option.

Eligibility is limited, and this is where teams waste time. Google's review snippet documentation lists the supported content types: Book, Course, Event, Local business, Movie, Product, Recipe, and Software App. And there is a big carve-out: since Google's September 2019 review rich results update, self-serving reviews are ineligible, meaning a LocalBusiness or Organization cannot earn stars from reviews about itself hosted on its own site. If that is your situation, no amount of markup brings the stars back, and that is by design, not a bug in your implementation.

PropertyApplies toStatusNotes
itemReviewedReview, AggregateRatingRequiredThe thing being reviewed, typed as Product, Recipe, and so on; satisfied automatically when you nest
reviewRating.ratingValueReviewRequiredThe numeric score of that single review
authorReviewRequiredA Person or Organization with a real name, not a username
ratingValueAggregateRatingRequiredThe average score across all ratings
ratingCount or reviewCountAggregateRatingOne requiredHow many ratings feed the average
bestRating / worstRatingBothConditionalOnly needed when your scale is not 1 to 5
datePublishedReviewRecommendedCheap to add if your review system stores dates, so add it

How to detect missing or broken review markup

  1. Rich Results Test: paste the URL into Google's Rich Results Test and check whether "Review snippets" appears in the detected items. It also surfaces errors like a missing itemReviewed or an unparseable rating value.
  2. Search Console: the Review snippets report under Enhancements shows valid and invalid items across the whole property. A template-level failure shows up as a cliff in the valid count, which is your fastest early warning after a release.
  3. Screaming Frog: enable JSON-LD extraction plus Google rich result validation under Config, then crawl and work the Structured Data tab. Cross-reference it against pages whose visible HTML contains rating strings but report no review features; that intersection is your gap list.
  4. View source: for spot checks, search the raw HTML for application/ld+json and read what is actually in there. Tag managers and review plugins love injecting half-formed blocks that look like markup and validate as nothing.

How to fix it, step by step

  1. Confirm the page type is on the eligible list above. If you are trying to get stars on a service page or your own homepage, stop here and spend the effort elsewhere.
  2. Decide what you have: one editorial review, aggregated user ratings, or both. Most ecommerce and recipe templates want both.
  3. Generate the values from your live review database. The numbers must move when new reviews come in; a hardcoded 4.8 in a template is fiction, and it is also a guideline violation that can cost you every rich result on the site.
  4. Nest the review and aggregateRating properties inside the main entity for the page and output it as a single JSON-LD block.
  5. Validate, deploy, request indexing on a couple of representative URLs, then watch the Search Console report over the following weeks.
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Acme Standing Desk",
  "image": "https://example.com/desk.jpg",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": 4.6,
    "reviewCount": 213
  },
  "review": [{
    "@type": "Review",
    "author": {"@type": "Person", "name": "Dana K."},
    "datePublished": "2026-05-14",
    "reviewRating": {"@type": "Rating", "ratingValue": 5},
    "reviewBody": "Sturdy frame, quiet motor, easy assembly."
  }]
}

What good looks like

Every templated page with visible reviews carries markup generated from the same data source as the visible widget. The Search Console report shows valid items climbing with zero errors. The numbers in the markup match the numbers on screen to the decimal. And stars appear on a meaningful share of your eligible URLs, never all of them, because Google shows snippets when it decides the query deserves one, and that part is not yours to control.

DO

  • Mark up only reviews visitors can actually read on that page
  • Pull ratingValue and reviewCount from your live review data
  • Nest review and aggregateRating inside the reviewed item
  • Use real author names for individual reviews
  • Validate in the Rich Results Test before and after deploy
DON'T

  • Don't add review markup about your own Organization or LocalBusiness; self-serving reviews are ineligible
  • Don't invent, round up, or freeze rating numbers in a template
  • Don't mark up reviews copied from third party sites
  • Don't leave the author as "admin" or a bare username
  • Don't expect stars on every query; Google decides when to show them

FAQ

My markup validates, so where are my stars?
Valid markup makes you eligible, nothing more. Google weighs site quality, the specific query, and its own mood before showing a snippet. Give it a few weeks after indexing, confirm the URLs show as valid in Search Console, and accept that coverage is partial for everyone, including the big brands.
Review or AggregateRating: which one actually gets the stars?
In practice the aggregate does most of the work for star display, since it carries the average and the count. A single Review with a rating can also produce a snippet. If you have both kinds of content, ship both and let Google pick.
Can I mark up my Google Business Profile reviews on my site?
No. Google's guidelines expect ratings to come from your own users, collected on your own site, and review markup about your own business is self-serving and ineligible anyway. Display third party reviews for humans if you like, just leave them out of the structured data.
Do star ratings improve rankings?
Not directly. Review markup is not a ranking factor; it changes how your listing looks, not where it sits. Any traffic gain comes from people choosing your result more often, which is a real effect but an indirect one.
What rating scale should I use?
Google assumes 1 to 5 by default. If your system scores out of 10 or 100, declare bestRating and worstRating explicitly so the value is interpreted correctly, or normalize to a 5 point scale before output.

Want the whole structured data layer checked, not just this one issue?

A single missing schema type is usually a symptom. My advanced SEO audit reviews every rich result opportunity on your site, what is broken, what is missing, and what is quietly violating guidelines.

Get the Advanced SEO Audit

Claude Vincent is a technical SEO consultant focused on crawlability, rendering, and AI-search visibility. He writes the field guides and case studies at SEO ProCheck, with a bias toward the durable, unglamorous work that decides whether search engines and AI answer engines can actually read and cite a site.

About SEO ProCheck

Technical SEO consulting and GEO strategy with 20 years of enterprise experience. Case studies, resources, and tools for search and AI visibility.

Work With Me

Technical SEO audits, GEO strategy, site migrations, and international SEO. Hourly consulting for teams who need hands-on support, not just reports.

Subscribe to our newsletter!

More from our blog