The FAQ schema validated. The FAQ content rendered after it. Google saw a mismatch.
A software-comparison site shipped FAQ rich results on 800 pages. The JSON-LD was server-rendered and valid. The visible FAQ, though, lived in a hydrated island that fetched answers client-side. Rich results appeared, then vanished — Search Console logged them as 'valid' one week, 'content mismatch' the next.
The symptom: FAQ rich-result impressions sawtoothed, gaining and losing eligibility, never stable. CTR on those queries bounced with them.
Turns out Google cross-checks JSON-LD claims against the rendered page content. The schema declared questions and answers that, at crawl time, weren't yet in the rendered DOM — the island hadn't fetched them. Sometimes the render caught the hydrated content, sometimes not. So the schema would intermittently fail the 'must match visible content' rule and lose rich-result eligibility.
We rendered the actual FAQ answers server-side into the visible DOM, matching the JSON-LD exactly, and kept the island only for an optional 'expand' interaction.
FAQ rich results stabilized — 'valid' held flat instead of sawtoothing, eligible pages went from a fluctuating ~50% to 98% in four weeks. FAQ-driven impressions +73%, CTR up a third on those queries.
Structured data is a promise about the rendered page. If the content arrives after the crawler does, you break the promise.
Hydrate Diaries
@HydrateDiaries
The FAQ schema validated. The FAQ content rendered after it. Google saw a mismatch.
Этот пост опубликован в Telegram-канале Hydrate Diaries. Подписаться можно по ссылке: @HydrateDiaries.