Hvad er programmatisk SEO?
Traditionel SEO handler om at skrive én god side pr. emne. Programmatisk SEO handler om at generere hundredvis — eller tusindvis — af unikke sider fra strukturerede data, og lade scriptet gøre arbejdet i stedet for manuelt forfatterarbejde.
Princippet er enkelt: du har data i en tabel eller et JSON-format. Hvert datapunkt kan repræsentere en søgeintention — en by, et produkt, en uddannelse, en nøgleord-kombination. I stedet for at skrive én generisk side om emnet, genererer du én dedikeret side pr. datapunkt — og hver side er optimeret til præcis det søgterm.
Et ejendomssite med data på 500 byer kan generere 500 unikke sider som "Boliger til salg i [by]" — med lokale tal, gennemsnitspriser og nøgleord naturligt vævet ind. Én skabelon, 500 landingssider, 500 long-tail søgetermer dækket.
Det er ikke et hack. Det er skaleret indholdsarkitektur — og Google belønner det, når siderne faktisk er unikke og nyttige for brugeren.
Hvornår giver programmatisk SEO mening?
Ikke alle sites er kandidater. Programmatisk SEO giver mening, når tre ting er opfyldt:
- Du har strukturerede data — produkter, lokationer, priser, fagbegreber, brancher, uddannelser. Data der kan varieres systematisk.
- Der er søgevolumen på variationerne — folk søger faktisk på de kombinationer du vil generere sider til. Ellers bygger du tomme sider ingen finder.
- Variationerne er reelt unikke — siden for "tømrer i København" og siden for "tømrer i Aarhus" skal indeholde forskelligt og relevant indhold, ikke bare et bynavn byttet ud.
Mangler én af de tre? Så er traditionel SEO eller on-page-optimering sandsynligvis det rigtige sted at starte.
Processen i praksis
Der er ingen universel opskrift, men der er en struktur der virker — og som vi er vendt tilbage til i hver programmatisk build.
Hvilke data har du? Hvad kan varieres? Hvad er forholdet mellem datasæt? En tydelig datamodel er fundamentet — det er her de fleste fejler, fordi de starter med skabelonen og ikke med data.
For hvert datapunkt: søger folk faktisk på det? Brug Google Search Console, keyword-research eller autocomplete til at bekræfte at du ikke genererer sider til søgetermer ingen bruger.
Skabelonen er HTML-strukturen alle sider deler. Hvert datapunkt fyldes ind. Titeltag, meta description, H1 og brødtekst skal alle variere — ikke kun ét ord. Statisk HTML er at foretrække frem for klient-side rendering.
Et script — Node.js, Python, eller et SSG som Astro — genererer alle sider fra data. Scriptet kører ved hvert deploy og opdaterer alle sider hvis data ændrer sig. Automatisk sitemap opdateres i samme omgang.
Schema.org-markup tilpasset siden, canonical-tag der peger på sig selv, intern linking mellem relaterede sider og en klar H-struktur. Det er detaljer der gør forskellen fra template-spam til reelt SEO-aktiv.
Fra praksis: 143 landingssider til en AI-platform
MIRAII er en dansk AI-platform med en bred portefølje af AI-produkter og use cases. Udfordringen: potentielle kunder søgte på specifikke use cases og brancher — ikke på den generiske platform-side. Der var ingen dedikerede sider til disse søgninger.
Løsningen var et custom Node.js build-script der genererede 143 individuelle landingssider fra strukturerede data over MIRAII's produkter og målgrupper. Hver side fik sin egen titeltag, meta description, H1-struktur og skræddersyet indhold — ikke bare en template med byttet nøgleord.
Teknisk: statisk HTML-output via custom script, automatisk sitemap-generering, schema.org-markup på hver side og kanonisk URL-struktur. Siden deployes på edge-CDN for hurtig load — et direkte SEO-parameter via Core Web Vitals...
Hvad kræver det teknisk?
Statisk vs. dynamisk HTML
Programmatisk SEO kan bygges dynamisk (sider renderes ved request) eller statisk (sider genereres på forhånd og serveres som filer). Statisk er næsten altid det bedre valg til SEO. Crawlere elsker statisk HTML — ingen JavaScript de skal vente på at eksekvere, ingen timeout-problemer, hurtig response.
Statiske sites bygget med Astro, Next.js (med SSG), Eleventy eller custom scripts deployet på et CDN performer typisk langt bedre på Core Web Vitals end dynamiske alternativer.
Sitemap og crawlability
Med 100+ sider er et struktureret sitemap ikke valgfrit — det er afgørende. Sitemappet skal genereres automatisk fra den samme datakilde som siderne, så det altid er opdateret. Et sitemap der er ude af sync med de faktiske sider er et SEO-problem.
Canonical-tags
Hver genereret side skal have et canonical-tag der peger på sig selv. Det forhindrer at Google fejltolker lignende sider som duplikeret indhold — et problem der kan diskvalificere hele din programmatiske SEO-indsats på én gang.
Schema.org-markup
Struktureret data i form af schema.org-markup giver Google mulighed for at forstå hvad siden handler om uden at tolke al teksten. For produktsider er Product og Offer relevante. For lokationssider LocalBusiness. For artikler Article. Markup genereres automatisk fra datasættet — ikke håndkodet pr. side.
De klassiske fejl
Programmatisk SEO kan gå galt på mange måder. De fejl vi ser oftest:
- Tyndt indhold. Sider der kun bytter et nøgleord ud og ellers er identiske. Google klassificerer det som duplikatindhold og ignorerer eller straffer det.
- Ingen søgevolumen. Man genererer sider til kombinationer ingen søger på. Resultatet: hundredvis af sider der aldrig ranker og belaster crawl-budgettet.
- Dynamisk rendering. Sider der kræver JavaScript for at vise indhold. Googles crawler venter ikke på JS — indholdet indekseres ikke.
- Manglende intern linking. Genererede sider der ikke linkes til fra resten af sitet har lav autoritet. En hub-side der linker til alle variationer er nødvendig.
- Data der ikke opdateres. Genererede sider med forældet data mister hurtigt relevans — og brugertillid.
Er det noget for dit site?
Programmatisk SEO er ikke en genvej — det er et arkitektonisk valg der kræver det rigtige datasæt, den rigtige tekniske opsætning og en klar strategi for hvad der skal rangere og hvorfor.
Har du strukturerede data og vil vide om der er et programmatisk SEO-potentiale i dem? Jeg tager gerne et indledende kig og vender tilbage med et konkret svar — ikke en generisk pitch.