Star ratings in search results catch the eye, and many site owners add review markup hoping to get them. Review snippet schema is the structured data that describes a review or an average rating so Google can understand it. Whether Google shows stars is Google's decision, and the rules about who may mark up which reviews are stricter than most people expect.
This guide is for site owners and developers who show real customer or editorial reviews on their pages. You will learn which types are eligible, which properties are required, how to write valid JSON-LD for a single review and for an average rating, why a business cannot mark up reviews of itself, and how to test and monitor the result. It will not promise stars, and it cannot rescue markup that breaks the rules.
This is not legal advice. Laws about fake, paid or incentivised reviews differ by country. Google's guidelines are a search policy, not a statement of what the law requires where you operate.
Short answer: Review snippet schema uses Review and AggregateRating markup to describe ratings that are visible on the page, for a specific item of a supported type such as a product, book, recipe or event. A business cannot get stars for reviews it controls about itself. Valid markup makes a page eligible, but Google does not guarantee a rich result.
Before you begin
You need real reviews or ratings that visitors can read on the page you are marking up. If you have none, stop here: markup describes content, it does not replace it. You also need edit access to the page template, plus a way to test (Google's Rich Results Test) and access to Search Console for monitoring.
Decide which entity the rating is about. A review must describe a specific item, not a category or a list. Google's guideline says to provide review information about a specific item, not about a category or a list of items. A page that lists twenty products with one blended score does not qualify.
Allow an hour for a first page, longer if your platform generates the markup for you. If a plugin or app outputs it, check what it produces before adding anything, and see Add Schema Markup to WordPress for plugin conflicts. The risk is not technical: markup that misrepresents reviews can lead to a manual action.
What is a review snippet?
Google describes a review snippet as a short excerpt of a review or rating from a review website or other source, often an average of ratings from many reviewers. It may appear in rich results or in Google Knowledge Panels, typically as stars with summary information. Google adds that the actual appearance can differ from a preview in the testing tool, and it does not promise a rich result even for valid markup.
Two schema.org types do the work:
- Review describes one review of an item, with an author and a rating.
- AggregateRating describes an average based on many ratings or reviews.
Schema.org defines Review as a review of an item such as a restaurant, movie or store, and AggregateRating as an average rating based on multiple ratings or reviews.
Which types are eligible for review snippets?
Google lists these item types as supported for review snippets:
| Group | Types |
|---|---|
| Listed directly | Book, Course list, Event, Local business, Movie, Product, Recipe, Software App |
| Also supported (with subtypes) | CreativeWorkSeason, CreativeWorkSeries, Episode, Game, MediaObject, MusicPlaylist, MusicRecording |
| Organization | Only for sites that capture reviews about other organisations |
A few notes on that list:
- Local business appears in it, but the self-serving rule below limits who can use it.
- Products are also covered by product snippets and merchant listings. If you sell products, read Product Schema for Shops alongside this guide.
- A page can hold markup for a type outside the list. It just will not be eligible for a review snippet.
What are the rules against self-serving reviews?
This is the section most sites need. Google's guideline states that if the entity being reviewed controls the reviews about itself, its pages that use LocalBusiness or any other type of Organization structured data are ineligible for the star review feature. The same guideline says this applies whether the business puts reviews in its own structured data or shows them through an embedded third-party widget, with Google Business reviews and Facebook review widgets given as examples.
In practice:
- A restaurant that marks up its own customers' reviews on its own page, as a review of itself, is not eligible for stars in that way.
- A company that wraps a review widget around its home page and marks up the average rating as a rating of the company is in the same position.
- A site that independently reviews other businesses, such as a directory or comparison site, is the use the Organization and local business entries are meant for.
Google adds more rules that apply to everyone:
- Ratings must be sourced directly from users. Do not rely on human editors to create, curate or compile ratings information for local businesses.
- Do not aggregate reviews or ratings from other websites.
- Do not include fake or undisclosed incentivised reviews in the page or the markup.
- The marked-up reviews must be visible to visitors on the page.
- If you include several individual reviews, also include an aggregate rating of them.
Google's general structured data policies say that marking up content that is not visible is not allowed, and that reviews or ratings not by actual users may result in a manual action. The review snippet page warns that violations can lead to a manual action, and that once fixed you can request reconsideration. With a manual action, the markup on the affected page is ignored, though the page can still appear in results. See Google Manual Action in Search Console.
Step-by-step instructions
Step 1: Pick the one item the page is about
Name the item: one product, one book, one course. The review markup must clearly identify it, either by nesting the review inside the item's own markup or by using itemReviewed. For a product page, nesting is the usual choice. For a review article on a book, itemReviewed is clearer.
What success looks like: You can write the item name and type in one line, and it matches the visible page.
Step 2: Confirm the reviews are eligible and visible
Check each source against the rules above. Are they from real users of your site, with a rating the visitor can see? Are any reviews paid for or exchanged for discounts without being disclosed? Are you copying ratings from a third-party site? If the answer to the last two is yes, do not mark them up. If the item is your own business, the self-serving rule applies and you should not expect stars.
Google recommends providing only ratings that come with a review comment and an author name. It states this as a recommendation rather than a requirement.
What success looks like: A short note listing where the reviews come from and why they qualify.
Step 3: Write a single Review
Google requires an author (a Person or Organization with a valid name under 100 characters), the reviewed item with its name, and a reviewRating with ratingValue. Recommended extras are datePublished in ISO 8601 format, and bestRating and worstRating, which default to 5 and 1.
Here is a review on a book review page, using itemReviewed:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Review",
"itemReviewed": {
"@type": "Book",
"name": "The Example Atlas"
},
"author": {
"@type": "Person",
"name": "Alex Sample"
},
"datePublished": "2026-10-12",
"reviewRating": {
"@type": "Rating",
"ratingValue": 4,
"bestRating": 5,
"worstRating": 1
},
"reviewBody": "Clear maps and a useful index, though the text is dry."
}
</script>
Numbers default to a five-point scale. If you use another scale, set bestRating and worstRating explicitly. Write decimals with a dot, as in 4.4, not a comma.
What success looks like: The block parses and the rating, author and name match the visible review.
Step 4: Write an AggregateRating nested in the item
For an average from many users, use AggregateRating. Google requires the rated item with its name, a ratingValue (the average) and at least one of ratingCount or reviewCount. ratingCount is the total number of ratings, while reviewCount is the number of people who left a review, with or without a rating. Here it is nested in a Product, which is why itemReviewed is left out:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Example Trail Backpack",
"description": "A 30 litre daypack with a rain cover.",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.4,
"bestRating": 5,
"ratingCount": 89
},
"review": {
"@type": "Review",
"author": { "@type": "Person", "name": "Sam Example" },
"datePublished": "2026-09-30",
"reviewRating": { "@type": "Rating", "ratingValue": 5 },
"reviewBody": "Comfortable on a long hike and the rain cover works."
}
}
</script>
The numbers must match the visible page. If the page shows "4.4 from 89 ratings", the markup says the same. Never round up, and never include counts you cannot show. This example includes a review and an aggregate rating because Google's guideline asks for an aggregate when you mark up several individual reviews.
What success looks like: The values in the JSON equal the values a visitor sees.
Step 5: Place it on the correct page
Add the block to the page of the specific item, in the HTML Google receives. A script block works in the head or body. If reviews are added by JavaScript after the page loads, check the rendered page with a live test. See JavaScript SEO Rendering Basics if your reviews load late. For the format choices, see JSON-LD vs Microdata.
What success looks like: The live URL contains the block, and the block is not duplicated.
Step 6: Test and then monitor
Validate with the Rich Results Test and fix critical errors. Then check a few pages with the URL Inspection tool, making sure they are not blocked by robots.txt, noindex or a login. Submit a sitemap, and watch the Rich Results status reports in Search Console. Google notes the test cannot catch guideline violations, so review the rules separately, and a recrawl can take several days. For details, read How do I use the Rich Results Test?, Rich Results Test Errors and JSON-LD Validation.
What success looks like: The test detects the review snippet with no critical errors, and Search Console reports it without errors after crawling. Stars may or may not appear.
What the markup does not do
- It does not guarantee stars, and a rich result that appears today may not appear later.
- It does not turn a business's own testimonials into eligible reviews.
- It does not replace the visible review content. Google's policy forbids marking up content readers cannot see.
Final verification checklist
- The page is about one specific item of an eligible type.
- Every marked-up review and rating is visible on the page.
- Ratings come directly from real users, not editors or other websites.
- The business is not marking up reviews it controls about itself as stars for itself.
-
author,reviewRating.ratingValueand the item name are present. - Aggregate ratings include
ratingValueandratingCountorreviewCount, matching the page. - The Rich Results Test shows no critical errors.
- Search Console has been checked after a recrawl.
Common mistakes to avoid
- Marking up your own testimonials as a rating of your company. Fix: remove the markup, or collect reviews only where the guidelines allow.
- Numbers that differ from the page. Fix: generate the markup from the same data.
- One blended rating for a category page. Fix: mark up a single item per page.
- Copying ratings from another site. Fix: show and mark up only ratings collected by you.
- Invisible reviews in markup. Fix: show them or remove them.
- A reviewer name like "50% off until Saturday". Google says names must be valid and under 100 characters. Fix: use a real name.
- Several reviews but no aggregate. Fix: add an AggregateRating.
- Trusting a clean test as proof of eligibility. Fix: re-read the guidelines.
Frequently asked questions
Does review schema give me star ratings in Google?
It can make a page eligible, but Google does not guarantee a rich result even with valid markup.
Can I mark up reviews of my own business?
If you control the reviews about yourself, pages using LocalBusiness or other Organization markup are ineligible for the star review feature, including when you show them through an embedded third-party widget.
Can I use Google Business Profile or Facebook reviews in my markup?
Google says not to aggregate reviews or ratings from other websites, and its self-serving rule names Google Business and Facebook widgets as examples of widgets that make the entity's own pages ineligible.
Should I use Review or AggregateRating?
Use Review for one review, and AggregateRating for an average of many. When you show several reviews, include both.
Does FAQ or Product markup replace this?
No. Each has its own documentation. See FAQ Schema in 2026 and Product Schema for Shops.
Related guides
- Product Schema for Shops: Merchant Listings and Product Snippets
- Rich Results Test Errors: Fix the Most Common Problems and Warnings
- JSON-LD Validation: Test and Debug Structured Data Step by Step
- FAQ Schema in 2026: What FAQPage Markup Still Does and Does Not Do
- Local Business Schema: Mark Up Your Address, Hours and Location
- Add Schema Markup to WordPress
Official references
- https://developers.google.com/search/docs/appearance/structured-data/review-snippet
- https://developers.google.com/search/docs/appearance/structured-data/sd-policies
- https://schema.org/Review
- https://schema.org/AggregateRating
Next step: Try the free website sample to see how your own site does on a few of these checks. This guide provides technical information, not a guarantee of rankings, traffic or index inclusion.