Why You Are Here
Star ratings are the most eye-catching thing that can appear in a search result. A row of orange stars under a listing draws attention in a way that no amount of title optimisation achieves, and it signals social proof before anyone has clicked.
That is why review markup is so widely implemented, and also why it is so widely implemented incorrectly. Review schema has stricter eligibility rules than almost any other structured data type, and the most common implementation on the web is one that Google specifically excluded years ago.
The first situation is a product or service page that has collected genuine customer reviews, where the markup needs to be added correctly so the ratings become eligible.
The second is a review or comparison site publishing editorial assessments of things it does not own, which is the use case review markup was designed for.
The third, and the most common, is diagnosing why star ratings are not showing. That answer is usually the self-serving rule covered below.
What This Tool Does
The Review Schema Generator builds valid Review and AggregateRating JSON-LD.
Enter the item being reviewed, the rating value and scale, the reviewer, the review text, and any aggregate figures, and the tool assembles correctly nested Schema.org markup with the script tag included. Copy it and paste it into your page.
The Self-Serving Review Rule
This is the single most violated rule in structured data, and it explains most cases of stars not appearing.
A review is self-serving when a review about entity A is placed on the website of entity A, either directly in the markup or through an embedded third-party widget. Since September 2019, review snippets are not displayed for LocalBusiness and Organization types, or any of their subtypes, when the entity being reviewed controls the reviews.
What this looks like in practice
A plumber adds a testimonials section to their homepage, collects five-star ratings through their own form, and marks it up with LocalBusiness and AggregateRating. No stars will appear. The business is reviewing itself on its own site.
Pulling your Google Business Profile reviews or Facebook reviews onto your own page through a widget does not change anything. The reviews came from third parties, but the page is still controlled by the entity being reviewed. Google names embedded widgets explicitly.
Google has stated you will not receive a manual action simply for self-serving review markup. The snippets just will not display. That is materially different from fake or undisclosed incentivised reviews, which genuinely can trigger a manual action. Two separate rules, two very different consequences.
Maintain your Google Business Profile and collect reviews there. Those appear in local results and the Knowledge Panel through a completely separate mechanism that requires no markup on your site at all.
Where Review Markup Is and Is Not Eligible
| Scenario | Eligible for stars |
|
Customer reviews of a product you sell, on the product page |
YES |
|
Editorial review of a product on a review site |
YES |
|
Reviews of other local businesses on a directory site |
YES |
|
Reviews of other organisations on a review platform |
YES |
|
Book, movie, recipe, course, or software reviews |
YES |
|
Testimonials about your business on your own site |
NO |
|
Embedded review widget about your own brand |
NO |
|
Reviews aggregated from other websites |
NO |
|
Reviews of a category or list rather than one specific item |
NO |
The self-serving restriction applies to LocalBusiness and Organization, not to Product. Customer reviews of a jumper you sell, marked up on that jumper's product page, are fully permitted. This is why ecommerce sites still show stars while service businesses often cannot.
Supported Types
Review and AggregateRating can be attached to these types, among others:
| Type | Typical Use |
|
Product |
Customer or editorial product reviews |
|
Book |
Book reviews |
|
Movie |
Film reviews |
|
Recipe |
Recipe ratings |
|
Course |
Course reviews |
|
SoftwareApplication |
App reviews |
|
Event |
Event reviews |
|
LocalBusiness |
Only when reviewing OTHER businesses |
|
Organization |
Only when reviewing OTHER organisations |
Property Reference
Review
| Property | Required | Notes |
|
itemReviewed |
Required |
The specific thing being reviewed |
|
itemReviewed.name |
Required |
Its name |
|
author |
Required |
Person or Organization |
|
reviewRating |
Required |
The rating object |
|
reviewRating.ratingValue |
Required |
The score given |
|
reviewRating.bestRating |
Recommended |
Defaults to 5 if omitted |
|
reviewRating.worstRating |
Recommended |
Defaults to 1 if omitted |
|
reviewBody |
Recommended |
The review text |
|
datePublished |
Recommended |
ISO 8601 |
|
publisher |
Recommended |
Who published the review |
AggregateRating
| Type | Required | Notes |
|
itemReviewed |
Required |
The specific thing being rated |
|
ratingValue |
Required |
The average score |
|
ratingCount or reviewCount |
Required |
At least one |
|
bestRating |
Recommended |
Defaults to 5 |
|
worstRating |
Recommended |
Defaults to 1 |
Google flags markup where the author name matches the item being reviewed. Reviews are written by people; they are not written by the thing itself.
Example — Review Nested Inside Product
The most common correct implementation nests review data inside Product rather than standing alone.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Merino Wool Crew Neck Jumper",
"image": "https://example.com/images/jumper.jpg",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"bestRating": "5",
"worstRating": "1",
"ratingCount": "214"
},
"review": [
{
"@type": "Review",
"author": { "@type": "Person", "name": "Sarah T" },
"datePublished": "2026-05-18",
"reviewRating": {
"@type": "Rating",
"ratingValue": "5",
"bestRating": "5",
"worstRating": "1"
},
"reviewBody": "Light but genuinely warm. True to size."
}
]
}
Standalone Review
For a review site assessing something it does not sell:
{
"@context": "https://schema.org",
"@type": "Review",
"itemReviewed": {
"@type": "Product",
"name": "Example Brand Merino Jumper"
},
"author": { "@type": "Person", "name": "Alex Morgan" },
"publisher": {
"@type": "Organization",
"name": "Example Review Site"
},
"datePublished": "2026-06-02",
"reviewRating": {
"@type": "Rating",
"ratingValue": "4",
"bestRating": "5",
"worstRating": "1"
},
"reviewBody": "Comfortable and well made, though sizing runs large."
}
Additional Rules Worth Knowing
Do not aggregate reviews from other websites
Pulling ratings from external review platforms and presenting them as your page's aggregate is a violation. The reviews must belong to your page.
Reviews must be visible on the page
Whatever you mark up must be immediately apparent to a visitor. If you supply an AggregateRating, the aggregate figure should be visible, not just the individual reviews.
Undisclosed incentivised reviews are a violation
Reviews written in exchange for money, discounts, vouchers, or free products must clearly and prominently disclose that. Undisclosed incentivisation falls under fake reviews, which does carry manual action risk.
Review a specific item, not a category
Markup must point at one identifiable thing. A rating attached to our range of jumpers rather than a specific jumper is not eligible.
Common Mistakes to Avoid
A testimonials section on your own homepage with LocalBusiness or Organization review markup will not produce stars, and this has been the case since 2019. It remains the most common review schema error in the wild. Embedding a third-party widget does not change the outcome, because Google's wording covers widgets explicitly. For local businesses, the Google Business Profile is the route to visible ratings, and it needs no markup on your site.
author must be the person or organisation that wrote the review. Google flags markup where the author name matches the item being reviewed, which happens when a template drops the product name into the author field by mistake. A review needs a reviewer, and the thing being reviewed cannot review itself.
Structured data must reflect what a visitor can see. An AggregateRating of 4.8 in the markup when the page displays no aggregate figure anywhere breaches the visibility requirement. If you want to mark up an average rating, show that average on the page.
Quick Reference
| Item | Detail |
|
Types |
Review, AggregateRating |
|
Rich result |
Star ratings, fully supported |
|
Self-serving reviews |
Not eligible since 2019 |
|
Applies to |
LocalBusiness, Organization and subtypes |
|
Does NOT apply to |
Product |
|
Embedded widgets |
Still self-serving |
|
Self-serving markup |
No manual action, just no stars |
|
Fake or incentivised reviews |
Manual action risk |
|
author |
A person, never the product |
|
Aggregating from other sites |
Not permitted |
|
Visibility |
Ratings must be visible on the page |
|
Employer reviews |
Use EmployerAggregateRating |
|
Local businesses |
Use Google Business Profile |
