Review schema markup is one of the most requested pieces of structured data and one of the most misunderstood. Plenty of sites add it, validate it, and then wait for stars that never arrive. Usually the code is fine. The problem is that the page was never eligible, or that Google decided not to show the feature for that result.
Google’s documentation describes a review snippet as “a short excerpt of a review or a rating from a review website, usually an average of the combined rating scores from many reviewers.” That definition already hints at the rules: the reviews need to be real, visible and attached to something that can be reviewed.
What review schema markup can apply to
Stars are not available for every kind of page. Google supports review snippets for a defined set of item types, including Book, Course, Event, Local Business, Movie, Product, Recipe and Software App, plus some other schema.org types listed in the documentation. A review of a general article, a service category page or a blog post about a topic does not fit that list.

This is where the first wave of disappointment comes from. A site marks up an “overall rating” on a category page or a homepage, the validator accepts the syntax, and nothing happens in search. The markup was valid; the item was never a supported thing to review. Our wider guide to schema markup covers how types and properties fit together.
Before writing any code, then, ask a plain question: what exactly is being reviewed on this page? If the answer is a specific product, book, course, recipe or app, you have something to mark up. If the answer is your company, your service in general or the page itself, stop and read the self-serving rule below before going further.
The required properties
There are two common patterns. A single Review describes one person’s assessment. An AggregateRating summarises many. Each has its own required properties according to Google’s review snippet documentation.
| Type | Required properties | Common mistake |
|---|---|---|
| Review | author, itemReviewed (or nested in the parent item), reviewRating with ratingValue | Leaving out the author or the item being reviewed |
| AggregateRating | itemReviewed, ratingValue, and ratingCount or reviewCount | Showing an average with no count behind it |

A review schema example
Here is a minimal product review schema example in JSON-LD, for a single review nested inside the product it describes:
Because the review sits inside the Product, the product is the item reviewed, so no separate itemReviewed is needed. The review itself, with its author and rating, must also be visible on the page.
Choose between the two patterns based on what the page genuinely shows. An editorial review written by one named reviewer is a Review. A product page collecting ratings from many customers is an AggregateRating, and the count you mark up should match the count readers can see. Mixing them, or inflating the count to look more credible, is a fast route to markup that is technically valid and practically ignored.
Self-serving reviews: the rule that kills most stars
This is the part most guides skip. For LocalBusiness and Organization, Google’s documentation is explicit: “If the entity that’s being reviewed controls the reviews about itself, their pages … are ineligible for star review feature.”

In practice, that rules out the most common use people want. A plumber, a law firm or an agency that collects testimonials and marks them up on its own site is marking up reviews it controls about itself. The schema can be perfect and the stars will still not appear. Testimonials still have value on those pages as persuasion for visitors who are already there; they simply are not a route to stars in search. Plugins that add a site-wide rating to every page of a business website are, for the business itself, building on this exact case.

Independent review sites are a different situation. A site that reviews products it does not make, or a directory that reviews businesses it does not own, is not reviewing itself. That is the setting the feature was designed for, and it is also the setting where Google’s product review guidelines apply to the content itself.
Content rules that apply even when the code is valid
Two lines from the documentation catch out sites that otherwise do everything right. The first: “Make sure the review content you mark up are readily available to users from the marked-up page.” Ratings that exist only in the JSON-LD, or reviews hidden behind a tab that never loads, fail this.
The second: “Don’t aggregate reviews or ratings from other websites.” Pulling a rating from a third-party platform into your own AggregateRating is not permitted. Your markup should describe reviews collected and shown on your page.

Moderation also matters. If you collect reviews from users, you need a process for spam and fake submissions, because marking up a rating you know to be inflated is the kind of thing structured data policies exist to stop. Keep the moderation honest in both directions: removing every negative review leaves an average that readers will not believe, and a rating nobody believes does little for clicks even when the stars do appear.
Why stars still don’t show, and what to do
Eligibility is not a promise. Google decides whether to display any rich result for a given query and page, and it does not explain individual decisions. Rich results also shift over time; our overview of SERP features covers how the results page changes, and our guide to FAQ schema covers a sibling markup type whose eligibility rules deserve the same careful reading.

The useful checklist is short. Confirm the item type is supported. Confirm the reviews are not self-serving. Confirm every marked-up review and rating is visible on the page. Include the required properties, then validate with Google’s Rich Results Test. If all four hold and stars still do not appear, there is little more you can do from the markup side.
That is the limitation worth stating plainly. Passing every check makes a page eligible; it cannot tell you whether Google will choose to show stars, how often, or for which queries. Treat review schema as a requirement for the feature rather than a lever that produces it, and judge its value over months of Search Console data, not from a single search.
Frequently asked questions
Does review schema guarantee star ratings?
No. It makes a page eligible. Google decides whether to show the review snippet for any given result.
Can a business mark up its own testimonials?
For LocalBusiness and Organization, Google says pages where the entity controls the reviews about itself are ineligible for the star review feature.
What does AggregateRating require?
Google lists itemReviewed, ratingValue, and either ratingCount or reviewCount.
Can I show ratings from another review platform?
Not in your markup. Google’s documentation says: “Don’t aggregate reviews or ratings from other websites.”
The takeaway Review schema markup earns eligibility, not stars. Use a supported item type, avoid self-serving reviews, mark up only what readers can see, and accept that Google still makes the final call.

