Structured data that says what the page does not
Structured data is a set of claims about a page, made in a language only machines read. When those claims stop matching what the page shows, the risk is not a missing star rating — it is a manual action that can remove every rich result for the whole site.
Why it happens to careful people
Nobody adds markup in order to lie. A plugin offers to handle structured data, it fills in what it can find, and from then on the markup and the page are two separate things maintained by two separate processes. One of them gets updated.
This product's own marketing site did it: the JSON-LD advertised a price, with the item marked in stock, while the thing was free and had no checkout at all. Every page looked perfectly correct. The markup was the only place the claim existed, and nothing renders it.
The two shapes it takes
A rating with nothing to rate. An aggregate rating in the markup and no review content anywhere on the page. This is the classic policy breach, and the one most likely to be treated as deliberate, because a score with no reviews behind it is what a fabricated rating looks like.
A price the page does not show. Far more common, and usually accidental: the price changes in the database and the JSON-LD keeps the old one. The rich result then advertises a number you will not honour. The visitor arrives expecting it, and nobody finds out until somebody complains — because the page itself is right.
What an audit can and cannot tell you
A check like this compares the page against its own markup. It can say the two disagree. It cannot say which one is correct, and a good one will not pretend to: a shop showing the same wrong price in the page and the markup agrees with itself and passes, as it should. No crawler knows what you meant to charge.
It is also worth knowing where the rating rule legitimately does not apply. An app's store rating declared on software markup is documented and allowed — the number belongs to the app, not to a review widget the page forgot to draw. A check that fired on that would be wrong, and a tool that tells you to delete correct markup costs more than it saves.
The wrong fixes
Hiding the visible element so it matches. If the page shows a price and the markup shows another, the answer is not to remove the price from the page. That leaves the claim standing with even less to support it.
Deleting the markup instead of correcting it. Tempting, and it does end the mismatch. It also ends the rich result you were entitled to. Fix the number.
Marking up reviews collected somewhere else. Ratings from a third-party profile are not review content on your page. If you want them represented, put them on the page where a person can read them, then mark up what is there.
Checking yours
curl -s https://example.com/product/ | grep -o '"price":"[^"]*"'
Then look at the page and compare. Do it on a product whose price changed recently — that is where the two copies separate — and on anything carrying a rating, where the question is simply whether a reader can see any reviews at all.
Common questions
Can mismatched structured data get my site penalised?
Google's policy requires markup to represent visible page content, and a breach risks a manual action rather than only the loss of a rich result. That is the part people underestimate: the downside is not missing stars, it is every rich result for the site.
Why do prices in JSON-LD go stale?
Because the markup and the page are maintained by two different processes. The price changes in the database, the page updates, and the JSON-LD keeps the old number. Nobody notices, because the page itself looks correct.
Can an audit tell me which one is right?
No, and it should not claim to. It can only say the page and its markup disagree. A shop showing the same wrong price in both places agrees with itself and passes — no crawler knows what you meant to charge.
Is an app store rating in my markup a violation?
Not when it is declared on software markup. That rating belongs to the app and is documented as allowed. It is not a review widget the page forgot to render.
Should I delete markup that does not match?
Correct it instead. Deleting ends the mismatch and also ends the rich result you were entitled to. Hiding the visible price so it matches is worse again — the claim then has even less supporting it.