When someone searches for a dentist, restaurant, or plumber, the listings with gold stars next to them pull the eye first. Those stars are not automatic — they come from structured data called review schema that tells Google exactly what your rating is and how many people left it. Without that markup, your page looks the same as every other blue link in the results.
This guide walks you through what review schema is, how to add it correctly to a WordPress site, and — critically — the policy lines that keep your stars earning clicks instead of triggering a manual penalty. Getting the technical side right is straightforward. Staying on the right side of Google's guidelines is where most small business sites slip up, so we will cover both in equal depth.
What review schema is and why stars appear
Schema markup is a vocabulary of code — specifically JSON-LD scripts or microdata attributes — that you embed in a web page to describe its content in machine-readable terms. Google reads that metadata alongside the visible page text. When the structured data validates correctly and the page meets Google's quality signals, the search engine may display a rich result: in the case of review markup, that means star ratings, a numerical average, and a review count right in the search snippet.
The word "may" matters. Schema is an eligibility signal, not a guarantee. Google decides in real time whether to show rich results based on page quality, structured data validity, and policy compliance. Think of the markup as raising your hand — Google still decides whether to call on you.
How stars actually show up in search
Two types of review markup can produce star ratings in organic results: AggregateRating (a summary of many reviews) and individual Review entities. Google renders the star graphic when the rating value, best rating, and review count are all present and plausible. A page that claims a 5.0 rating from two reviews on a two-week-old domain is unlikely to earn display — the numbers have to be credible in context.
AggregateRating vs individual review markup
Understanding the difference between these two schema types saves you from marking up the wrong thing and wondering why your stars never appear.
AggregateRating
AggregateRating summarises a collection of reviews or ratings into a single score. It is what Google uses to show the "4.7 (312 reviews)" format in search snippets. The required properties are:
- ratingValue — the average score, for example 4.7
- reviewCount or ratingCount — how many people contributed
- bestRating — the maximum possible score (typically 5)
- itemReviewed — the thing being rated (your business, product, or service)
This is the type most local businesses should focus on. It maps cleanly onto your Google review average or the aggregate score your plugin calculates from on-site reviews.
Individual Review
The Review type marks up a single person's opinion: their name, the rating they gave, the text of their review, and the date they wrote it. This is appropriate for testimonial or review pages where you display individual customer quotes. You can nest individual Review objects inside an AggregateRating block, or use them standalone on a page dedicated to one review.
Google's guidelines restrict which content types can use review snippets. Local businesses can use Review and AggregateRating on pages about the business itself. Products in WooCommerce can use both on product pages. What you cannot do: mark up a page as a review of your own business using first-person self-written copy — more on that below.
Adding schema on WordPress without code chaos
You have three practical routes for getting valid structured data onto a WordPress site. Which one fits depends on your comfort level and what plugins you already run.
Option 1: Use an SEO plugin with schema support
Rank Math and Yoast SEO both generate schema automatically for many page types. Rank Math in particular has a schema generator with a point-and-click interface that covers LocalBusiness, Product, and Review types. For a WooCommerce store, product review schema is often enabled by default once you activate the Product schema type in Rank Math's settings.
- In Rank Math: go to Rank Math > Schema > Schema Generator, select LocalBusiness, fill in your average rating and review count, and save.
- In Yoast: the Local SEO add-on handles LocalBusiness markup automatically; for review counts you may need a snippet of custom JSON-LD added via the page editor.
Option 2: Add JSON-LD manually to a page
If you want precise control, paste a JSON-LD block directly into your page using a Custom HTML block in the WordPress editor. A minimal AggregateRating example for a local business looks like this:
{ "@context": "https://schema.org", "@type": "LocalBusiness", "name": "Your Business Name", "aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.8", "reviewCount": "127", "bestRating": "5" } }
Update ratingValue and reviewCount each time your real numbers change. Stale numbers that do not match your visible review display are a validation signal Google notices.
Option 3: Use a schema-aware review plugin
The cleanest long-term approach is a plugin that collects, displays, and auto-generates schema from the same data set. When your review widget and your structured data pull from one source, the numbers stay in sync automatically. If you are already reading guides like How to Collect and Display Customer Reviews on Your WordPress Site, you know that a plugin handling both collection and display closes the gap that causes most schema drift.
Following Google's review snippet guidelines
Google publishes explicit documentation on what review snippets are and are not allowed on. Read it once and bookmark it. The short version for local business owners:
- Reviews must be from real customers, written voluntarily, and displayed publicly on the page where the schema lives.
- The ratings reflected in the markup must match the ratings a visitor can see on the page — no hidden scores, no inflated numbers.
- You cannot mark up a page that only shows positive reviews while suppressing negative ones. The schema must reflect the full, unfiltered data set.
- First-party self-reviews — where the business writes its own testimonials and marks them up as customer reviews — are against the guidelines.
- Reviews must not be incentivised in exchange for a positive rating. Asking all customers to leave an honest review is fine. Offering a discount in exchange for a five-star review is not.
Violating these guidelines does not just cost you the rich result — a manual action from Google's quality team can demote the page in rankings entirely. The stars are only worth having if they are clean.
Why self-serving star markup gets ignored
Google's systems have grown sophisticated at detecting markup that does not reflect genuine customer sentiment. Here are the specific patterns that cause stars to be stripped or a manual penalty to be applied.
Hardcoded perfect scores
Some themes and page builders include a star-rating field that defaults to 5.0 with a review count of 1. Owners publish pages without editing these defaults. Google sees a 5.0/5 from a single reviewer on a page where no reviews are actually displayed — a clear mismatch.
Schema that does not match the visible page
If your JSON-LD claims 4.9 stars from 200 reviews but your page only displays three testimonials, Google's crawler notices the inconsistency. Always make sure the schema numbers are derived from and visible in the on-page content.
Selectively curated review sets
Showing only five-star reviews on your site and marking up only that curated set misrepresents the actual customer sentiment. This is the technical definition of what Google calls a non-representative sample — and it is grounds for removing the rich result. Display all reviews you collect. If a review is negative, the right response is a professional reply and an effort to resolve the customer's issue — not removal from the data driving your schema.
Testing your markup with Google's tools
Before assuming your schema is working, test it. Google provides two free tools specifically for this.
Rich Results Test
Go to search.google.com/test/rich-results, paste your page URL or raw code, and run the test. The tool shows which rich result types are detected, any errors that would prevent display, and warnings worth addressing. A green "eligible" result means Google can render the stars — it does not guarantee they will appear in every search, but it clears the technical hurdle.
Google Search Console — Enhancements report
Once your site is verified in Google Search Console, the Enhancements section shows a dedicated report for Review Snippets. It surfaces URLs with errors, warnings, and valid markup at scale — useful once you have schema on multiple pages. If you see a spike in errors after a plugin update, this report pinpoints which pages broke.
Schema Markup Validator
validator.schema.org is the canonical tool from Schema.org itself. It does not check Google-specific eligibility rules, but it catches structural errors in your JSON-LD that would confuse any search engine. Run both the Rich Results Test and the Schema Markup Validator when you first deploy.
Keeping schema in sync with real reviews
The single biggest operational risk with review schema is drift — the markup says 4.8 stars from 150 reviews, but your actual average has moved and your count has grown. Search engines crawl your page periodically, and stale structured data erodes trust signals over time.
Build a sync routine
If you are maintaining schema manually, set a calendar reminder monthly to update your ratingValue and reviewCount. Pull the numbers from Google Business Profile or your on-site review plugin — whichever is the authoritative source — and update both the JSON-LD and any visible star display on the page.
Automate it with a plugin
A better approach is to let the tool that manages your on-site review data also own the schema output. When a new review is submitted and approved, the aggregate count and average update automatically, and the structured data re-renders on the next page load. No manual updates, no drift.
This is exactly the workflow covered in Add a Reviews Widget to Your WordPress Site — the widget and the schema share one data source, so they are always in agreement. If you have not set up that connection yet, it is worth doing before you go further with schema.
What to do when a negative review comes in
A lower-rated review will pull your average down slightly. That is normal and expected — and it is part of what makes your overall rating credible. Respond to the review professionally and, where possible, reach out privately to understand what went wrong and make it right. Customers reading your response often view a thoughtful reply to a three-star review as a stronger trust signal than a wall of uncontested five-star ratings.
Reviews Wall includes a private feedback channel precisely for service recovery: customers who had a poor experience can share the details with you directly so you can address the issue. That channel exists to help you improve, not to intercept or divert reviews away from Google — all customers are still invited to leave a public Google review regardless of what they say privately. This keeps your schema data, your on-site reviews, and your Google Business Profile all pulling in the same honest direction.
If you want to see how all of this fits together — schema, on-site display, and the review collection flow — the guide Where to Put Reviews on Your Website for More Trust walks through placement strategy that makes your structured data more credible, not just technically valid.
Star ratings in search results are a durable competitive edge for local businesses — but they only hold up when the markup reflects real, representative customer sentiment and the technical implementation stays current. Get the foundation right once and the benefit compounds as your review count grows.
Key takeaways
- Review schema — specifically AggregateRating — is what enables star ratings to appear in Google search snippets; the markup makes you eligible but does not guarantee display.
- Your structured data must exactly match the ratings and review count visible on the page; mismatches and stale numbers are policy violations and technical red flags.
- Google explicitly prohibits marking up a selectively curated set of reviews — schema must reflect your full, unfiltered review data, including lower-rated feedback.
- WordPress site owners can add review schema without custom code using SEO plugins like Rank Math or a dedicated review plugin that outputs schema from its own data.
- Test every implementation with Google's Rich Results Test and monitor ongoing status in Search Console's Enhancements report.
- The most resilient setup ties your on-site review display and your structured data to the same data source so numbers stay in sync automatically as new reviews arrive.
Frequently asked questions
Does review schema guarantee stars in Google search results?
No. Valid schema makes your page eligible for rich results, but Google decides in real time whether to display stars based on page quality, data credibility, and policy compliance. Think of correct markup as raising your hand — Google still decides whether to call on you.
Can I add review schema to my WordPress site without coding?
Yes. SEO plugins like Rank Math and Yoast SEO generate review and LocalBusiness schema through point-and-click interfaces. Review-specific WordPress plugins can also output schema automatically from the same data set they use to display reviews on the page.
What is the difference between AggregateRating and Review schema?
AggregateRating summarises many reviews into one average score and review count — it is what produces the '4.7 (312 reviews)' format in search snippets. The Review type marks up a single person's individual review. Local businesses most commonly use AggregateRating; individual Review markup is suited to dedicated testimonial pages.
Will showing negative reviews hurt my schema or search rankings?
No — and trying to hide them creates a bigger problem. Google's guidelines require that schema reflect the full, unfiltered review data set visible on the page. Showing only positive reviews in your markup while suppressing others is a policy violation that can remove rich results entirely. A lower average score from honest reviews is more credible than a suspiciously perfect one.
How often should I update the numbers in my review schema?
Any time your review count or average score changes. If you maintain schema manually, set a monthly audit. A better approach is a plugin that ties the structured data output to the same data driving your on-site review display, so the numbers update automatically when new reviews are approved.
What tools can I use to check whether my review schema is valid?
Use Google's Rich Results Test at search.google.com/test/rich-results to check Google-specific eligibility and errors, and the Schema Markup Validator at validator.schema.org to catch structural problems. Once your site is live, the Enhancements report in Google Search Console tracks review snippet status at scale.


