Illustration: en pakke med to lag indpakning kører gennem en maskine, der kun fjerner det ene lag, mens et forstørrelsesglas viser et flueben.

Kort fortalt

Google ændrede den 21. august 2026 sin JSON-LD-udtrækning, så Googlebot nu kun kører ét gennemløb af HTML-unescaping. Dobbelt-escapede entiteter som & og ✔ bliver ikke længere rullet helt ud, og værdien ender som synlig tekst i stedet for tegnet. Gary Illyes henviste samtidig til RFC 8259, afsnit 7: JSON har sine egne escapes, og \u0026 er den rigtige form. Rich Results Test består stadig siden, fordi den kontrollerer struktur og ikke tegnindhold — så fejlen udløser ingen advarsel noget sted. Ramte felter er typisk produktnavne, overskrifter og brødkrumme-labels med ampersand eller danske tegn, og skaden kommer fra to lag skabelon, ikke fra en tastefejl.

Dine strukturerede data er ikke gået i stykker — Googles læser af dem er blevet strengere, og den fejl, den nu efterlader, kan ingen af de gængse tjek se. Fra 21. august 2026 unescaper Googlebot kun ét lag HTML i JSON-LD. Var din værdi escapet to gange, får Google nu Møller & Sønner, hvor den før fik Møller & Sønner. Markuppen er stadig gyldig; det er indholdet i den, der er forkert.

Hvad Google konkret ændrede

Den 21. august 2026 meldte Google ud, at de har bragt deres JSON-LD-parser i overensstemmelse med JSON-standarderne og nu kun anvender ét enkelt gennemløb af HTML-unescaping ved udtrækningen. Gary Illyes henviste samtidig til RFC 8259, afsnit 7 — stedet hvor JSON definerer sine egne escapes. Meldingen er refereret hos Search Engine Roundtable og Search Engine Watch.

Regnestykket er kort. En værdi, der står som &, bliver stadig til &: ét lag, ét gennemløb. En værdi, der står som &, blev tidligere rullet helt ud til &. Nu stopper Googlebot efter første lag og lander på & — fem tegn tekst, hvor der skulle stå ét.

Det underliggende problem er ældre end ændringen. Indholdet i et <script type="application/ld+json">-element er efter HTML-specifikationen rå tekst: HTML-parseren afkoder ikke entiteter derinde. HTML-escaping har altså aldrig hørt hjemme i JSON-LD. Google kompenserede for det alligevel. Fra 21. august kompenserer den præcis én gang.

Sådan opstår dobbelt-escaping

Næsten aldrig som en tastefejl. Det sker, når to lag i kæden hver især gør det rigtige uden at vide, at det andet lag også gjorde det: CMS'et gemmer feltet HTML-escapet, fordi den samme værdi også skal kunne stå i brødteksten, og skabelonen escaper så en gang til på vej ud i ld+json-blokken. Ingen af de to lag er forkerte alene.

Escaping-kæden fra CMS-felt til den værdi Googlebot læser Værdien Møller og Sønner gemmes HTML-escapet i CMS'et og escapes igen af skabelonen. Før 21. august 2026 rullede Googlebot begge lag ud; efter ændringen står ampersand-entiteten tilbage som synlig tekst. Nederst vises den korrekte løsning med JSON-escapes. 1 · Værdien, som redaktøren skrev den Møller & Sønner 2 · CMS'et gemmer feltet HTML-escapet Møller &amp; Sønner 3 · Skabelonen escaper igen ved output i ld+json Møller &amp;amp; Sønner Før 21. august 2026 · flere gennemløb Møller & Sønner Google ryddede op efter skabelonen Efter · ét gennemløb Møller &amp; Sønner entiteten står nu som synlig tekst Rigtigt: JSON-escape i stedet for HTML-escape "name": "M\u00f8ller \u0026 S\u00f8nner" Googlebot læser: Møller & Sønner
Escaping-kæden. Trin 2 og 3 er hver for sig rimelige; det er summen, der rammer efter 21. august 2026.

Danske sider har rigeligt at falde over: ampersand i firmanavne, gradtegn i produktspecifikationer, flueben i featurelister, og æ, ø og å fra ældre eksportfiltre, der stadig skriver &aelig; i stedet for tegnet. Det er præcis de felter, der ryger i en produktoverskrift eller en brødkrumme.

Derfor siger validatoren stadig god for det

Rich Results Test og rapporterne i Search Console kontrollerer struktur: er de påkrævede felter til stede, har de den rigtige type, peger referencerne rigtigt. En streng med teksten Møller &amp; Sønner er en fuldstændig gyldig streng. Der er ikke noget at flage.

Det er kernen i hele sagen, og det er også grunden til, at den her fejltype kan stå i månedsvis. Hele QA-praksissen omkring schema markup hviler på bestået eller ikke bestået. Men et validt skema er ikke det samme som et rigtigt skema. Den eneste brugbare aflæsning er de parsede værdier, som Rich Results Test viser længere nede på siden — og dem er der stort set ingen, der ruller ned til, når feltet øverst er grønt.

Timingen hjalp ikke. Ændringen landede i samme uge, som Googles spam-opdatering fra august 2026 var færdig med at rulle ud (18.-21. august). Alt, hvad der rykkede sig i den uge, havde en oplagt forklaring, og den hed ikke escaping.

Tjek det i denne rækkefølge

  1. Hent den renderede HTML for de 20-30 sider, der betyder mest kommercielt, og søg inde i ld+json-blokkene efter &amp;amp;, &amp;# og &amp;quot;. Et hit er en dobbelt-escapet værdi. En crawl-eksport med rå HTML dur lige så godt som en scriptet gennemgang.
  2. Kør de sider gennem Rich Results Test og læs værdierne, ikke statussen. Står entiteten stadig som tekst i det parsede output, er det bekræftet.
  3. Find laget. Følg værdien fra databasefeltet gennem serialiseringen til skabelonen. Escaper begge, er det næsten altid skabelonen, der skal holde op — den værdi skal ud i et JSON-dokument, ikke i HTML.
  4. Lad JSON-serialiseringen om escapingen. Den håndterer selv anførselstegn, backslash og styretegn. Skal et tegn escapes eksplicit, er \u0026-formen den, RFC 8259 beskriver — ikke en HTML-entitet.
  5. Prioritér efter, hvad der bliver vist. Produktnavne og priser, artikeloverskrifter, brødkrumme-labels og forfatternavne står i resultatet. Et forkert tegn i en intern reference koster ingenting; et forkert tegn i et produktnavn står i søgeresultatet.

På et almindeligt site er det en formiddags arbejde, og resultatet er binært: enten er der entiteter i de parsede værdier, eller også er der ikke. Det er sjældent, at et teknisk tjek er så billigt at afvise.

Fejlen ligger nu på den anden side af kablet

Tre gange på en måned har Google ændret noget hos sig selv, uden at en eneste byte på dine sider har flyttet sig: crawlerne begyndte at sende PUT og DELETE (bekræftet 7. august), resultatlinkene fik et redirect ind foran sig (26. august), og parseren holdt op med at rydde op efter dine skabeloner (21. august).

Overvågningen på de fleste sites peger indad: oppetid, fejllog, Core Web Vitals, indekseringsstatus. Ingen af delene ser noget af det her. Det eneste, der gør, er vanen med at læse, hvad Google faktisk har trukket ud af siden — i stedet for at nøjes med, at den bestod.