Why Your Star Ratings Disappeared from Google (And How to Get Them Back)

A review snippet that has been rendering for months stops rendering. There is no notification, no failed build, no error in any log you own. The page looks identical to the one that had stars last week.
The reflex is to paste the URL into the Rich Results Test, see "1 valid item detected", and conclude that Google broke something. Sometimes that is right. More often the markup is fine and something around it moved, and the fastest route back is figuring out which of six things it was before touching any JSON.
We crawled 985 reachable SaaS and indie-software homepages in July 2026 and validated every structured data block; the dataset is published at /research/saas-review-schema-2026. Only 111 of those sites (11.3%) exposed an AggregateRating at all, and exactly one of the 111 validated with zero errors and zero warnings. Star ratings are a fragile thing to depend on, which is worth knowing before you spend a week chasing yours. The wider map of which structured data is worth shipping lives in our structured data guide.

First, confirm the stars are actually gone
Searching your own brand and looking at the result is the least reliable test available. Rich results are decided per query and per device, results are personalized, and Google renders a review snippet for one query while withholding it for a near-identical one. Two colleagues can honestly disagree about whether the stars are there.
The record that settles it is Search Console. Open the Performance report, add a Search appearance filter, and select Review snippet. If your site has ever earned the feature, that filter exists and gives you a daily impression curve for it. Set the range to three months and find the day the curve fell.
That date is the single most valuable output of the whole exercise. With it you can diff your deploy history, your CMS update log, and your third-party script changes against one day instead of guessing across a quarter. Without it you are debugging blind.
Two supporting checks. The Review snippets enhancement report shows valid and invalid item counts over time, so a flip from valid to invalid tells you Google is still finding the markup and now objects to it. And the Rich Results Test tells you about today's eligibility on one URL, with no history and several blind spots; our Rich Results Test walkthrough covers what it does and does not report.
The six reasons stars disappear
Ranked roughly by how often I see each one on a site that used to have snippets and lost them.
| Cause | What Search Console shows | Fastest confirmation | Typical fix |
|---|---|---|---|
| Markup stopped shipping | Valid items and review-snippet impressions fall together, within days of a deploy | Fetch the page and search the HTML for aggregateRating | Restore the block; minutes |
| Canonical or URL changed | Valid items drop on one URL, sometimes appearing on another | URL Inspection: check the Google-selected canonical | Point the canonical at the page carrying the markup; days |
| Rating values went invalid | Items flip from valid to invalid with a named error | Rich Results Test or our JSON-LD validator on the live URL | Fix the property types and ranges; hours |
| Content parity broke | Nothing. Reports stay green | Load the page with JavaScript disabled and look for the reviews a visitor should see | Render reviews server-side; days |
| Self-serving eligibility caught up | Nothing. Items stay valid and the stars never come back | Ask who wrote the reviews and which node the rating hangs on | Structural; weeks |
| Google pulled the feature | The appearance drops sitewide on one day, across every URL | Check whether competitors lost theirs the same day | Nothing to fix |

The split that matters is the right-hand half of that table. Three of the six announce themselves in Search Console. The other three are silent, and teams routinely spend weeks re-validating markup that was never the problem.
Markup that quietly stopped shipping
This is the most common cause by a wide margin, and it is almost never deliberate. A theme update replaces a template. A component refactor drops a script tag nobody claimed ownership of. A review widget vendor changes what it injects. A tightened Content Security Policy blocks the script that used to write the block. None of these break a page visually, so nothing catches them.
Client-side injection is where this gets worse. Googlebot does render JavaScript, but rendering is a second pass with its own queue and its own failure modes. If your rating JSON-LD only exists after a third-party script executes, then a script that 404s, gets blocked by CSP, sits behind a consent banner, or simply times out during that render means the markup did not exist for that crawl. Server-rendered markup has none of those failure paths. In our crawl, 8 sites shipped a JSON-LD block that failed to parse at all, losing 10 blocks between them, which is the flavour of breakage a templating change introduces on one route while the page you happen to test stays fine.

Confirming it takes one command. Fetch the URL as an anonymous client, without your browser extensions and without a session, and search the returned HTML for aggregateRating. If it is absent from the source but visible in your browser's inspector, your markup is client-side and you have found both the cause and the fix. If it is absent from both, look at what shipped on the date you pulled out of the Performance report.
When the rating is still there and Google stopped trusting it
Here the markup validates, the enhancement report stays green, and the stars are gone anyway. Two mechanisms account for most of it.
Content parity. Google's structured data guidelines require that you do not mark up content that is invisible to the reader of the page. A rating survives in the JSON-LD long after the widget rendering the reviews stopped loading, and the page then advertises a 4.8 average to Googlebot while showing a visitor nothing. In our crawl, 82 of the 111 sites carrying AggregateRating published an average score with no Review markup anywhere on the page. That is not automatically a violation, but it is the shape a violation takes, and violations can draw a manual action that strips rich result eligibility independently of ranking. The Manual Actions report in Search Console is worth checking early precisely because it is the one silent cause that does leave a record.
The self-serving rule. Google treats pages as ineligible for the star review feature when the entity being reviewed controls the reviews about itself, which covers Organization and LocalBusiness types and the reviews delivered through an embedded widget on your own marketing site. 103 of the 111 rating sites in our crawl also emitted Organization on the same page. Enforcement of an eligibility rule is not a build event: it lands when Google re-evaluates the page, which is why "we changed nothing" and "the stars are gone" are both true statements at the same time. The full argument for which setups qualify is in how to get star ratings in Google results.
A third, smaller version of this: the rating is attached to a node Google will not carry the feature on. Of the 208 sites emitting SoftwareApplication in our crawl, only 83 attached an AggregateRating to it. Ratings that float in their own block, connected to no item, validate fine and earn nothing.
When nothing is wrong with your markup
Google removes rich result types. FAQ rich results stopped appearing in Google Search on May 7, 2026, support was dropped from the Rich Results Test in June 2026, and Search Console API support ended in August 2026, all with correct markup still sitting on millions of pages. Review snippets have not been removed, but the precedent is worth holding: a feature disappearing sitewide, on a single day, across every URL, with no deploy behind it, is a Google-side change and no amount of schema work will reverse it.
The tell is simple. Search four or five queries where you used to see stars and look at whether anyone in the result set still has them. If the whole SERP lost the feature, close the ticket and go do something else. If your competitors kept theirs, you are back in the six-row table above.
Google also decides per query whether to render the snippet at all, so partial loss across some queries and not others is normal behaviour rather than a defect. Judge from the Search Console curve, which aggregates, rather than from four spot checks.
Getting them back, and how long it takes

- Date the loss in the Performance report using the Review snippet appearance filter.
- Diff against that date. Deploys, CMS and plugin updates, CSP changes, widget vendor releases. One of them usually stands out.
- Restore the markup server-side, not through an injector. Anything that has to execute to exist can fail to exist.
- Validate the live URL, not a pasted snippet. Our JSON-LD validator checks a block against Google's requirements before you ship it; the Rich Results Test checks the rendered page after.
- Request indexing on the single most important URL of the affected template. This does not fix eligibility, it only shortens the wait.
- Watch the enhancement report, not the SERP. Valid item counts recover before snippets reappear.
On timing, be patient in a specific way. Recrawl runs from hours for a frequently updated homepage to weeks for a deep page, and the rich result is recomputed at index time rather than at crawl time, so there is a second lag after that. I would not draw conclusions from fewer than two full crawl cycles. If valid items came back and stars did not after a month, the cause was eligibility rather than markup, and you are in the structural bucket.
Which is the uncomfortable ending for a lot of sites. If the stars went away because the reviews are yours, about you, on your own domain, then fixing the JSON-LD changes nothing. The rating has to hang on something a reader can verify was not written by you. That means reviews collected from identified users and published somewhere with its own record of them. We build one of those, so weigh this accordingly: TheWebRatings verifies each reviewer by email before the review counts, publishes the reviews on a public profile page with the rating attached to a SoftwareApplication node, and is free for one website with Pro at $19/mo. Any platform with genuine third-party verification solves the same structural problem; a widget that replays your own testimonials does not, whatever its markup looks like.
Frequently asked questions
Plan for two full crawl cycles before judging. Google has to recrawl the page and then recompute rich result eligibility at index time, so a frequently crawled homepage might recover in days while a deep page can take several weeks. Requesting indexing in Search Console shortens the crawl half of that wait but does nothing for eligibility. Watch valid item counts in the Review snippets enhancement report, because those recover before the snippets themselves reappear in search.
The two usual answers are that something changed without your noticing, or that Google re-evaluated a rule you were always on the wrong side of. Theme updates, plugin updates, Content Security Policy changes, and third-party widget releases all remove markup without breaking a page visually. Eligibility enforcement is the other case: when the rule is that the reviewed entity cannot control the reviews, the loss lands whenever Google reassesses the page, with no change on your side at all.
Only for part of the problem. It reports whether the markup on the live URL is present and whether required properties are there, which covers the causes that are markup bugs. It does not evaluate the self-serving review rule, does not compare your markup against what a visitor can see on the page, and has no history, so it cannot tell you when the loss happened. Use Search Console for the timeline and the test for the current state.
Yes. Structured data that describes content invisible to readers, or that misrepresents the page, can draw a manual action for structured data issues, and that strips rich result eligibility separately from any ranking effect. It appears in the Manual Actions report in Search Console, which makes it one of the few silent causes that leaves a record. Check that report early in any investigation, because finding it there saves you from debugging markup that was valid the whole time.
Reviews that the reviewed entity controls, on that entity's own site, do not qualify for the review snippet feature under Google's guidance, and that covers Organization and LocalBusiness pages along with testimonial widgets embedded on your marketing site. The distinction Google cares about is whether the reviews come from independent people rather than from the vendor. Collecting reviews through a platform that verifies each reviewer and publishes them on its own domain is the structural answer, and it is the reason a valid AggregateRating on a homepage often earns nothing.
Not necessarily, because structured data is read by more than Google's snippet renderer. AI assistants and answer engines parse the same JSON-LD when summarising a product, so accurate markup keeps earning its place even when no star appears in search. Remove it only if the numbers it declares are wrong or unsupported by anything on the page, since inaccurate markup is a liability and a correct one that goes unrendered is only a missed opportunity.