Metode & samtykke
Hvis I søger efter cookie banner regler, eller efter samtykke cookies hjemmeside, står I typisk ét sted: I har et banner, I har et CMP, og I er usikre på om det tæller. Nogen har gemt 'kun nødvendige' under et ekstra klik. Nogen har forhåndsudfyldt statistik. Nogen har et pænt Cookiebot-lag, og Tag Manager fyrer alligevel før nogen har trykket. Nogen sætter et cookie-wall: læs artiklen, eller acceptér.
GDPR-posten handler om de tre lag — politik, cookies og det browseren faktisk sender — og om grundlag. Analytics-posten handler om hvad I måler efter et ærligt ja, eller uden cookies. Den her handler om kontrollen, I viser: knapperne, kategorierne, og om de scripts I har sagt ja-til, er de scripts der venter. Et ærligt cookie-banner er et UI-kontrakt. Det er ikke et logo, I kan købe færdigt.
TL;DR
De vigtigste pointer
- Afvis skal være lige så synligt og ét klik som accept. Ellers er samtykket ikke et valg.
- Intet ikke-nødvendigt script må køre, før der er et ja — heller ikke via Tag Manager.
- Kategorierne på banneret skal være de tags, I faktisk gater. Ellers er teksten fiktion.
- Et CMP er et produkt. Hvis det selv tracker, eller gemmer nej, er det en del af bruddet.
- Nødvendige cookies er få. 'For at forbedre sitet' er et formål, ikke et grundlag.
- Testen er: afvis, reload, ny browser, netværksfane. Er den travl, er banneret grafik.
Hvorfor det her overhovedet er vigtigt
Et banner, der ikke er et valg, koster jer det, I troede I havde købt: et samtykke I kan forsvare. Cookie-reglerne i Danmark — bekendtgørelsen, der implementerer ePrivacy — kræver et gyldigt ja, før I sætter eller læser noget der ikke er strengt nødvendigt for den tjeneste, brugeren bad om. Gyldigt betyder frit, specifikt, informeret. Et kæmpe 'Acceptér alle' og et gråt 'Indstillinger' tre klik nede, er det modsatte. I har et designproblem, I kalder compliance.
Teams køber den forkerte færdig-pakke. De sætter et CMP ind, fordi det ligner det, de andre sites har, og tror arbejdet er gjort. Arbejdet er at kende jeres tags, at lade nej slukke dem, og at lade knapperne være ærlige. Uden det er CMP'et et lag oven på det samme læk. GDPR-indlægget er kortet over strømmene. Her er det UI, der skal holde kortet.
Det er også et tillids- og SEO-spørgsmål, ikke kun et juridisk. Et cookie-wall, der spærrer artiklen, er en dårlig måde at bede om ja — og en dårlig måde at lade Google læse siden. Et banner der skubber LCP, fordi det henter et tungt vendor-script før first paint, er et performance-problem, I har kaldt 'nødvendigt'. Banneret må gerne være der. Det må ikke være den ting, der slår sitet ihjel, eller det eneste I har gjort.
Vi skriver det, fordi 'cookie banner' er blevet et produkt, I installerer før I har en sætning om hvad der må køre på nej. Et ærligt banner er kedeligt: to knapper, få kategorier, scripts der venter, og en netværksfane I tør vise en tilsynsførende. Uden den sætning har I et overlay. I har ikke samtykke.
Hvad et ærligt banner faktisk er — og hvad det ikke er
Et ærligt cookie-banner er tre ting på én skærm: I fortæller hvad I vil sætte, I lader brugeren sige ja eller nej uden at jage, og I holder det I lovede bagefter. Afvis og accept sidder ved siden af hinanden. 'Tilpas' er tilladt som et tredje — det må ikke være den eneste vej til nej. Når valget er givet, husker I det, og I fyrer kun det, der fik ja.
Det er ikke GDPR-kortet. Kortet er politikken, cookielisten og netværket — det har vi skrevet andetsteds. Banneret er kontrollen, der skal matche kortet. Hvis kontrollen er pæn, og kortet er et læk, har I et teater-banner. Hvis kortet er ærligt, og kontrollen gemmer nej, har I et teater-samtykke. I skal have begge. Den her post er kun kontrollen.
Det er heller ikke jeres måling. First-party analytics efter samtykke er hvad I gør med et ja, eller hvordan I måler uden cookies. Banneret må ikke være det sted, I 'løser' analytics ved at kalde alt nødvendigt, eller ved at tænde Consent Mode og lade kaldet gå alligevel. Hvis målingen kræver ja, så vent. Hvis den kan køre uden cookies, så lad den køre uden at lyve i banneret.
Og det er ikke et cookie-wall. At spærre indholdet bag accept er ikke et frit valg. Brugeren kom for at læse eller købe. I må bede om ja til statistik. I må ikke holde siden som gidsel. Nødvendige cookies til kurv og login må sættes, fordi tjenesten ellers ikke virker. Resten venter. Hvis I ikke kan vise siden uden ti tags, er problemet tags — ikke at brugeren sagde nej.
Det der typisk går galt, når nogen siger banneret er på plads
Den første fejl er knapperne. Accept er stort. Afvis er 'Indstillinger', så 'Slå alt fra', så 'Gem'. Tre klik til nej, ét til ja. Det er et dark pattern, også når jura-teksten i footeren er fin. Læg de to valg på første skærm. Tilpas må følge med. Det må ikke være fælden.
Den anden fejl er at scripts ikke venter. Banneret renderer. GTM er allerede i `<head>`. Facebook, LinkedIn, et heatmap, en chat — de kører på pageview, 'fordi containeren er sat sådan op'. CMP'et har et callback, I aldrig har hængt tags op i. Så er banneret et lag. Testen er netværket før klik, og netværket efter nej. Begge skal være kedelige, undtagen det I har kaldt nødvendigt.
Den tredje fejl er at CMP'et selv er trackeren. Nogle samtykke-produkter sætter egne cookies, kalder hjem, eller viser 'partnere' i et katalog, I aldrig har læst. Banneret skal kunne forklare sig selv. Hvis vendoren kræver et ja for at vise banneret, har I købt den forkerte vendor. Nødvendigt er at huske valget. Det er ikke at profilere den, der ikke har valgt endnu.
Den fjerde fejl er kategorier, der ikke matcher tags. Banneret siger 'statistik og marketing'. I GTM ligger ti tags, hvoraf tre er chat, session replay og et A/B-værktøj, I har puttet i 'statistik'. Brugeren sagde ja til én ting. I tændte en anden. Kortlæg tag for kategori, eller skær kategorierne til det I faktisk har. En løgn i UI er stadig en løgn, når den er sat i et CMP.
Teater-banner vs. ærligt banner — to overlays, to slags nej
Teater-banneret
Et logo og et ja. Nej er gemt. Scripts kører alligevel.
- Acceptér alle i brandfarve; afvis tre klik nede eller slet ikke
- Kategorier forhåndsudfyldt, eller 'legitim interesse' slået til
- GTM fyrer på load; CMP'et er et lag ovenpå
- Cookie-wall, eller et vendor-katalog I ikke har læst
Det ærlige banner
To valg på første skærm. Scripts venter. Netværket efter nej er kedeligt.
- Afvis og accept ved siden af hinanden, samme vægt, ét klik
- Ingen pre-ticks; nødvendigt er en kort, ærlig liste
- Hvert ikke-nødvendigt tag hænger på et ja i den rigtige kategori
- I tør åbne netværksfanen efter nej og vise den frem
Sådan laver I et banner, der faktisk er et samtykke
Uden den her rækkefølge får I et overlay, I kalder færdigt.
- 01
Inventér scripts — ikke cookies først
Åbn netværket på en kold browser. Skriv hvert kald, I ikke selv hoster: analytics, pixels, chat, A/B, replay, video-embeds der sætter cookies. Cookies kommer af kald. Hvis I starter i en cookieliste fra 2022, glemmer I CNAME'er og tags uden cookie. GDPR-indlægget er kortet. Her skal I bare have listen, banneret skal styre.
- 02
Skil nødvendigt fra resten — og vær nærige
Nødvendigt er det, uden hvilket den tjeneste brugeren bad om, dør: kurv, login-session, load-balancing, selve samtykke-valget. Statistik, marketing, chat der sender sideindhold, session replay, de fleste embeds — det er ja. 'Vi bruger det til at forbedre sitet' er et formål. Det flytter ikke noget over på nødvendig-listen.
- 03
Tegn to knapper på første skærm — så tilpas
Acceptér alle. Kun nødvendige. Samme størrelse, samme sted. Tilpas er et tredje, hvis I har flere kategorier. Ingen pre-ticks. Ingen 'luk krydset betyder ja'. Ingen wall foran artiklen. Hvis designeren siger at nej-knappen 'ødelægger konverteringen', så er det et ærligt argument om at I vil have færre ja. Det er ikke et argument for at skjule knappen.
- 04
Gat hvert tag — også dem i Tag Manager
Bannerets callback er sandheden, først når tags lytter. I Next.js betyder det typisk: indlæs ikke vendor-scripts før valget, og indlæs dem kun i den kategori der fik ja. I WordPress betyder det: pluginet må ikke injecte på pageview 'for en sikkerheds skyld'. GTM er et rør. Hvis noget ligger i røret uden gate, er det jeres kald, ikke Google Tags.
- 05
Test nej, reload og en ny browser — så skriv hvad I husker
Afvis. Reload. Åbn en privat profil. Netværket skal være kedeligt. Gentag efter en deploy og efter nogen har 'bare tilføjet en pixel'. Gem valget så I ikke spørger hver time — og så I kan dokumentere at nej blev husket. Hvis I ikke kan genskabe et nej uden at rydde cookies i hånden, husker I ikke samtykket. I husker et håb.
“Banneret er ærligt, når nej er et klik, og netværket bagefter er kedeligt.”
CMP, WordPress og Next.js — samme pligt, forskellige fælder
Et CMP kan være rigtigt, når I har mange tags og flere sites, og I vil have ét sted at slå fra. Det er forkert, når I køber det for at undgå at kende jeres kald. Læs hvad vendoren selv sætter. Slå deres 'partnere' fra, hvis I ikke har dem. Hvis CMP'et ikke kan vise afvis ved siden af accept uden et enterprise-flag, så har I det forkerte produkt — eller I har konfigureret teater. Et lille custom banner på et site med tre tags er ofte ærligere end et katalog, I ikke vedligeholder.
Et WordPress-site dør typisk i plugin-laget. Et cache-plugin, et 'performance'-plugin, et chat-plugin, et pixel-plugin der skriver i `head` uden at spørge CMP'et. Banneret kan være pænt, og theme'et fyrer alligevel. Inventér med et cache-bypass og en kold browser. Hvis I ikke kan pege på det filter, der stopper scriptet, har I ikke gatet. I har installeret.
Et Next.js-site dør typisk i at nogen putter GA eller et chat-widget i `layout.tsx` 'midlertidigt', eller i at en tag-manager-container ligger i root fordi en kampagne skulle live i går. App Router gør det nemt at loade noget globalt. Det gør det også nemt at loade det før valget. Hold vendor-scripts ude af root. Indlæs dem i en komponent der læser samtykket. Preview-deploys er et godt sted at vise en kollega netværksfanen efter nej — før det når prod.
Hvis I allerede har GDPR-kortet og first-party-målingen på plads, og banneret stadig føles som det svage led, så er det fordi det er det. Kortet uden knapper er en PDF. Målingen uden et ærligt nej er et håb. Banneret er det, brugeren ser. Det skal kunne bære de to andre.
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
Vi har et CMP, og 'kun nødvendige' ligger under Indstillinger
Næste skridt
Læg afvis på første skærm. Et dyrere CMP retter ikke et skjult nej
Situation
Banneret er pænt, og netværket kører før nogen har trykket
Næste skridt
Gat tags. Overlayet er ikke samtykket. Netværket er
Situation
Vi vil kalde analytics nødvendig, så grafen ikke dør
Næste skridt
Så er det ikke nødvendigt. Mål efter ja, eller mål uden cookies — det er et andet indlæg
Situation
Vi har tre tags og overvejer et stort consent-platform
Næste skridt
Et lille ærligt banner slår et katalog, I ikke vil vedligeholde. Køb CMP'et når tag-listen er lang
Situation
Vi vil spærre indholdet indtil de accepterer
Næste skridt
Det er ikke et frit ja. Vis siden. Bed om statistik. Lad nej betyde nej
Tjekliste før I kalder banneret ærligt
Hvis I mangler flere af punkterne, er sætningen samtykke — overlayet er grafik.
- Afvis og accept sidder på første skærm, samme vægt, ét klik
- Ingen kategori er forhåndsudfyldt, og krydset betyder ikke ja
- Netværket før valg og efter nej er kedeligt, undtagen det I har kaldt nødvendigt
- Hvert tag har en kategori, I kan pege på i banneret
- CMP'et eller jeres eget banner tracker ikke før et ja
- I har gentaget testen efter sidste pixel og sidste plugin-update
Spørgsmål vi får igen og igen
Hvad kræver cookie-reglerne af banneret på et dansk site?
Et gyldigt samtykke før I sætter eller læser noget, der ikke er strengt nødvendigt for den tjeneste, brugeren bad om. Gyldigt betyder frit, specifikt og informeret — afvis lige så nemt som accept, ingen pre-ticks, og information om hvad I sætter. Banneret er UI'et for det ja. Det er ikke hele GDPR. Datastrømmene og politikken er et andet indlæg. Her skal knapperne og gaten kunne bære det ja, I påstår I har.
Er et cookie-banner det samme som at overholde GDPR?
Nej. Et banner er kontrollen. GDPR er også formål, grundlag, minimering, databehandlere og det, browseren faktisk sender. Vi har skrevet det kort andetsteds. I kan have et pænt banner og et læk, eller et ærligt kort og et skjult nej. Den her post retter kontrollen. Den erstatter ikke kortet, og den erstatter ikke en first-party-måling, I stadig kan forsvare efter et nej.
Må vi bruge et CMP, eller skal vi bygge banneret selv?
Begge dele kan være ærlige. Et CMP er rigtigt, når tag-listen er lang, og I vil slå fra ét sted. Det er forkert, når I køber det for at undgå inventaret, eller når vendoren selv tracker før ja. Et lille custom banner er rigtigt på et site med få tags, hvor I kan pege på hver gate. Vælg det, I kan vedligeholde. Et katalog I aldrig åbner, er teater med et bedre logo.
Må vi spærre sitet bag accept, så vi ikke mister måling?
Ikke hvis I vil kalde det et frit samtykke. Brugeren kom for at læse eller købe. I må bede om ja til statistik. I må ikke holde siden som gidsel. Hvis grafen dør ved nej, er det prisen for et ærligt valg — eller I måler uden cookies, som analytics-indlægget handler om. Et wall er hvordan I får klik på ja og et samtykke, I ikke kan forsvare.
Hvordan tester vi at banneret faktisk styrer scripts?
Kold browser. Ingen klik endnu — netværket skal være kedeligt. Afvis — reload — stadig kedeligt. Acceptér én kategori — kun de tags. Ny privat profil, så I ikke tester jeres eget gemte ja. Gentag efter hver pixel og hvert plugin. Hvis I kun kigger på at banneret renderer, tester I overlayet. Samtykket sidder i de kald, der ikke sker.
Hvis I har et CMP og en travl netværksfane efter nej
Lad os skille knapper, tags og teater ad.
To ærlige knapper og en kedelig fane slår et overlay, I kalder samtykke.
