Google Stops Auto-Correcting Double-Escaped JSON-LD
Googlebot has stopped tidying up badly escaped structured data. Escaping means writing a character in a substitute form so it does not break the code around it: in HTML an ampersand is written &. In a LinkedIn post on 21 August 2026 Google said it is “now only applying a single pass” of HTML unescaping when reading JSON-LD, to bring its parser in line with the JSON standard. Gary Illyes pointed to RFC 8259, which defines JSON string escaping.
Escaping twice is something a template or CMS does by accident, when it escapes a value that was already escaped upstream. & is correct in page text but not inside a <script> block, which is not parsed as HTML. That markup used to come out right, because Googlebot kept decoding until it ran out of layers. Google’s own two examples were an ampersand and a tick mark:
Your markup "Bodger &amp; Badger"
Google, before Bodger & Badger
Google, now Bodger & Badger
Your markup "In stock &#10004;"
Google, before In stock ✔
Google, now In stock ✔
Nothing on your side changed, and nothing fails visibly: a property that used to populate a rich result can simply stop doing so.
One layer of escaping still decodes, though, so a single & is not what broke. These still reach Google as intended:
"Bodger & Badger" → Bodger & Badger
"In stock ✔" → In stock ✔
Neither is standard JSON. Both work only because Google decodes them for you, and that leniency is what is being reduced, so they are worth moving off.
Run a few templated pages through the Rich Results Test and check the extracted values read the way they should. Where they do not, the fix is upstream: find the step in your template that escapes an already-escaped value and remove it. Google’s instruction is to “update your code to standard JSON escapes or Unicode hexadecimal escapes (like \u0026)”, which means:
"Bodger & Badger" plain character, no escape needed
"Bodger \u0026 Badger" Unicode escape, same value
"In stock ✔" plain character, no escape needed
"In stock \u2714" Unicode escape, same value
The two numbers differ because HTML’s ✔ is decimal and a JSON escape hexadecimal; both are U+2714. Sites already emitting standards-compliant JSON-LD have nothing to do here.
Sources
More news
-
Google Tests Paying Publishers Through an AI Contribution Pilot
Google is running an invite-only Search Console pilot that pays some publishers when their content shapes an AI Overview, AI Mode or Gemini answer.
-
Scammers Are Using AI-Generated Photos To Redirect Calls From Google Maps Listings
Scammers are using AI-generated photos to hijack Google Maps listings, and the same fabrication technique is already defrauding delivery platforms.
-
Google Business Profile Post View Counts Return
Google is rolling out view counts on Business Profile posts, returning a per-post metric it retired in 2023, for updates, offers and events.