Web & SEO
Hvis I søger efter JSON-LD website, eller efter structured data fejl, står I typisk ét sted: nogen har sat et schema-plugin på, eller limet et script i layoutet, og Search Console eller et test-værktøj viser advarsler — eller viser ingenting, fordi Google har valgt at ignorere jer. FAQPage på en side uden spørgsmål. Review med fem stjerner, I selv skrev. LocalBusiness på et bureau, der sælger nationalt. Organization uden navn, der matcher footer. Relancér-indlægget er cutover og 301. Performance-indlægget er LCP. Den her er sandheden i scriptet. Markup, der ikke kan peges på i HTML'en, er ikke structured data. Det er et håb, I kalder rich results.
JSON-LD er et løfte: det her er hvad siden er, i et sprog en maskine kan parse. Løftet holder, når et menneske kan læse den samme sætning på siden. Det rådner, når I beskriver et produkt, I ikke viser, en FAQ I foldede væk, eller en adresse I ikke vil stå ved som butik. Google har sagt det i årevis: markup skal afspejle synligt indhold. Alligevel er vanen at installere et plugin, tænde alle typer, og kalde det SEO. I har ikke fået rich results. I har fået et script, en quality-rater kan bruge imod jer.
TL;DR
De vigtigste pointer
- JSON-LD er sandheden om siden, i et parsebart sprog. Hvis sætningen ikke er synlig, så slet scriptet.
- FAQPage kræver synlige spørgsmål. Review kræver rigtige anmeldelser. LocalBusiness kræver at I er et lokalt sted.
- Organization, WebSite, Service, Article, BreadcrumbList — vælg det, siden faktisk er. Ikke hele kataloget.
- Et plugin der tænder alle typer, er hvordan I får advarsler og ignoreret markup. Færre, ærlige noder slår et dump.
- Test med Rich Results og med øjet: kan I pege på feltet i HTML'en? Hvis nej, er det ikke data. Det er pynt.
- Performance-indlægget er LCP. Relancér er 301. Den her er at nægte at lade schema sige noget, siden ikke siger.
Hvorfor det her overhovedet er vigtigt
Structured data er et løfte til to parter: crawlen, der gerne vil forstå siden uden at gætte, og den quality-rater (menneske eller system), der tjekker om I snyder. Løftet holder, når FAQ-markup matcher de spørgsmål, I faktisk viser, når Article har den forfatter og dato, siden viser, når Organization har det navn og CVR, footeren har. Det rådner, når I håber på stjerner, FAQ-udtræk eller et knowledge panel ved at beskrive noget, brugeren ikke kan se.
Teams gør det, fordi et plugin eller et bureau-slide sagde 'tænd schema, så får I rich results'. Det første test-værktøj bliver grønt. Det bliver vanen. Tre måneder senere har forsiden LocalBusiness, Product, FAQPage og Review i ét script, og ingen af delene står som indhold. Google viser ikke stjernerne. Engang imellem viser Search Console 'either/or' eller 'non-critical issues'. I retter en advarsel. I rører ikke sandheden.
Skaden er ikke kun manglende rich results. Markup, der overdriver, er et signal I har bedt om at blive behandlet som det. Et Review I selv skrev. Et AggregateRating uden kilder. En FAQ, der kun eksisterer i JSON. En pris I puttede i Product, I ikke viser — og som vi i øvrigt ikke putter på et marketing-site. I har fortalt en maskine noget, I ikke vil stå ved på siden. Det er det modsatte af SEO. Det er at bede om at jeres ærlige sider også bliver mødt med skepsis.
Vi skriver det, fordi 'vi har JSON-LD' er blevet et tjek, I sætter ved go-live. Et ærligt setup er kedeligt: ét @type der passer til siden, felter I kan pege på, og ingen noder I tændte 'for en sikkerheds skyld'. Uden den vane har I et script fra pluginet. I har ikke structured data.
Hvad JSON-LD faktisk er — og hvad et schema-plugin ikke er
JSON-LD er et script af typen `application/ld+json`, der beskriver siden med schema.org-typer. Det er ikke en hemmelig ranking-faktor, I kan tænde. Det er en etiket på det, I allerede har skrevet. WebSite og Organization på et site, der har et navn og en forside. Article på et indlæg med forfatter og dato. Service på en ydelse, I beskriver. FAQPage på en side, der viser spørgsmål og svar. BreadcrumbList på det spor, brugeren kan se. Hver type er et job. Ikke en hylde, I tømmer ned i `<head>`.
Det er ikke det samme som Open Graph. og Twitter-tags. De er deling: titel, beskrivelse, billede, når nogen poster URL'en. JSON-LD er betydning: hvad er det her for en slags side, hvem udgiver den, hvilke spørgsmål står der. I kan have ærlig OG uden JSON-LD. I kan have JSON-LD der modsiger OG og H1. Crawlen og messenger-unfurlen vælger så. I har ikke valgt. Skriv H1 og meta først. Skriv JSON-LD som et spejl, ikke som et andet udkast.
Det er heller ikke det samme som en sitemap eller en canonical. Sitemap'et er listen over URL'er, I gerne vil have crawlet. Canonical er hvilken variant der er foretrukket. JSON-LD siger hvad den foretrukne side betyder. At lime Organization på alle URL'er og glemme Article på indlægget, er at sige at hver side er firmaet. At lime FAQPage på alle URL'er er at sige at hver side er et spørgsmål-svar. Begge dele er løgne, hvis siden er et marketing-afsnit uden den blok.
Og det er ikke 'Yoast / RankMath / et React-komponent der dumper hele grafen'. Et plugin kan være et værktøj, hvis I slukker det, I ikke har indhold til. Et komponent kan være et værktøj, hvis det læser den samme dictionary som siden renderer. Det, der typisk går galt, er et dump: alle typer, tomme felter, en adresse I ikke vil være LocalBusiness på, og et review I aldrig fik. Inventaret er det script, I deployer, og den HTML, det spejler. Alt andet er et håb, I har sat hos en vendor.
Det der typisk går galt, når nogen siger vi har schema
Den første fejl er at tænde typer, siden ikke er. LocalBusiness på et site, der sælger nationalt og internationalt — I har en dansk adresse, I er ikke en butik med åbningstider som det primære. Product på en ydelse uden et synligt produkt, uden tilbud, uden det I må vise som pris. Review og AggregateRating I selv skrev, 'så vi kan få stjerner'. Hver forkert type er et sted, et test-værktøj kan blive grønt, og en rater kan sige nej. Vælg den type, I kan forsvare i et møde, hvor nogen åbner siden ved siden af scriptet.
Den anden fejl er felter, der ikke står på siden. En `description` der er et andet udkast end leadet. En `author` der ikke er navngivet. En `datePublished` I satte til i dag på et gammelt indlæg, hver gang I deployer. Et `telephone` i Organization, I ikke viser. Google har gentaget: markup skal matche synligt indhold. Det er ikke en guideline, I kan 'tage senere'. Det er hele jobbet. Hvis feltet er sandt, så vis det. Hvis I ikke vil vise det, så lad være at markere det.
Den tredje fejl er at lime den samme graf på alle sider. Forside, ydelse, indlæg, 404 — samme Organization + FAQ + WebSite i ét klumpet script. Organization og WebSite kan høre til på forsiden og i et site-wide blok, I holder ærligt. FAQ hører til der, FAQ'en er. Article hører til på artiklen. En 404 med Article er en løgn. Fejlsider-indlægget er chrome. Her er at lade scriptet følge skabelonen, ikke at lade layoutet være et dump.
Den fjerde fejl er at jagte rich results som målet. Stjerner, FAQ-udtræk, sitelinks searchbox. Nogle af dem er indskrænket, udfaset eller givet til sider, der allerede har tillid. I kontrollerer markup. I kontrollerer ikke udtrækket. Et ærligt Article med forfatter, dato og et billede, siden viser, slår et Review I opfandt. Hvis I vil have FAQ-udtræk, så skriv FAQ'en som indhold først. Scriptet kommer bagefter. SEO-indlægget om hastighed er LCP. Den her er at nægte at lade et håb om SERP-pynt styre hvad I putter i `<head>`.
Spejl af siden vs. dump fra pluginet
Det ærlige spejl
Hver node er en sætning, I kan pege på i HTML'en. Færre typer. Rigtige felter.
- Organization / WebSite fra den samme siteConfig, footeren allerede bruger
- Article, Service, FAQPage, BreadcrumbList kun på de skabeloner, der viser dem
- Ingen Review, Product-pris eller LocalBusiness, I ikke vil stå ved som indhold
- Er kedeligt at vedligeholde, og det er hele pointen — test-værktøjet og øjet er enige
Det rådne dump
Alle typer tændt, tomme felter, og en graf I aldrig har læst.
- Pluginet eller bureauet tændte LocalBusiness, Product, FAQ og Review på forsiden
- Felter der ikke står på siden — eller som modsiger H1 og meta
- Samme script på 404, artikel og ydelse, så I 'ikke glemmer SEO'
- Er et håb, I kalder structured data. Crawlen skylder jer ikke stjerner for det
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Samme H1 som siden viser",
"datePublished": "2026-11-02",
"author": { "@type": "Organization", "name": "Samme navn som i footer" }
}
{
"@type": "FAQPage",
"mainEntity": [{
"@type": "Question",
"name": "Et spørgsmål der ikke findes i HTML"
}]
}Sådan beslutter I om I overhovedet skylder JSON-LD — og hvilken type
Uden den her rækkefølge får I endnu et script, I kalder schema.
- 01
Skriv siden først. Marker bagefter
H1, lead, synlig FAQ, synlig forfatter, synlig adresse hvis I vil eje den som indhold. Hvis blokken ikke er der, er typen ikke der. Et plugin der 'genererer FAQ ud fra H2'er', I ikke har stillet som spørgsmål, er et dump. Relancér-indlægget er URL'er. Her er sætningen på siden.
- 02
Vælg ét primært @type, der passer til skabelonen
Forside: Organization + WebSite. Ydelse: Service med provider. Indlæg: Article eller BlogPosting. FAQ-blok: FAQPage som ekstra, ikke som erstatning. Brødkrummer: BreadcrumbList der matcher det synlige spor. Hvis I er i tvivl mellem LocalBusiness og Organization, og I sælger nationalt, er Organization ordet. En adresse i footeren gør jer ikke til en butik.
- 03
Fyld kun felter, I kan pege på
Navn, URL, logo, beskrivelse, dato, forfatter, spørgsmål, svar. Hvis I ikke viser telefon, så udelad telephone. Hvis I ikke viser anmeldelser, så udelad Review. Hvis I ikke viser pris — og på et marketing-site skal I typisk ikke — så udelad Offer. Et tomt felt er ikke 'klart til senere'. Det er støj i grafen.
- 04
Læg scriptet der, skabelonen faktisk renderer
Samme dictionary som siden. Samme dato som `publishedAt`. Samme FAQ-array som blokken. WordPress: ét plugin, I har slukket typer i, ikke to der begge dumper. Next.js: ét JsonLd-komponent der får data, ikke en hardcodet klump i root layout på alle URL'er. Test én URL ad gangen.
- 05
Test med værktøjet og med øjet — og gentag når I redigerer
Rich Results Test og schema-validatoren kan sige gyldig og stadig være en løgn, hvis siden ikke viser det. Åbn siden. Peg. Hvis I ikke kan, så slet noden. Når I retter H1 eller fjerner FAQ, retter I scriptet samme dag. Monitoring-indlægget er GSC. Her er at eje grafen, så 'structured data'-rapporten ikke er fuld af noder, I aldrig mente.
“I har structured data, når crawlen kan tjekke sætningen på siden. Et script uden sandhed er håb.”
Forside, artikel, ydelse og FAQ — samme ord, fire jobs
Forsiden er det job, der oftest får hele kataloget. Den er firmaet og sitet: Organization med legalName, adresse I vil stå ved, sameAs til de profiler I faktisk ejer, WebSite med det navn I bruger. Den er ikke LocalBusiness, medmindre det lokale sted er produktet. Den er ikke FAQPage, medmindre forsiden viser spørgsmålene. Den er ikke Product. Et ærligt site-wide blok slår et dump, I kopierede fra et theme.
Artiklen er det job, der oftest glemmer forfatter og dato, eller sætter dem i scriptet og skjuler dem i UI. BlogPosting / Article med headline = H1, datePublished = den dato, I viser, author = den byline, I viser, image = det hero, I viser. Opdater dateModified når I faktisk redigerer, ikke når I deployer. Et indlæg uden synlig dato skal ikke have en dato i JSON-LD, I håber på i SERP'en.
Ydelsen er det job, der oftest bliver Product med Offer, fordi nogen ville have pris-markup. En ydelse er Service: navn, beskrivelse, provider der peger på Organization. Area served, hvis I mener det. Ikke et prisfelt, I ikke viser — og som I på det her site ikke skal vise. Et Offer uden synlig pris er en løgn. Et Offer med en pris, I ikke vil forsvare i et opkald, er værre. Skriv hvad I laver. Marker det. Lad prisen blive i samtalen.
FAQ'en er det job, der oftest bliver et skjult array. FAQPage er rigtigt, når siden viser spørgsmål og svar som indhold — ikke som accordion I har `display:none` på, og ikke som H2'er I aldrig stillede som spørgsmål. Fire til seks rigtige spørgsmål slår tyve tynde. JSON-LD'en er det samme array, blokken renderer. Hvis I fjerner blokken, fjerner I noden. Search Console-udtræk er en bonus, I ikke styrer. Den synlige FAQ er jobbet.
Hvad I typisk bør gøre i den situation, I står i
Venstre er det, I typisk siger. Højre er det næste skridt, vi typisk anbefaler.
Situation
Pluginet har tændt LocalBusiness, Product, FAQ og Review på forsiden
Næste skridt
Sluk det, siden ikke er. Organization + WebSite. Resten hører til på de skabeloner, der viser dem
Situation
Search Console viser FAQ-advarsler, og siden har ingen spørgsmål
Næste skridt
Slet FAQPage. Eller skriv spørgsmålene som synligt indhold. Et skjult array er ikke en fix
Situation
I vil have stjerner i SERP'en, og I har ikke anmeldelser at vise
Næste skridt
Slet Review. Stjerner I selv skrev, er et signal I har bedt om at blive mødt som det
Situation
Article-datoen i scriptet skifter ved hvert deploy
Næste skridt
Bind datePublished til den dato, siden viser. dateModified kun når I faktisk redigerer
Situation
Samme JSON-LD-klump ligger i root layout på alle URL'er
Næste skridt
Flyt den hen til skabelonen. En 404 er ikke en Article. En ydelse er ikke en FAQ, medmindre den viser én
Tjekliste før I kalder det structured data
Hvis I mangler flere af punkterne, er sætningen vi har JSON-LD — setup'et er et script, I ikke har læst.
- Hver node har et @type, I kan forsvare, når siden er åben ved siden af scriptet
- Hvert felt kan peges på i HTML'en — eller det er slettet
- Ingen Review, AggregateRating, Product-pris eller LocalBusiness, I ikke vil vise som indhold
- FAQPage, Article og Service lever på de skabeloner, der renderer dem — ikke i ét dump i layout
- I har kørt Rich Results på de URL'er, I ændrede, og I har kigget på siden, ikke kun på 'valid'
- Performance og relancér er andre jobs. Den her er at nægte at lade schema sige noget, siden ikke siger
Spørgsmål vi får igen og igen
Hvad er JSON-LD på et website, og er det påkrævet?
JSON-LD er et script, der beskriver siden med schema.org-typer. Det er ikke påkrævet for at rangere. Det er et spejl, I tilbyder crawlen, så den ikke skal gætte. Uden ærligt indhold at spejle, er det støj. Med ærligt indhold — navn, artikel, ydelse, synlig FAQ — er det den rene måde at sige det på. Et plugin der tænder alle typer, er ikke 'at have JSON-LD'. Det er at have et dump.
Må vi sætte FAQ-schema på sider uden en synlig FAQ?
Nej. FAQPage er til sider, der viser spørgsmål og svar. Et skjult array, et accordion med display none, eller H2'er I aldrig stillede som spørgsmål, er det Google har bedt jer om ikke at gøre. Skriv FAQ'en som indhold, eller udelad typen. Rich results er en bonus, I ikke styrer. Den synlige blok er jobbet. En advarsel i Search Console er ofte siden, der fortæller jer at scriptet lyver.
Skal et bureau med dansk adresse bruge LocalBusiness?
Kun hvis det lokale sted er det, siden sælger — et værksted, en klinik, en butik med åbningstider som produkt. Et bureau der sælger nationalt og internationalt, med en adresse i footeren, er Organization (og typisk ProfessionalService), ikke LocalBusiness. Forkert type er hvordan I beder om lokale rich results, I ikke vil forsvare, og hvordan I forvirrer den graf, I faktisk mente.
Får vi stjerner i Google, hvis vi tilføjer Review-markup?
Ikke fordi I tilføjede markup. Og ikke hvis anmeldelsen ikke er synlig, eller hvis I selv skrev den. Review og AggregateRating er blandt de typer, der oftest bliver misbrugt, og oftest ignoreret. Har I rigtige, synlige anmeldelser med kilde, kan I markere dem. Har I ikke, så lad være. Stjerner I opfandt, er et signal I har bedt om at blive behandlet som det.
Er det her det samme som at relancere uden at miste SEO, eller at have hurtige sider?
Nej. Relancér-indlægget er cutover, 301 og paritet. Performance-indlægget er LCP og Core Web Vitals. Den her er sandheden i scriptet: @type der passer, felter I kan pege på, ingen noder I tændte for en sikkerheds skyld. I kan have et hurtigt site med et råddent dump i `<head>`. I kan have en ren relancering og lime LocalBusiness på forsiden dagen efter. De er tre jobs. Det ene erstatter ikke de andre.
Hvis I har et schema-plugin tændt og en side, scriptet ikke kan pege på
Lad os skille et ærligt spejl fra et dump, I kalder SEO.
Markup der matcher HTML'en slår et katalog, I tændte for rich results.
