2026-02-24 · Redaktion Baduno · 25 blog.readMin · Blog & Viden
Caching af flersprogede hjemmesider: Edge, Vary og invalidering
Hvordan sikrer du, at dit flersprogede websted indlæses hurtigt, uden at besøgende ser forældet indhold? Vores guide forklarer, hvordan du optimerer caching med edge-servere, Vary-headere og målrettet invalidering for op til 24 sprogversioner. Lær, hvordan du mestrer balancen mellem performance og aktualitet.

Grundlæggende om caching for flersprogede websites
Caching er en central foranstaltning til at forkorte indlæsningstiden på din flersprogede hjemmeside og reducere serverbelastningen. På en hjemmeside med 24 sprogversioner stiger antallet af leverede sider tilsvarende – uden intelligent caching ville hver besøgende anmode om siden direkte fra oprindelsesserveren. Moderne Content Delivery Networks (CDN'er) gemmer statisk og dynamisk indhold på geografisk distribuerede edge-servere. På en flersproget side er det afgørende, at hver sprogversion caches separat og leveres korrekt.
Grundlaget for effektiv caching er entydig identifikation af en ressource. Cachen bruger en såkaldt cache-nøgle, som typisk består af URL'en og valgfrie headere. På flersprogede hjemmesider skal du sikre, at forskellige sprogversioner får forskellige cache-nøgler – ellers risikerer brugere at få den forkerte sprogversion. I praksis har det vist sig effektivt at inkludere sprogkoden i URL-stien, f.eks. efter mønsteret example.com/de/produkte og example.com/fr/produits. Derved bliver hver sprogversion til en selvstændig ressource med sin egen cache-nøgle.
Alternativt kan du styre sproget via en query-parameter (f.eks. ?lang=de) eller via en cookie. Begge tilgange er mulige, men query-parameteren gør caching vanskeligere, da den ofte ikke caches standardiseret, og cookies kræver yderligere behandling på edge-serveren. I praksis anbefaler vi at kode sproget i URL-stien. Det sikrer ikke kun rene cache-nøgler, men forbedrer også international SEO, da søgemaskiner tydeligt kan skelne mellem sprogversioner.
Et andet vigtigt punkt er invalidering (purge) af cachen ved ændringer. Hvis du f.eks. opdaterer indholdet på den tyske side, skal du kun tømme cache-indgangen for /de/ – de andre sprogversioner forbliver upåvirket. Planlæg derfor din purge-strategi fra starten: Brug muligheden i dit CDN til at invalidere enkelte stier eller tags målrettet. Definer en separat cache-tag for hver sprogversion (f.eks. "lang-de") for at kunne tømme samlet. På den måde undgår du, at alle sprogversioner slettes ved en opdatering.
Anatomien af en cache-nøgle: Sprog, region og varianter
Cache-nøglen er hjertet i enhver caching-arkitektur. Den afgør, om indhold leveres fra cachen eller hentes fra oprindelsesserveren. For en flersproget hjemmeside skal du designe nøglen, så den korrekt afspejler sprog, region og eventuelt andre varianter som enhedstype eller version. Ellers får besøgende den forkerte sprogversion, eller der opstår konflikter mellem forskellige udgaver.
Typisk består cache-nøglen af følgende komponenter: værtsnavnet, URL-stien, alle relevante query-parametre og – afhængigt af konfigurationen – udvalgte headere. For at adskille sprog og region kan du bruge en flerdelt sprogkode, f.eks. "de-DE" for tysk i Tyskland eller "en-GB" for britisk engelsk. Disse koder kan integreres i stien eller sendes som separate query-parametre (f.eks. ?lang=de-DE). I praksis har sti-tilgangen vist sig at være mest cache-venlig, da CDN'er og browsere som standard betragter den som en del af ressourcen.
Derudover bør du overveje brugervarianter. Nogle hjemmesider leverer forskellige layouts til mobil- og desktop-enheder. I så fald anbefales det at inkludere user-agent eller en eksplicit klassifikator (f.eks. viewport-bredde) i cache-nøglen – men kun hvis det virkelig er nødvendigt, fordi hver ekstra dimension reducerer cache-træffere. Et alternativ er at levere en fuldt responsiv side, der ikke kræver enhedsspecifikke varianter. Så forbliver cache-nøglen slank, og træfprocenten høj.
Konkret handlingsanbefaling: Definer for din flersprogede side en cache-nøgle, der mindst indeholder den fulde URL-sti med sprog- og regionskode samt kun de headere, der faktisk varierer. Undgå at inkludere hele Accept-Language-headeren i nøglen, da den varierer meget fra bruger til bruger. Brug i stedet sproget fra URL'en som det primære skelnekriterium. Fastlæg desuden en ensartet cache-levetid (TTL) for hver sprogversion – for dynamisk indhold typisk nogle minutter, for sjældent ændret indhold timer. Dokumentér cache-nøglens struktur, så dit team og CDN arbejder konsistent.

Udfordringen med Accept-Language-headeren
Accept-Language-headeren sendes af browseren og angiver brugerens foretrukne sprog. Umiddelbart virker det oplagt at bruge denne header til automatisk at vælge og levere sprogversionen. For caching udgør den dog en særlig udfordring: Hver bruger har en individuel vægtning af sprog (f.eks. „de-DE,de;q=0.9,en;q=0.7“). Hvis du inkluderer hele headeren i cache-nøglen, vil stort set hver bruger få en individuel cache-post – hitraten vil nærme sig nul, og serverbelastningen vil stige.
I praksis fører brugen af Accept-Language-headeren uden en klar strategi ofte til de såkaldte „Accept-Language-fælder“. Eksempel: En bruger med headeren „fr;q=0.9,en;q=0.8“ lander på en side, der på grund af en cachet post for en engelsk bruger leveres på engelsk. Operatøren undrer sig over høje afvisningsprocenter i Frankrig. Den modsatte situation er også problematisk: Du serverer den tyske version, fordi en tidligere bruger med headeren „de-DE,de;q=0.9“ har udfyldt cachen – den næste bruger får tysk, selvom han er franskmand.
For at undgå disse fælder anbefaler vi: Brug ikke Accept-Language-headeren som det primære middel til sprogvalg. Sats i stedet på en URL-baseret sprogstyring (f.eks. domain.de/fr/ for fransk). Hvis du alligevel vil sprogdetektere automatisk baseret på headeren, skal du omdirigere brugeren via en 302-omdirigering til den tilsvarende URL – så caches den endelige sprogversion uden headervariabilitet. En anden mulighed er at evaluere headeren på edge-niveau uden at inkludere den i cache-nøglen: Edge-serveren vælger den passende version baseret på den første indgang (f.eks. „fr“), men cache-nøglen indeholder kun URL'en. For at gøre dette skal du angive sprogversionen i URL'en (f.eks. efter omdirigeringen).
Hvis du alligevel skal tage højde for Accept-Language-headeren i cache-nøglen, så begræns den til det primære sprog og fjern vægtninger (kun den første sprogkode). Sæt Vary-headeren til „Accept-Language“ og konfigurer dit CDN, så kun denne reducerede header indgår i nøglen. Men selv da falder cache-hitraten mærkbart. Vores råd: Brug som regel URL-baseret sprogmarkering og brug kun Accept-Language-headeren til den indledende omdirigering eller analyse. På den måde holder du caching effektiv og undgår de beskrevne fælder.
Strategier til sprogidentifikation på CDN-niveau
Identifikationen af det korrekte sprog på CDN-niveau er afgørende for effektiviteten af caching af flersprogede websites. Tre tilgange har vist sig i praksis: URL-baseret sprogkendelse (f.eks. /de/, /en/), cookie-baseret sprogvalg og evaluering af Accept-Language-headeren. Vi anbefaler, at CDN-konfigurationen vælges sådan, at sproginformationen stammer fra URL'en eller en eksplicit cookie – ikke fra Accept-Language-headeren. Årsagen: Accept-Language-headeren varierer afhængigt af browserindstillinger og kan føre til en multiplikation af cache-poster, hvis den bruges som cache-nøgle.
Konkret: Brug et URL-skema som example.com/de/produkte og konfigurer dit CDN, så sti-komponenten (f.eks. „de“) fungerer som en del af cache-nøglen. Mange CDN'er understøtter ekstraktion af stisegmenter. Ved cookie-baseret genkendelse (f.eks. cookie „lang=de“) skal cookie-værdien inkluderes i cache-nøglen – ensartet for hele websitet. En fallback-logik: Hvis hverken URL eller cookie er til stede, omdiriger brugeren til en sprogvalgsside i stedet for at bruge Accept-Language-headeren. Dette forhindrer, at den samme URL caches med forskellige headerværdier.
I implementeringen bør CDN'et indstilles til at ignorere Accept-Language-headeren, så længe sproget er entydigt fra andre kilder. Hos Baduno GmbH bruger vi en kombination: Primær identifikation via URL-stien, sekundært via en første serverside-cookie, der sættes efter sprogvalg. Accept-Language-headeren bruges kun til den indledende omdirigering til den passende URL, men ikke som cache-nøgle. Bemærk: En ren cookie-strategi kræver, at cookien også sættes for ikke-indloggede brugere – sørg for databeskyttelseskonform implementering. Søg juridisk rådgivning, hvis cookies er involveret.
Handlingsanbefaling: Gennemgå din nuværende CDN-konfiguration: Bruges Accept-Language-headeren som cache-nøgle? Hvis ja, migrer til en URL- eller cookie-baseret tilgang. Test med et værktøj som curl, om forskellige Accept-Language-værdier fører til forskellige cache-poster for den samme ressource. Dokumentér logikken for sprogidentifikation for dit team for at undgå fremtidige fejlkonfigurationer.
Sæt Vary-headeren korrekt – men hvordan?
Vary-headeren fortæller caches, hvilke anmodningsheadere der skal tages i betragtning ved afgørelsen af gyldigheden af et cachet svar. For flersprogede websites er korrekt brug af Vary essentiel, men byder på faldgruber. Grundreglen: Sæt Vary kun på headere, der faktisk tjener som cache-nøgle. En snæver Vary er bedre end en for bred. I praksis ser vi ofte Vary: Accept-Language – det kan føre til en dramatisk stigning i antallet af cache-poster, da hver browser har sine egne sprogprioriteter.
Vores anbefaling: Brug slet ikke Vary unødigt. Hvis du allerede identificerer sproget via URL eller en cookie, er en Vary-header overflødig – især Vary: Accept-Language. Sats i stedet på eksplicitte cache-nøgler. Hvis du alligevel skal evaluere Accept-Language, så begræns Vary-headeren til de sprogvarianter, der bruges i cache-nøglen. Et eksempel: Vary: Accept-Language giver kun mening, hvis dit backend leverer forskelligt indhold for hver sprogkombination (f.eks. „de-DE,de;q=0.9,en;q=0.8“). Gør du ikke det? Undgå så denne header.
Et alternativ er brugen af Vary: Cookie, hvis du sætter en sprogspecifik cookie. Men også her gælder: Kun hvis cookien faktisk påvirker cache-nøglen. Advarsel: Caches på internettet (f.eks. shared hosting, proxies) kan fortolke Vary-headere forskelligt. Ved stærkt fragmenterede Vary-værdier stiger cache-fragmenteringen. I praksis har det hos Baduno vist sig at slå Vary helt fra, når sproget fremgår af URL-stistrukturen. Det forbedrer cache-hitraten mærkbart.
Konkret handlingsanbefaling: Gennemgå din serverkonfiguration (Apache, Nginx, CDN). Fjern Vary: Accept-Language, hvis sproget ikke udelukkende bestemmes via denne header. Sørg for, at Vary kun indeholder de headere, der rent faktisk varierer. Brug ved CDN-integration muligheden for at overskrive eller fjerne Vary-headeren. Test efter ændringer leveringen med forskellige browsere og overvåg cache-hitraten. Ved usikkerhed: Få konfigurationen tjekket af en specialist.
Optimer cache-hitrater ved 24 sprogversioner
Optimering af cache-hit-rater er en særlig udfordring med 24 sprogversioner, da hver sprogvariant potentielt kræver separate cache-poster. Målet er at minimere antallet af cache-poster uden at påvirke den korrekte sproglevering. Den mest effektive metode: Adskil sprog-uafhængige og sprog-afhængige ressourcer. Statiske aktiver som billeder, CSS- og JavaScript-filer bør ikke indeholde en sprogkomponent i cache-nøglen – de er ens for alle sprog. Placer dem i en sprogneutral sti, f.eks. /assets/ og konfigurer CDN'et, så disse poster caches globalt.
Ved dynamisk indhold (HTML-sider) skal sprog og region tages i betragtning. Reducer cache-fragmentering ved at koncentrere sprogspecifikt indhold på få, entydige URL'er. Undgå forespørgselsparametre som ?lang=de, da de unødigt øger cache-nøgle-mangfoldigheden. Brug i stedet klare stier: /de/blog/artikel. Et andet trick: Aktivér server-side Edge Side Includes (ESI) eller CDN'ets egne funktioner til at indlæse sprogafhængige dele (f.eks. header, footer), mens sidens grundstruktur caches globalt. Det reducerer antallet af varianter, der skal caches, til de virkelig dynamiske komponenter.
I praksis har følgende cache-nøglestrategier vist sig effektive med 24 sprog: For sider med identisk layout, men forskellige tekster: Cache-nøgle = URL + sprog (fra sti). For regionale tilpasninger (f.eks. betalingsmetoder): Cache-nøgle = URL + sprog + region. Brug normaliserede sprogkoder (ISO 639-1, f.eks. "de" i stedet for "de-DE"), medmindre regionale forskelle er relevante. Kontrollér regelmæssigt din cache-effektivitet med metrics som "Cache Hit Ratio" pr. CDN-PoP. Hvis du oplever høj fragmentering, analysér fordelingen af sprog-URL'er. Ofte ligger mange hits på få sprog (f.eks. engelsk, tysk, fransk). Konfigurér længere TTL'er for sjældnere sprog for at undgå leveringshuller.
Handlingsanbefaling: Implementér en klar adskillelse af statiske og dynamiske ressourcer. Brug ESI eller CDN-subrequests til sprogafhængige widgets. Overvåg cache-hit-raten pr. sprog og justér TTL'er efter behov. Udfør regelmæssige purge-tests: Slet alle sprogvarianter af en side og observer, hvor hurtigt de genopfyldes. Dokumentér din cache-nøglestruktur, så ændringer ikke fører til uventede invalideringer. Ved juridiske spørgsmål om lagring af indhold på forskellige sprog, konsultér din juridiske afdeling.

Konfiguration af edge-caches til hvert sprog
Ved flersprogede websites med 24 sprogversioner skal edge-caches holdes adskilt pr. sprog for at sikre, at hver bruger modtager den korrekte version. Den mest almindelige metode er at integrere sprogkoden i cache-nøglen. I praksis bruger du enten URL-stien (f.eks. /de/, /en/), en cookie (f.eks. "lang=de") eller en kombination med Accept-Language-headeren. Det afgørende er, at sprogidentifikationen sker på edge-niveau før cache-adgang. Indsæt en brugerdefineret header som "X-Language" i din CDN edge-logik (f.eks. Fastly VCL, CloudFront Lambda@Edge, Cloudflare Workers). Eksempel i Fastly:
sub vcl_recv { if (req.http.Cookie ~ "lang=de") { set req.http.X-Lang = "de"; } else if (req.url ~ "^/[a-z]{2}/") { set req.http.X-Lang = regsub(req.url, "^/([a-z]{2})/.*", "\1"); } else { set req.http.X-Lang = "en"; # Fallback } }
Derefter inkluderes headeren i cache-nøglen: set req.hash += req.http.X-Lang. På den måde caches hver sprogversion uafhængigt.
En hyppig fejl er udelukkende at stole på Vary: Accept-Language-headeren. Erfaringsmæssigt fører dette til problemer med CDN'er, der ikke fortolker headeren korrekt. Det er bedre at styre cache-nøglen eksplicit. Vær også opmærksom på fallbacks: Hvis sproget ikke kan bestemmes entydigt, server standardsproget, men cache det kun med en generisk nøgle (f.eks. "default"). Dette forhindrer, at en bruger uden sprogangivelse modtager en forkert version. Konfigurér desuden TTL afhængigt af sproggruppe – dynamisk oversatte sider får erfaringsmæssigt kortere TTL'er (f.eks. 600 sekunder), mens statiske sprogversioner kan caches længere (f.eks. 3600 sekunder). Kontrollér regelmæssigt cache-adfærden med testværktøjer som curl – vis dig X-Cache-headeren.
Praktisk handlingsanbefaling: Brug en sprogspecifik cache-regel i din CDN-konfiguration. Opret en separat Surrogate-Key for hvert sprog (f.eks. "lang:de"). Dette letter senere målrettet invalidering. Sørg for, at origin-serveren sætter Vary-headeren korrekt (Vary: Accept-Language, X-Lang), og at der ikke udsendes konkurrerende cache-headere. Test hver sprogversion med en dedikeret cache-nøgle, før du ruller konfigurationen ud.
Invalideringslogikker: Partial Purge og Pre-Warming
Ved 24 sprogversioner er komplet invalidering af alle sider ineffektiv og belaster origin unødigt. Brug i stedet Partial Purge: Slet kun cachen for det eller de berørte sprog. Dette opnår du ved at tildele hver sprogversion et unikt cache-tag (Surrogate-Key). For eksempel tildeler du sider på tysk tagget "lang_de" og sider på fransk "lang_fr". Ved en indholdsændring purger du kun det relevante tag. Mange CDN'er (Fastly, Akamai, Cloudflare) understøtter denne metode. Brug API'en til målrettet invalidering: POST /purge med header "Surrogate-Key: lang_de". På den måde undgår du, at alle andre sprog skal genindlæses.
Efter purge er det erfaringsmæssigt en god idé at forvarme (Pre-Warming) de vigtigste sider på det berørte sprog. Definer en liste over kritiske URL'er pr. sprog – f.eks. startsiden, top-produktsider, kontaktsiden – og hent dem umiddelbart efter invalideringen. Dette kan gøres via et script eller CDN'ets indbyggede warm-up-funktion. Undgå at varme alle sider samtidigt: Prioriter de mest besøgte indhold. En automatisk Pre-Warming-cron-job, der hver time indlæser top-50-URL'er for hvert sprog, kan øge cache-hit-raten betydeligt i det første minut efter en udgivelse. Dette er især vigtigt, hvis du ofte foretager opdateringer på enkelte sprog.
En anden metode er trinvis TTL: Efter en invalidering sætter du en kort TTL (f.eks. 60 sekunder) og øger den gradvist til normalværdien, hvis der ikke sker yderligere ændringer. Dette forhindrer, at forældet indhold leveres i længere tid. I praksis kombinerer du dette med en global invalideringnøgle til sprogovergribende ændringer (f.eks. navigation). Vær opmærksom på, at Pre-Warming-requests ikke misforstås som DDoS – begræns forespørgslerne eller brug dedikerede hosts. Dokumentér invalidingslogikken tydeligt i teamet, så alle sprogredaktører bruger de relevante tags.
International CDN-konfiguration: Regionale og sproglige aspekter
CDN-konfigurationen for et websted på 24 sprog skal tage højde for både regionale og sproglige særtræk. Som udgangspunkt bør alle sprogversioner caches i hver PoP for at minimere latenstid. Du kan dog optimere ydeevnen ved at justere cache-prioriteter: Sprogversioner med høj trafik fra en region (f.eks. tysk fra Europa) får længere TTL'er der. Brug CDN'ens geolokaliseringsdata til dette. I praksis udvider du f.eks. cache-nøglen med en geo-header (f.eks. `X-Geo-Region`), hvis indholdet varierer efter region (f.eks. en-US vs. en-GB). Derefter cacher du 'en'-sider forskelligt alt efter kontinental region. Det øger træfprocenten, da brugere fra USA ikke ser den britiske version.
Ved sprogdetektion på edge-niveau foretrækkes en hierarkisk logik: URL-sti > Set-Cookie > Accept-Language-header. URL-stien er mest pålidelig. Hvis du bruger Accept-Language, skal du parse den på edge – men undgå kompleks vægtning, da det påvirker ydeevnen. Angiv i stedet en fast prioriteringsliste (f.eks. tysk, engelsk, fransk) og cache hvert accepteret sprog separat. I regioner med mange sprogbrugere (f.eks. Schweiz) kan det være nyttigt at opsætte en region-til-sprog-mapping: Schweiziske brugere får som standard tysk, medmindre andet er angivet. Dette kan implementeres med en simpel edge-tabel.
Vær opmærksom på juridiske aspekter: For EU-brugere skal personoplysninger (f.eks. fra cookies) forblive i EU. Vælg en CDN-udbyder med PoP'er i EU, og konfigurer, at sproget bestemmes via sikre headere uden at cookies havner i cachen. For andre regioner (f.eks. Kina) kan det være nødvendigt kun at levere bestemte sprogversioner – her kan CDN'en begrænse cache-nøglen afhængigt af oprindelsesland. I praksis fungerer en to-trins model godt: Globale PoP'er cacher alle sprog, lokale PoP'er (f.eks. i Kina) cacher kun tilladt indhold. Dokumentér denne konfiguration, og test den med brugere fra forskellige regioner. Brug værktøjer som ping og traceroute for at sikre, at cachen rammer korrekt.
Hvordan sikrer du, at dit flersprogede websted indlæses hurtigt, uden at besøgende ser forældet indhold? Vores guide forklarer, hvordan du optimerer caching med edge-servere, Vary-headere og målrettet invalidering for op til 24 sprogversioner. Lær, hvordan du mestrer balancen mellem performance og aktualitet.
Håndtering af dynamisk indhold og sessionsdata
Dynamisk indhold og sessionsdata udgør en særlig udfordring for caching af flersprogede websteder. I praksis betyder det, at personaliserede elementer som indkøbskurve, login-status eller sprogspecifikke brugerindstillinger ikke må caches globalt. En veletableret metode er at adskille offentlige og private cache-områder. Offentlige caches (edge, CDN) bør udelukkende bruges til statisk eller sjældent ændret indhold som navigationstekster, sidefødder eller sprogskifteknapper. Private caches (browser, brugerspecifikt proxy-niveau) håndterer derimod individuelle sessionsdata.
Til levering af dynamisk indhold på 24 sprog anbefales en to-trins strategi: 1) Brug en sessions-cookie, der gemmer brugerens sprog og region. Denne cookie bør ikke påvirkes af cachen – sæt den via JavaScript eller server-side. 2) Udskil personaliserede blokke (f.eks. 'Din indkøbskurv') via ESI (Edge Side Includes) eller client-side rendering. På den måde forbliver resten af siden cachebar, mens dynamiske dele indlæses individuelt. Erfaring viser, at denne tilgang øger cache-hit-rater betydeligt samtidig med personalisering.
En almindelig fejl er at cache sider med sessions-cookies uden passende Vary-headere. Sæt headeren Vary: Cookie, Accept-Language kun, hvis cookien rent faktisk påvirker sideudbyttet. Ellers kan det føre til uventede cache-træf – en bruger får en andens side, hvis cookien varierer. Kontrollér derfor nøje, om cookien er indholdsrelevant. For rent tracking-cookies uden indholdspåvirkning bør du ikke sætte Vary-header, men i stedet håndtere dem via JavaScript eller subresource-requests.
Konkret handlingsanbefaling: Definer for hver side en cache-klassificering: 'public' til overvejende statisk indhold (f.eks. forside, produktsider uden login), 'private' til sider med personoplysninger. Brug edge-segmenter eller automatiske CDN-regler til at udelukke dynamiske områder. Dokumentér cookie-brugen, og kontrollér regelmæssigt, om der er tilkommet nye dynamiske elementer, der påvirker caching. En sådan audit-rutine hjælper med at bevare cache-fordelene og samtidig håndtere sessionsdata korrekt. Vær også opmærksom på overholdelse af regler for behandling af personoplysninger – kontakt i tvivlstilfælde din databeskyttelsesrådgiver.

Overvågning og fejlfinding af cache-adfærd i flersprogede opsætninger
For at optimere ydeevnen for et flersproget websted med 24 versioner er systematisk overvågning af cache-adfærden uundværlig. Fejlagtige cache-konfigurationer fører ofte til øget latenstid, forældet indhold eller inkonsistente sprogvarianter. I praksis fungerer en flertrins tilgang godt: Først bør du analysere din CDN-udbyders logs for at identificere cache-hits og -misses pr. sprog og region. Vær opmærksom på usædvanligt lave træfprocenter (under 70 %) for enkelte sprogversioner – det tyder ofte på problemer med cache-nøgle-generering eller Vary-header-indstillinger.
Et effektivt fejfindingsværktøj er brug af specifikke HTTP-headere som Age og X-Cache. De viser, om et svar kommer fra cachen, og hvor gammelt det er. Brug CDN'ens egne debug-headere til at finde den præcise cache-nøgle. På den måde kan du kontrollere, om nøglen korrekt afspejler sprog og region. For eksempel bør et kald til den tyske forside fra Østrig have en anden cache-nøgle end samme kald fra Tyskland, hvis du tager højde for regionale forskelle. Fejlagtige nøgler fører til blandet indhold eller unødvendige back-end-forespørgsler.
Overvågningstips til praksis: Opsæt alarmer for pludselige stigninger i cache-fejlprocenter (5xx-fejl) eller gennemsnitlig svartid. Segmentér målingerne efter sprog, region og enhedstype. Mange CDN-platforme tilbyder færdige dashboards med filtreringsfunktioner efter header-værdier som Accept-Language. Brug disse til hurtigt at opdage uregelmæssigheder. Regelmæssig sammenligning af cache-fodaftryk (hash-værdier af cachelagret indhold) på tværs af sprogversioner kan desuden afsløre, om identisk indhold utilsigtet caches flere gange – spild af cache-kapacitet.
Praktisk handlingsanbefaling: Implementér en endpoint-logik, der for hver forespørgsel logger den anvendte cache-nøgle og sammenligner den med den forventede nøgle. Brug struktureret logning (f.eks. JSON-logs), som du kan analysere centralt. Udfør målrettede tests ved ændringer i sproglogik eller cache-konfiguration: Kald samme URL med forskellige Accept-Language-headere, og kontrollér svarheadere. Lav en tjekliste med de mest almindelige fejl (manglende Vary-header, forkert cache-nøgle), og gennemgå den efter hver opdatering. Dokumentér resultaterne, så du kan bruge dem ved fremtidige optimeringer. Vær opmærksom på, at nogle CDN-tjenester ikke leverer fuldstændige logs – vælg derfor en udbyder, der giver detaljerede indsigter, ellers bliver fejlfinding et gætværk.
Finjustering af TTL'er for forskellige indholdstyper
Den optimale Time-to-Live (TTL) varierer meget afhængigt af indholdstype og sprogversion. For en flersproget hjemmeside med 24 versioner er det vigtigt at tildele forskellige TTL'er for at balancere aktualitet og cache-effektivitet. Statisk indhold som CSS, JavaScript eller billeder har typisk en TTL på flere dage til uger. For en sikkerheds skyld anbefales en uge. Brug en cache-buster (f.eks. versionsnummer i URL'en) til invalidering, så du om nødvendigt kan tømme alle caches med det samme.
Sprogspecifikt indhold som oversættelser af navigation eller footer-tekster bør kun caches, hvis de sjældent ændres. En TTL på én dag er et godt udgangspunkt. Tjek dog regelmæssigt, om forældede versioner leveres efter oversættelsesopdateringer. Hvis du bruger et CMS med live-redigering, bør du udløse automatisk invalidering af berørte sider ved offentliggørelse af nye oversættelser. Dette kan gøres via webhooks eller API-kald til dit CDN. For sider med dynamiske blokke (f.eks. aktuelle nyheder) er en kortere TTL på få minutter passende, mens klassiske produktsider bør have en TTL på timer.
En særlig situation er cookie-baserede tilpasninger: Hvis siden varierer lidt afhængigt af sprog og region (f.eks. valutaangivelser), men kerneindholdet er identisk, bør du bruge en TTL på flere timer og kun indlæse den variable del via ESI eller AJAX. Undgå for lange TTL'er for sådanne hybridsider, da sandsynligheden for, at en bruger ser forældede priser, øges. I praksis har en gradueret tilgang vist sig effektiv: TTL_kort for sider med hyppige ændringer (f.eks. 5 minutter), TTL_mellem for normale tilfælde (1 time), TTL_lang for statisk indhold (12 timer til 1 uge). Hver indholdstype tildeles en TTL-klasse.
Konkret handlingsanbefaling: Opret en matrix med indholdstype, aktualitetskrav og sprogvariant. Fastlæg en TTL for hver kombination, og konfigurer den i dit CDN eller på webserveren. Gennemgå værdierne hver tredje måned eller efter større indholdsopdateringer. Brug analytiske værktøjer til at måle, hvor ofte indhold hentes, før dets TTL udløber – det viser, om TTL'en er for kort eller for lang. Sørg for, at TTL'en ikke kolliderer med gyldigheden af HTML-udgange i sessionskontekster. Udfør regressionstests for at sikre, at alle sprogversioner får den korrekte TTL. Kontakt en ekspert for dit specifikke CDN ved tvivl, da indstillinger varierer mellem udbydere. Husk, at for lange TTL'er øger cache-hit-raten, men kan føre til forældet brugeroplevelse ved indholdsændringer – en afbalanceret mellemvej er afgørende.
Tjekliste: Cache-implementering til flersprogede projekter
En struktureret tjekliste hjælper dig med at undgå typiske faldgruber ved caching af flersprogede hjemmesider. Gå punkterne igennem i den angivne rækkefølge for at sikre konsistent og performant levering af dine 24 sprogversioner.
1. **Fastlæg cache-key-strategi**: Definér, hvordan sprog og region indgår i cache-key. Brug enten en separat key per sprog (f.eks. `de-DE`, `fr-FR`) eller en kombination af domæne/sti og sprogparameter. Sørg for, at hver besøgende kun får den version, der er beregnet til dem. Sæt cache-key serversiden eller via CDN-regel, ikke via client-header.
2. **Sæt Vary-header korrekt**: Brug `Vary: Accept-Language` kun, hvis du rent faktisk leverer forskelligt indhold baseret på denne header. I praksis anbefales en sprogafhængig URL-struktur (f.eks. `/de/`, `/fr/`), så du kan udelade `Vary` eller reducere til `Vary: Cookie`. Tjek, om dit CDN understøtter og korrekt behandler Vary-headeren.
3. **Tilpas CDN-konfiguration**: Konfigurér dit CDN, så det behandler forskellige sprogversioner som separate cache-objekter. Brug edge-rules eller workers til at sætte cache-key baseret på URL eller cookie. Test konfigurationen med alle 24 sprog for at undgå overlap.
4. **Planlæg invalideringslogik**: Udvikl en strategi for delvis purge for kun at invalidere de sprogversioner, der er berørt af en ændring. Brug tags eller regulære udtryk, der henviser til sproget. Undgå fuld purge, da det påvirker alle versioner og sænker cache-hit-raten.
5. **Graduer TTL-værdier**: Fastlæg forskellige TTL'er for statisk indhold (f.eks. oversættelser, CSS, billeder) og dynamiske elementer (f.eks. personlige hilsener). Statiske ressourcer kan caches længere, dynamiske dele får kortere TTL eller udskilles via ESI (Edge Side Includes).
6. **Opsæt overvågning og test**: Overvåg cache-hit-raten per sprog og region. Indstil alarmer, hvis raten falder uventet. Udfør regelmæssige tests med forskellige sprog-headers for at sikre, at den rigtige version leveres. Dokumentér konfigurationen og vedligehold den ved udvidelser.
Fremtidsperspektiv: Edge-computing og personlig caching
Udviklingen af edge-computing åbner nye muligheder for caching af flersprogede hjemmesider. I stedet for kun at gemme indhold centralt kan du køre logik direkte på edge-noderne – for eksempel for at genkende sprog og region uden roundtrips til oprindelsesserveren. Dette reducerer latenstider og aflaster din infrastruktur.
En lovende tilgang er personlig caching baseret på brugerprofiler. I stedet for at have en separat cache-post for hver sprogkombination kan du dynamisk sammensætte leveringen på edge. Eksempel: En edge-worker læser sprogpræference-cookien, henter den passende oversættelse fra en hurtig key-value-store og renderer siden – alt inden for millisekunder. Sidens grundstruktur forbliver i cachen, kun de sprogspecifikke tekstblokke indsættes individuelt.
I praksis bør du dog overveje grænserne for personlig caching. For mange varianter (f.eks. sprog + region + brugergruppe) sænker cache-hit-raten drastisk. En hybridløsning anbefales: Statisk indhold (navigationslinjer, footer) caches fuldt per sprog, mens personlige elementer som hilsener eller tilbud indlæses via edge-funktioner. På den måde opnår du høje cache-hit-rater samtidig med individualisering.
Konkret kan du bruge edge-workers til at bestemme sprogversionen – enten via sti, cookie eller Accept-Language-header (med fallback). Worker sætter derefter cache-key tilsvarende. Til invalidering bruger du surrogate-key-tags, der sættes per sprog. På den måde sletter du kun de berørte sprogversioner ved en oversættelsesændring, uden at tømme hele cachen. Sørg for, at din løsning overholder databeskyttelsesreglerne (GDPR) – juridisk rådgivning anbefales her.
Fremtidssikker er den, der tidligt satser på edge-computing og opbygger cache-strategien modulært. Test worker-scripts først i et staging-miljø, og mål effekten på indlæsningstider og cache-effektivitet. På den måde kan du indføre personlig caching uden at gå på kompromis med ydeevnen for dine 24 sprogversioner.
Typiske faldgruber ved caching af flersprogede hjemmesider
Ved caching af flersprogede websteder lurer flere faldgruber, som selv erfarne teams overser. En almindelig fejl er manglende eller forkert angivet Vary-header. Sæt 'Vary: Accept-Language', men bemærk: Denne header alene er ikke tilstrækkelig, hvis du styrer sprog via URL'en (f.eks. /de/) eller en cookie. Så skal cache-nøglen eksplicit inkludere disse komponenter, ellers modtager brugerne den forkerte sprogversion. En anden faldgrube er antagelsen om, at alle CDN'er fungerer ens. Nogle CDN'er ignorerer bestemte Vary-headere eller har begrænsninger i antallet af varianter. Test derfor hver sprogvariant separat. Et andet problem er hybride tilgange: Delvis via URL, delvis via header. Hvis du f.eks. leverer startsiden via Accept-Language, men undersider via en sprogparameter, fører det til inkonsistent caching. Definer en ensartet strategi og implementer den i din caching-konfiguration. Invalidering er også en hyppig fejlkilde. Ved 24 sprog skal du sikre, at alle sprogvarianter slettes ved en indholdsændring. Glemmer du et sprog, ser besøgende forældet indhold. Brug derfor Partial Purge med tags eller Surrogate-Keys, der tildeler hver sprogversion en unik nøgle. Et andet punkt er pre-warming: Hvis du efter en deployment varmer alle sprogvarianter op, skal du sørge for, at hver sti anmodes med de korrekte headere. Ellers bliver kun standardsproget cachelagret, og den første anmodning fra et andet sprog rammer en langsom miss. Endelig bør du ikke vælge TTL'er for aggressivt. En for lang TTL for nyheder eller priser fører til forældede data. En for kort TTL spilder CDN-ressourcer. Differentier efter indholdstype: statiske sider (TTL 24 timer), produktdata (TTL 1 time), tilbud (TTL 10 minutter). Dokumenter disse beslutninger og kontrollér dem regelmæssigt vha. cache-hit-rater pr. sprog.
Værktøjer og overvågning til flersproget caching
For en vellykket caching af flersprogede websteder har du brug for værktøjer, der overvåger både caching-infrastrukturen og sprogspecifikke målinger. Start med CDN'ens egne analysedashboards som Cloudflare Analytics eller Fastly Observatory. Disse viser cache-hit-rater opdelt efter sti eller region. Sørg for at filtrere data efter sprog. En lav hit-rate for et bestemt sprog indikerer problemer med cache-nøglen eller Vary-headeren. Supplerende kan du bruge loganalyseværktøjer som Splunk eller ELK til at analysere anmodninger med HTTP-headeren 'Accept-Language'. På den måde kan du se, om din sprogdetektering fungerer korrekt. Et andet vigtigt værktøj er en dedikeret caching-testproxy. Brug curl med forskellige Accept-Language-headere og kontrollér svar-headere (f.eks. X-Cache: HIT/MISS og Vary). Automatiser disse tests i din CI/CD-pipeline. Derved sikrer du, at hver sprogversion cachelagres korrekt. Til invalidering er værktøjer som Fastly Purge API eller AWS CloudFront Invalidation-tag vigtige. Definer en unik Surrogate-Key for hvert sprog (f.eks. 'lang_de') og invalidér alle relevante nøgler ved indholdsændringer. Et script, der udløser invalidering for alle 24 sprog, forhindrer glemsomhed. Overvågningstjenester som Grafana eller Datadog kan fodres med CDN-målinger. Opret dashboards, der viser cache-hit-rater pr. sprog, miss-årsager (f.eks. 'Miss på grund af cookie') og latenstid. Indstil alarmer, hvis hit-raten for et sprog falder under en tærskelværdi. Derudover bør du jævnligt gennemføre manuelle stikprøver: Kald hver sprogversion op, og kontrollér, om indholdet er opdateret. Værktøjer som Checkly eller Pingdom kan automatisere dette. Husk, at caching-infrastruktur i praksis hele tiden skal justeres. Før en logbog over ændringer i caching-konfigurationen, og kontrollér effekten på målingerne. På den måde opnår du en dyb forståelse af samspillet mellem sprog, cache og CDN.
blog.faqT
Hvordan undgår jeg, at brugere får vist den forkerte sprogversion?
Kontroller først konfigurationen af Vary-headeren: Den bør være sat til Accept-Language eller en individuel cookie, som dit websted bruger til sprogvalg. Sørg også for, at cache-nøglen indeholder sproget. Hvis du arbejder med URL-baserede sprog (f.eks. /da/), skal du sikre korrekte omskrivningsregler. En regelmæssig test med forskellige Accept-Language-værdier afslører fejl.
Hvilken rolle spiller Edge Caching for ydeevnen på flersprogede hjemmesider?
Edge Caching fremskynder leveringen ved at gemme indhold geografisk tæt på brugeren. For flersprogede hjemmesider betyder det: Hver sprogversion skal være til stede på edge-serverne. En udfordring er det højere antal cache-poster (sprog × region × version). Effektiv caching kræver derfor gennemtænkte TTL-værdier og ugyldiggørelsesstrategier for at balancere lagerplads og aktualitet.
Hvad gør man ved dynamisk indhold, der adskiller sig pr. sprog?
Dynamisk indhold som personlige hilsner eller indkøbskurvdata kan ikke caches generelt. Adskil statiske og dynamiske elementer. Brug Edge Side Includes (ESI) eller JavaScript til at indlæse personlige dele efter. For sprogversionen selv kan du stadig cache grundstrukturen. En anden mulighed: Cache kun de offentlige indhold og indlæs brugerspecifikke data asynkront. Vær opmærksom på ensartet sprogvalg.