Legal

Review schema markup: when you get stars in Google (and when not)

19 August 2026 · JustReview

Review schema is the JSON-LD block that tells Google “this page has a rating, and here is the number.” It only earns you stars in search results when three things are true at once: the rating comes from real customers, those reviews are visible to a visitor on the same page, and the source is identifiable. Skip any one of the three and you get the fourth outcome, which is what most sites actually get: no stars, or a manual action if Google notices the pattern. This is also the rule we apply to our own homepage, in a way that is more restrictive than what we let our customers do on theirs, and both decisions are worth explaining honestly.

What review schema markup actually is

Two schema.org types do the work. Review marks up one specific review, tied to its author and its rating. AggregateRating marks up a rolled-up score, a value and a count, attached to whatever entity the page is about: a Product, a LocalBusiness, an Organization, or a SoftwareApplication. Google’s Rich Results Test reads the markup, checks it against the review snippet policy, and reports whether the page is eligible. Eligible is not the same as guaranteed; it is the minimum bar to be considered at all.

The part people skip is the policy behind the markup, not the markup itself. Writing valid JSON-LD takes ten minutes. Understanding what Google will and will not reward for it is the part that actually decides whether stars appear.

The rule Google will not bend: no self-serving reviews

Google’s structured data guidelines for review snippets are specific on this point: the rating has to come from actual reviews written by real users, those reviews need to be visible on the page carrying the markup, and the entity being rated has to be reasonably described by them. An organization publishing its own opinion of its own product, formatted as a rating, is explicitly what the policy calls out and disallows. The technical term Google uses is “self-serving reviews,” and the enforcement is a manual action on the structured data, not a ranking nudge.

This is why a rating with nothing behind it is the single fastest way to get flagged. A Product schema with an AggregateRating of 4.9 from “312 reviews” on a page that shows zero of those reviews is not a shortcut, it is the exact shape the policy was written to catch.

What we do on our own homepage, and why

Every page on justreview.co gets its JSON-LD from one shared template, and that template carries a rule we wrote into the code comment itself in July 2026: zero AggregateRating on our own brand. The reasoning is the same one above, applied to ourselves. A self-served rating without a publicly verifiable source is the one part of structured data that can pull a manual action, and we do not have a page where a visitor sees enough of our own third-party reviews, displayed in full, to justify claiming one. So we do not claim one. No stars for justreview.co in search results is the direct, intended result of that decision, not an oversight.

We hold ourselves to it consistently, including in places it would be easy to skip. The demo widget that runs live on every post on this blog, including this one, uses the Badge widget’s rich-snippet toggle, and that toggle is hardcoded off in the demo’s configuration. The setting exists in the product. We chose not to switch it on for our own brand, on our own site, anywhere.

What our widget does on your page, and where the honest line sits

Here is the part that only makes sense once the rule above is clear: the same toggle that we keep off for ourselves is a real feature we ship, on the Pro plan and higher, and turning it on for your own business is a legitimate use of the same schema. When the “Generate Rich Snippet Data” switch is on, our Badge widget script builds a Product schema with a nested AggregateRating, computed from the review sources you connected, and inserts it into your page as its own <script> tag.

The reason this can be compliant where a self-served number would not be: the rating is not our opinion or yours, it is a live rollup of reviews you actually imported from Google, Facebook, or whichever sources you connected, and if you also run a Testimonials or Reviews Page widget on that same page, the reviews the number is built from are the ones a visitor can read right there. That is what “visible on the page” means in practice, and it is the difference the policy actually cares about.

Two honest caveats belong in the same paragraph as the feature, not buried below it. First, the markup uses @type: "Product" with your brand name as both the name and description, on a page describing a business rather than a single product; that is a looser fit with schema.org’s own definitions than an Organization or LocalBusiness type would be, and it is worth knowing before you rely on it for a specific SKU page. Second, the visibility requirement is on you: if you enable the toggle but only place the floating Badge, with no reviews list anywhere on that page, you have recreated the exact self-serving pattern we refuse to run for ourselves, just with real review data behind the number instead of none. The schema being technically valid does not change that.

SituationEligible for starsWhy
Badge with rich-snippet toggle on, reviews list visible on the same pageUsuallyRating is sourced, count matches, reviews are readable
Badge with rich-snippet toggle on, no reviews shown anywhere on that pageNoSame shape as a self-served rating, regardless of data behind it
Rating placed on an individual product page, computed from business-wide reviewsNoRating does not describe what the page is about
Business writing its own “4.9 out of 5” claim with no review sourceNoThis is the definition of self-serving

When it actually works

Put the pieces together and eligibility is mechanical, not mysterious. Your brand name has to be set, because the markup carries it and nothing is generated without it. The rich-snippet toggle has to be on, and the code on your site has to be the regenerated version, since the old snippet keeps the old setting. The page needs an actual reviews widget on it, not only the floating badge, so the number has something visible to point at. And the rating belongs on a page that describes your business as a whole, such as a homepage or a services page, not a page about one product. Our own documentation on stars in Google results walks through the toggle itself if you want the exact steps.

Even with every box checked, Google decides per page and per query whether to render the rich result, and it can appear for weeks and then stop without your markup changing at all. That part is out of your hands and always was; the only part you control is whether the markup is honest.

Get the reviews first, then the schema

Review schema is a layer on top of reviews you have already collected and are already showing, not a substitute for either. If you have not connected your sources yet, the Google reviews widget pulls in what you have from Google, Facebook and dozens of other platforms and puts the actual reviews on the page, which is the part that has to exist before any rating markup around it means anything. From there, turning on rich snippet data on the Pro plan or higher is one toggle. You can create a free account and connect your first source today; whether stars follow is between you and Google, but the reviews on the page will be real either way, and that is the part worth getting right first. For the wider question of what you are and are not allowed to do with reviews you did not write yourself, see is it legal to embed Google reviews.

FAQ

Can I add AggregateRating schema to my homepage without showing any reviews?

No, and doing it anyway is the most common way businesses trigger a manual action on their own structured data. Google's review snippet guidelines require the reviews behind a rating to be visible to a visitor on the same page as the markup. A rating with nothing to back it up on the page is a self-serving claim, not a review snippet, whatever schema type you wrap it in.

Does JustReview's own website show star ratings in Google?

No, by design. Our JSON-LD template carries a hardcoded rule against emitting AggregateRating for our own brand, because we do not have a page where a visitor sees enough of our own third-party reviews to justify one. We would rather have no stars than a self-serving one. The badge widget we run on this blog for demos has the rich-snippet toggle explicitly turned off in code, for the same reason.

If I turn on review schema, how long until stars show up in search results?

There is no fixed number. Google has to recrawl the page, decide the markup is eligible, and then separately decide to render the rich result for a given query, which is not guaranteed even with clean data. Days to a few weeks is typical once the structured data validates. If Google's Rich Results Test already reports a valid AggregateRating, your side of the job is finished and the rest is Google's timing.

Rating summary across all connected sources

One number, aggregated from every connected source. This is our own account, live.