Within one month in 2026, I found the same defect on the money pages of two different clients - inverted, like a photograph and its negative.
Client one, a healthcare SaaS: the visible pricing page adjusts prices per country by script, so a visitor in the US sees the correct $23.99. But the structured data underneath - the JSON-LD block that machines parse - hardcodes a placeholder of 18.99 USD that matches no real price in any market, and serves it identically to every locale.
Client two, a UK employee wellbeing platform: the visible pricing page had just started publishing real prices - £8,000, £12,000, £30,000 tiers, £2,500 onboarding. But the structured data underneath still described the old commercial model: "pricing on request," quote-based, with empty price fields carrying a currency code and no number.
Two companies, opposite defects, identical root cause: the pricing model changed, and nobody told the schema.
§ Why the invisible layer drifts
Structured data is the metadata layer that describes your page to machines in machine language - and on both of these sites it had been implemented correctly, once, by someone who cared. That is the trap. Schema is not code that breaks noisily. It is prose in a language nobody on the team reads, sitting in a layer no browser renders and no QA checklist covers.
So when the business changes - a price rises, a quote-gate drops, geo-pricing ships - the visible page gets updated, because humans review visible pages. The schema keeps saying whatever it said the day it was written. Nothing fails. No dashboard flags it. The two layers of the same page quietly begin telling different stories, and every machine that reads both is left to decide which of you to believe.
On the healthcare client, that decision was already observable: engines quoting the company's prices used support articles and third-party marketplaces, and not one quoted the schema's phantom 18.99. The structured data on the single most commercially important page had lost the machines' trust so completely they routed around it.
§ Why this matters more on the money page than anywhere else
A stale author tag misleads nobody about anything that matters. A stale price is different in kind.
The pricing page is the page AI engines are most likely to be asked about, because "what does X cost" is one of the questions buyers most reliably put to a machine. On the wellbeing client, ChatGPT was quoting the visible page's new prices accurately in 3 of 3 test runs - while the structured layer of the very page it was quoting still claimed pricing was quote-only. The site was, in the most literal machine-readable sense, contradicting itself on its most-cited commercial fact.
Contradictions on high-stakes pages are worse than gaps, because a machine that catches your page disagreeing with itself has learned something about your site as a whole: the self-descriptions here are not maintained. That discount applies everywhere, not just to the field that drifted.
§ The fix is small. The habit is the fix.
On both engagements the correction was minutes of work: put the real published values into the existing price fields, delete the quote-based wording, keep visible and structured layers saying the same thing. The schema structures were already built and valid - they were just describing last year's business.
The durable fix is a habit, not a patch: schema-vs-visible parity on the money page becomes a standing check, run on every audit and after every pricing change. I now check price parity between the two layers on every engagement's money page as a standard step, because two clients in one month is not a coincidence - it is a pattern. Pricing models change often, schema authors move on, and the drift mechanism is universal to every site that ever implemented structured data and then kept doing business.
§ How to check your own money page in five minutes
- Open your pricing page, view source, and find the structured-data blocks. Read every price-bearing field: offers, price, priceSpecification, priceCurrency.
- Compare each value against what the page visibly shows. Not roughly - exactly. Currency, amount, model (subscription vs quote vs one-time).
- If your visible prices are localized or injected by script, check what the schema serves to other locales too. A price that is correct in one country and fiction in ten is the first client's defect.
- If you have moved from quote-based to published prices (or the reverse), assume the schema still describes the old model until you have read it. That is the second client's defect.
- Add "update the JSON-LD" as a named line item in whatever process changes prices. The drift happens because no process owns the invisible layer; give it an owner.
Findings dated as of July and August 2026, verified by direct fetches of both source and rendered HTML on both sites; the clients are anonymized as a matter of confidentiality.
The pattern deserves a name, so I call it pricing-schema drift: the structured data on a money page describes the commercial model at the time of implementation, not the current one. Your page has two layers, and buyers' machines read the one your team never looks at. Go read it today - it is telling strangers your prices, and it may be wrong.