Add Review Schema for Star Ratings in Google Results
Add review schema for star ratings so your WordPress pages can show stars in Google results, the policy-safe way, without penalties.

Review schema is JSON-LD that tells Google a page contains genuine reviews, so the result can show star ratings. Two things almost every tutorial leaves out: valid markup makes a page eligible for stars and never guarantees them, and a business cannot earn stars by marking up reviews about itself. Google calls that self-serving, and it makes your LocalBusiness pages ineligible outright.
That single rule explains most of the “I added the markup and nothing happened” threads. This guide covers what Google actually requires, the routes that do work on a WordPress or WooCommerce site, and a troubleshooting list built from the errors owners really hit.
What is review schema markup?
Structured data is a block of machine-readable code — normally JSON-LD in the page head — that labels what is on the page. Review schema labels review content, and if the page qualifies, Google may render a review snippet: the row of stars, the numeric average, and the review count under your result.
There are two types, and mixing them up is the second most common mistake:
- Review — one person’s review of one thing. Requires
author(withauthor.name),itemReviewed(with aname), andreviewRating(withratingValue). - AggregateRating — the average across many reviews. Requires
itemReviewed(with aname),ratingValue, and at least one ofratingCountorreviewCount.
Google’s eligible content types for review snippets are limited: Book, Course list, Event, Local business, Movie, Product, Recipe, Software App, plus Organization and some creative-work types. If your page is not one of those, no amount of correct markup will produce stars.
Can a business mark up reviews about itself?
No, and this is the rule that wastes the most time. Google’s review snippet documentation states it plainly:
“If the entity that’s being reviewed controls the reviews about itself, their pages that use LocalBusiness or any other type of Organization structured data are ineligible for star review feature.”
A review about your business, published on your business’s own website, is self-serving by definition. It does not matter whether you added the markup by hand or a testimonial plugin generated it, and it does not matter that the reviews are real. The eligibility is switched off at the entity level.
Google made this change in September 2019, and the disappearance was abrupt enough that owners were still filing support threads months later — “review stars used to show in the search results for my content, but they no longer appear,” as one put it in the Search Central community. A Google Product Expert answering a similar thread was blunt: Google “will no longer display review snippets in search for local businesses like yours that mark up their own reviews as it is seen as self-serving.”
Two honest routes remain open, and both are covered below: mark up products and services that carry real customer reviews, and collect reviews on third-party platforms such as your Google Business Profile, where the stars appear in the local results rather than in your organic snippet.
The rest of Google’s rules, in one place
- Mark up only visible content. “Make sure the review content you mark up are readily available to users from the marked-up page.” If the rating is not on the page for a human to see, do not put it in the markup.
- Ratings must be sourced directly from users. No inventing them, no averaging in numbers your staff supplied.
- Do not aggregate reviews from other websites. Pulling your Google Business Profile average into your homepage schema is exactly the thing this prohibits — and it is one of the most-asked questions in the Search Central community.
- Fake or misleading review markup can trigger a manual action. Google’s spam policies say reviews “not by actual users may result in manual action.”
- Only one aggregate rating per page. Two plugins both emitting AggregateRating is a common cause of the “only one aggregate rating should be marked up” error.
- Nothing is guaranteed. Google’s own wording: it “does not guarantee that features that consume structured data will show up in search results.”
Worth knowing what a penalty looks like here, because it is quieter than owners expect. A structured data manual action “means that a page loses eligibility for appearance as a rich result; it doesn’t affect how the page ranks in Google web search.” Your rankings survive. The stars simply stop, and nobody tells you.
How to add review schema in WordPress
Option 1 — an SEO plugin, no code
Rank Math, Yoast and similar plugins ship schema builders. In Rank Math, open the post, go to the Schema tab, choose the appropriate type — Product, Course, Software Application, Recipe, and so on — and fill the rating fields. Rank Math’s own documentation makes the same point Google does: the ratings have to be shown on the front end to users, not only in the schema.
The trap with the no-code path is that it will happily let you build markup for a page that is not eligible. The plugin does not know about the self-serving rule. Choose the schema type that matches what the page really is.
Option 2 — WooCommerce product pages
This is the cleanest route for a store, because the reviews are genuinely about the product rather than about you. WooCommerce collects buyer reviews natively; a Product is eligible with one of review, aggregateRating, or offers, and the aggregate needs ratingValue plus ratingCount or reviewCount.
Two details from Google’s product documentation that catch people out: put the Product structured data in the initial HTML rather than injecting it later with JavaScript, and note that the pros-and-cons appearance is for editorial review pages only — “not merchant product pages or customer product reviews.” The step-by-step for a store is in Show Star Ratings on Your WordPress Product Pages.
Option 3 — hand-written JSON-LD
When the plugin cannot express what you need, write it. A minimal, valid aggregate for a product looks like this — with every number matching what a visitor can see on the page:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Your Product Name",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "37",
"bestRating": "5",
"worstRating": "1"
}
}
Then test it in Google’s Rich Results Test before you move on, and watch Search Console’s enhancement reports for a fortnight afterwards. Valid today is not valid forever — plugin updates change output.
Why aren’t my star ratings showing in Google?
Work through these in order. They are the real failures, taken from live support threads rather than invented.
- The page is self-serving. Reviews about your business on your own site, marked up as LocalBusiness or Organization. Ineligible, no fix — move the effort to product or service pages.
- “Missing field ‘name’ (in ‘author’).” A Review needs a named author. Some review plugins leave the author blank unless you set it on every entry; one WordPress.org user reported having to set it manually on every single review.
- “Either ratingCount or reviewCount should be specified.” An AggregateRating without a count is incomplete. This one shows up in third-party review widgets whose output you do not control.
- “Only one aggregate rating should be marked up.” Two sources are emitting it — usually your SEO plugin and a review plugin at the same time. Turn one off.
- The rating is not visible on the page. Marked up but not rendered means the markup is invalid by policy, even if the syntax passes.
- The stars used to show and vanished. Either the September 2019 self-serving change caught up with the page, or Google simply chose not to render the snippet for that query — as a Product Expert put it, rich snippets “only show when Google thinks they will help users based on the query,” so “they may not always appear.”
- It is only been a few days. Google has to recrawl. Validate, then wait.
If reviews are disappearing from your Google Business Profile rather than from your search snippet, that is a different problem — see Why Google Reviews Disappear and How to Get Them Back.
The honesty rule behind the markup
Schema is a claim you are making to a search engine about your own page, which is why it attracts more than a technical standard.
The rating you publish has to be the real one, across all the reviews you actually received. Dropping the low scores to lift the average is not an optimisation — it breaks Google’s sourcing rules, it is the sort of misrepresentation the FTC’s 16 CFR §465.2 addresses, and readers see through it anyway. A Google Product Expert answering an owner in the Search Central community put the reader’s view better than any policy document: it “seems pretty dishonest to only select 5 star reviews and then aggregate just those,” and “as a consumer, I’m inclined to steer clear of businesses with pure 5 star ratings.”
The same principle applies upstream, to how the reviews were collected in the first place. Showing the review link only to customers who rate you well is review gating — see Review Gating: Why It Breaks Google and FTC Rules — and an aggregate built on a gated sample is a misleading number no matter how valid the JSON-LD is.
Common questions
Can I pull my Google Business Profile rating into my website’s schema?
No. Google’s rules prohibit aggregating reviews or ratings from other websites, and reviews about your business on your own site are self-serving regardless of where the numbers came from. You can display your Google rating on the page for visitors — that is good for trust — you just cannot mark it up for stars.
What is the difference between Review and AggregateRating?
Review is one review by one named author. AggregateRating is the average of many, and needs a count. A page can carry both — several Review items plus one AggregateRating summarising them — but never two competing aggregates.
Do I need a plugin, or can I write it by hand?
Either works. A plugin is faster and keeps the markup in step with content changes; hand-written JSON-LD gives exact control. What matters is eligibility and honesty, not the tool.
Will star ratings improve my click-through rate?
A richer result is more visible, and that is the reason to do the work — but treat specific percentage claims with suspicion unless they come with published research behind them. Plenty of the numbers circulating on this topic have no primary source.
Is FAQ schema still worth adding?
Not for rich results. Google ended support for FAQ rich results on 7 May 2026, and removed the related Search Console reporting and Rich Results Test support. Keep the questions on the page for readers — the answers still earn their place — but do not expect the accordion in search. It is also a useful reminder that structured-data features are Google’s to withdraw.
Earn the stars rather than declaring them
The order that works: collect genuine reviews, show them on the page, mark up exactly what is visible, choose a page type that is actually eligible, test, and then wait. The order that fails is the one most tutorials teach — paste markup onto a homepage that was never eligible and wonder why nothing happened.
The prerequisite is a steady supply of real reviews, which is a collection problem rather than a markup one. How to Collect and Display Customer Reviews on Your WordPress Site covers that side, and Reviews Wall handles it as a self-hosted WordPress plugin: every customer invited to review publicly, the results displayed on your own pages, and a private channel alongside for anyone who wants to raise a problem with you directly.
Sources
- Google Search Central — Review snippet (Review, AggregateRating) structured data
- Google Search Central — General structured data guidelines and spam policies
- Google Search Central — Product structured data
- Google Search Central Blog — Making Review Rich Results More Helpful (September 2019)
- Schema.org — AggregateRating
- 16 CFR §465.2 — Fake or false consumer reviews (Cornell LII)
- Rank Math — Review schema documentation
- BrightLocal — Can local businesses use review schema?
Share with AI
Pipe this article straight into ChatGPT.