Google Search Central has confirmed its JSON-LD extraction now applies only a single pass of HTML unescaping. Double-escaped entities will no longer be unrolled, and that can quietly invalidate your structured data.
This is a small change with a disproportionate blast radius, and it will hit templated sites hardest — exactly the sites that rely most on structured data.
What changed
Previously, Google’s extraction was forgiving about double-escaped HTML entities inside JSON-LD blocks. If your CMS escaped an ampersand once and your template escaped it again, the parser would generally still unroll it and read valid JSON. It now applies a single unescaping pass. Anything escaped twice stays broken.
Why this happens so often
Almost every case we see comes from the same pattern: a template engine that auto-escapes output, wrapped around content that a CMS has already escaped on save. Nobody wrote the bug — it emerges from two safe defaults meeting each other.
- Product names containing an ampersand, typically a brand name.
- Article headlines with typographic quotation marks.
- FAQ answers with any inline HTML at all.
- Author or organisation names carrying accented characters.
How to check
Fetch the rendered HTML of a representative page from each template and search for double-escaped sequences inside your JSON-LD block. Then validate every template type — not one page per site, one page per template. The failure is template-level, so a single broken template can invalidate thousands of URLs while your homepage tests clean.
The Rich Results Test reports the parse failure, but only for the exact URL you submit. Search Console’s enhancement reports will show the drop-off in aggregate, usually a week or two after the damage is done.
How to fix it properly
Do not patch the symptom by hand-editing content. Build the JSON-LD object in code and serialise it with your language’s JSON encoder, then output it raw into the script tag with template auto-escaping explicitly disabled for that block. One escaping layer, applied deliberately.
Then add a validation step to CI. A structured-data test that runs on every deploy costs an afternoon to build and catches this class of error permanently. Structured data breaks silently, which is precisely why it needs an automated check rather than a quarterly audit.