# Sitemap

## Hvad det er

Et sitemap er en fil, et website udgiver om sig selv: de adresser, ejeren vil
have søgemaskinerne til at kende, én post pr. side og hver med nogle få valgfrie
oplysninger. Filen findes, fordi en crawler ellers lærer et site at kende på den
langsomme måde, ved at følge links fra sider, den allerede kender, og nogle sider
ligger for enden af en lang kæde af links eller har næsten ingen links ind.

Det format, de store søgemaskiner deler, er Sitemaps-protokollen fra
sitemaps.org. XML-udgaven pakker listen ind i et `<urlset>`-element med én
`<url>` pr. side. Indeni holder `<loc>` den fulde adresse og er det eneste
påkrævede felt. `<lastmod>` er datoen for sidens seneste ændring, `<changefreq>`
et gæt på, hvor ofte den vil ændre sig, og `<priority>` en værdi fra 0,0 til 1,0,
der rangerer siden mod sitets egne andre sider og aldrig mod andres. Protokollen
tager også imod en ren tekstfil med én adresse pr. linje eller et RSS- eller
Atom-feed.

Protokollen sætter faste grænser. En fil rummer højst 50.000 adresser og 50 MB
ukomprimeret, må pakkes med gzip og skal være UTF-8 med escapede værdier, og
hver adresse holder sig under 2.048 tegn. Et større site deler listen op og
udgiver et sitemap-indeks, en anden slags fil, der navngiver op til 50.000
sitemaps på samme site. Et sitemap må desuden kun liste adresser på eller under
sin egen placering: en fil på `/catalog/sitemap.xml` dækker kun siderne under
`/catalog/`.

En søgemaskine finder filen på en af to måder. En `Sitemap:`-linje i robots.txt
giver dens fulde adresse uafhængigt af reglerne for de enkelte crawlere, eller
ejeren indsender den gennem søgemaskinens egne værktøjer, for eksempel Google
Search Console.

Ordet bruges også om en side med links til menneskelige besøgende; når forskellen
betyder noget, siger man »XML-sitemap« om den, der er skrevet til programmer.

## Hvorfor det betyder noget

Googles dokumentation er åben om grænserne. Et site, hvis sider er ordentligt
linket, kan som regel findes uden et sitemap, og Google sætter grænsen for
»lille« ved omkring 500 sider, der skal kunne vises i resultaterne. Google skriver
også, at et sitemap ikke garanterer, at alt i det bliver crawlet og indekseret,
og kalder en indsendelse et hint og intet mere. Mest gavn gør det på store sites,
nye sites med få links udefra og sites med meget video, mange billeder eller
nyheder.

Næsten alle sitegeneratorer skriver et sitemap gratis, så den egentlige
beslutning er, hvad filen påstår, og hver post er en påstand, som en søgemaskine
kan holde op mod selve siden.

Hvilke adresser hører til? Google beder om hver sides kanoniske adresse. En
liste fyldt op med omdirigeringer, dubletter eller sider
markeret `noindex` beder om netop det, resten af sitet siger, at man skal lade
være.

Hvilke felter? Google siger, at den ignorerer `<priority>` og `<changefreq>`. Den
bruger kun `<lastmod>`, hvis datoen er konsekvent og efterprøveligt korrekt, for
eksempel når den sammenlignes med sidens seneste ændring, og protokollen siger, at
datoen skal være den dag, siden sidst blev ændret, og ikke den dag, sitemappet
blev genereret. Google regner en ændring af hovedindholdet, de strukturerede data
eller linkene som væsentlig og et nyt årstal i copyright-linjen som ubetydeligt.

Det er her, omkostningen ligger. En dato fra filsystemet er gratis og som regel
forkert, fordi udrulninger, eksporter og friske checkouts rører filer, hvis tekst
er den samme. En dato fra versionshistorikken er ærlig, men så skal byggeriet
have historikken ved hånden og læse den i den rigtige rækkefølge. En dato skrevet
i hånden er præcis, indtil nogen glemmer at rette den.

## Sådan ser det ud i praksis

Dette sites robots.txt nævner én adresse, `https://engineer.company/sitemap.xml`,
og den fil er et sitemap-indeks, der navngiver tre sitemaps, ét hver for
engelsk, dansk og ukrainsk. Hver post har adressen og en dato samt links til den
samme side på de to andre sprog. `<priority>` og `<changefreq>` er udeladt,
fordi Google siger, at den ignorerer begge, og protokollen kræver ingen af dem.
Da denne artikel blev skrevet, så posten for siden om AI-parathed sådan ud,
uden sproglinkene:

```xml
<url>
  <loc>https://engineer.company/da/ai-ready/</loc>
  <lastmod>2026-10-15T14:25:16+02:00</lastmod>
</url>
```

Listen er selektiv med vilje. Virksomhedens fokuserede satellitsites
genudgiver arbejde herfra med en canonical, der peger tilbage, og den samme
skabelon holder de kopier ude af hvert satellitsites sitemap: en post beder om
at få netop den adresse indekseret, og at bede om en kopi og samtidig pege på
en anden side som originalen ville modsige sig selv. Hver vært melder kun sine
egne sider.

Datoerne har deres egen historie. På et tidspunkt
[fortalte sitemappet søgemaskiner, at 172 af dets 176 sider var ændret i samme øjeblik](/da/portfolio/fixed-a-sitemap-with-one-shared-timestamp-140/).
Årsagen var hverdagsagtig: datoen kom fra hver fils ændringstidspunkt, og
indholdseksporten omskriver hver fil ved hver kørsel. Rettelsen flyttede kilden
til versionshistorikken med en faldbagkæde, der først prøver et eksplicit felt,
så commit-historikken, så filen. Én fælde er værd at kende: det bogstavelige
feltnavn skal stå på listen, ellers læser generatoren det aldrig.
Bagefter rørte en gensynkronisering efter en måneds redigeringer otte filer af
186 i stedet for dem alle, og sitemappet siger noget sandt.

Den dato gør nu mere end at stå i sitemappet. Som
[siden om at være klar til AI-agenter](/da/ai-ready/) beskriver, melder hver
udrulning ændringerne via IndexNow, en protokol, som Bing og flere andre
søgemaskiner er med i. Udrulningsscriptet afgør, hvad der er ændret, ved at
sammenligne hver sides `lastmod` med det, det sidst sendte, så en udrulning, der
ændrer én side, melder én side. Google står ikke på IndexNows egen liste over
deltagende søgemaskiner og hører derfor om ændringen, næste gang den læser
sitemappet. Den samme side beskriver værnet: kvalitetsporten holder hver
sitemap-dato op mod sidens historik og nægter at udgive, når en af dem er forkert.
Til mennesker frem for programmer findes også et
[læsbart indeks over hver side](/da/sitemap/).

## Hvor det går galt

**Hver side påstår at være ændret i dag.** Sitemappet har én dato, eller én pr.
udrulning, på tværs af hundredvis af sider, og en søgemaskine, der læser det,
lærer intet om, hvilket arbejde der er nyt. Årsagen er en dato fra filsystemet
eller byggeriets ur. Google bruger kun `<lastmod>`, når datoen er konsekvent og
efterprøveligt korrekt, og et fælles tidsstempel er synligt ikke det. Hent datoen
fra indholdets egen historik, og hold et udsnit af posterne op mod den efter hver
ændring af byggeriet.

**Listen beder om sider, sitet vil holde ude.** Omdirigeringer, dubletter med
sporingsparametre, sider markeret `noindex`, staging-værter og kopier, hvis
kanoniske adresse peger et andet sted hen, havner i sitemaps fra en generator,
der lister hver fil, den har bygget. Hver af dem sender en crawler til en adresse,
som siden selv derefter fornægter. List kun den kanoniske adresse for hver side,
der skal kunne vises i resultaterne, og lad sitemappet og canonical-tagget svare
ud fra én regel, sådan som dette sites skabeloner gør.

**Poster ligger uden for det, filen må dække.** Et sitemap på `/blog/sitemap.xml`
lister butikssider eller skriver relative stier som `/page.html`. Protokollen
begrænser en fil til adresser på eller under dens egen mappe, og Google crawler
adresser præcis, som de står. Udgiv sitemappet i roden, skriv hver `<loc>` som en
fuld `https://`-adresse på samme vært, og skift til et sitemap-indeks, før listen
nærmer sig 50.000 poster eller 50 MB.

**Sider, der har stået på listen i månedsvis, kommer ikke i indekset.** Ejeren
læser sitemappet som en ordre og venter. Google kalder det et hint: en listet
adresse kan stadig blive sprunget over eller lagt sammen med en dublet af grunde,
der ligger uden for filen. Se på siden frem for listen: om andre sider linker til
den, om dens canonical peger på den selv, og om robots.txt eller en
`noindex`-regel holder crawlere væk.

## Læs mere

- [Sitemaps XML format](https://www.sitemaps.org/protocol.html) — selve
  protokollen: hvert tag, størrelsesgrænserne, indeksfiler og hvilke adresser en
  fil må liste.
- [Build and submit a sitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap)
  — Googles regler, herunder de tags den ignorerer, og hvornår den stoler på en
  dato.
- [Learn about sitemaps](https://developers.google.com/search/docs/crawling-indexing/sitemaps/overview)
  — hvornår Google mener, et site har brug for et, og hvornår god linkstruktur er
  nok.
- [IndexNow documentation](https://www.indexnow.org/documentation) — protokollen,
  der fortæller de deltagende søgemaskiner om en ændring samme dag, den går i
  luften.
- [RFC 9309: Robots Exclusion Protocol](https://www.rfc-editor.org/rfc/rfc9309)
  — standarden for robots.txt, som lader en crawler læse en `Sitemap:`-linje ved
  siden af reglerne.

<https://engineer.company/da/glossary/sitemap/>
