Spring til indhold
MetodeIndsigter

GDPR på jeres website: cookies, samtykke og datastrømme

Banneret er UI. Datastrømmen er det, I skal kunne forsvare.

En cookie-banner er ikke GDPR. Det der tæller, er hvad browseren faktisk sender, hvem der modtager det, og om samtykket var et valg.

10 minutters læsning
Stiliseret CI-pipeline med checks og gates — processen der afgør, hvilke scripts der må køre, før noget når produktion.

Metode & compliance

Hvis I søger efter GDPR på hjemmesiden, cookie-samtykke eller regler for tracking, har I typisk allerede et banner. Det er sjældent problemet. Problemet er, at banneret siger ét, og netværksfanen siger noget andet: analytics kører før nogen har trykket, en pixel ligger i GTM "fordi marketing bad om det", og chat-widgeten sender sideindhold til en leverandør, I aldrig har sat på databehandlerlisten.

Vi møder to slags sites. Det ene har et banner, der kun kan accepteres — reject er gemt, eller pre-ticked. Det andet har et pænt CMP og stadig tolv kald til tredjepart på første load. Begge fejler den samme test: kan I pege på hver datastrøm, sige hvilket grundlag den har, og slå den fra, når grundlaget er samtykke, og samtykket mangler? Hvis nej, har I et website-problem. Ikke et jura-problem, I kan outsource til en tekst i footeren.

TL;DR

De vigtigste pointer

  • GDPR på et website er tre lag: hvad I skriver, hvilke cookies I sætter, og hvilke kald browseren faktisk laver.
  • Et banner er kun ærligt, hvis reject er lige så nemt som accept, og hvis scripts faktisk venter.
  • Nødvendige cookies er få. Analytics, pixels, session replay og de fleste chat-widgets er det ikke.
  • GTM er ikke et grundlag. Det er et rør. Hvis noget ligger i røret uden samtykke, er det jeres kald.
  • Privatlivspolitikken skal spejle netværksfanen — ikke en skabelon fra 2018.
  • Kortlæg datastrømmene, før I køber et nyt CMP. Ellers pynter I på et læk.

Hvorfor det her overhovedet er vigtigt

Et website er en af de steder, I behandler personoplysninger uden at tænke på det som et system. En IP, et cookie-id, en formular, et chatvindue, en video der kalder hjem. GDPR spørger om formål, grundlag, minimering og de registreredes rettigheder. Cookie-reglerne — ePrivacy, som Danmark har implementeret — spørger derudover, om I må sætte eller læse noget i browseren, før der er et gyldigt samtykke, medmindre det er strengt nødvendigt for den tjeneste, brugeren bad om.

De to regler bliver ofte mast sammen til "vi skal have et banner". Banneret er UI. Det løser ingenting, hvis Tag Manager fyrer Facebook, LinkedIn og et heat-map af, før nogen har valgt. Det løser heller ingenting, hvis I påstår legitim interesse i al analytics, mens værktøjet sætter tredjeparts-cookies og bygger en profil på tværs af sites.

Det her er et andet problem end hvor serveren står. Hosting og underleverandører i cloud er en residency- og DPA-samtale. Website-GDPR er det, der forlader browseren på en fremmed maskine: hvem får URL, user-agent, formularfelter, optage af sessionen. I kan have data i en EU-region og stadig lække et browse-mønster til fem amerikanske pixels. Begge dele skal I kunne forklare. De erstatter ikke hinanden.

Vi skriver det, fordi bureauer elsker at sælge et CMP som færdigt arbejde. CMP'et er et værktøj. Arbejdet er at kende jeres kald, at gate dem, og at lade politikken beskrive virkeligheden. Uden det er I compliant i Figma og i brud i production.

De tre lag: politik, cookies og det browseren faktisk sender

Første lag er teksten. Privatlivspolitik og cookie-deklaration skal sige, hvem I er, hvad I samler ind, hvorfor, hvor længe, og hvem der er databehandler. Det er kedeligt, og det er nødvendigt. Det er også det lag, folk opdaterer sidst. En politik der stadig nævner et værktøj, I slukkede, eller mangler det chat-produkt, I tændte i sidste uge, er et signal om, at I ikke har et inventar.

Andet lag er cookies og lignende teknik — localStorage, pixels, fingerprint-agtige signaler. Nødvendige er de, uden hvilke den tjeneste brugeren bad om, ikke virker: kurv, login-session, load-balancing, et samtykke-valg I skal huske. Alt der måler, retargeter, personaliserer på tværs eller optager sessionen, er typisk samtykke. "Vi bruger det til at forbedre sitet" er et formål. Det er ikke automatisk et grundlag.

Tredje lag er netværket. Åbn DevTools. Reload. Se hvad der går, før I klikker. Det er jeres rigtige datakort. Et kald til et analyse-domain, et dobbeltklik-id, en CNAME der ligner first-party men peger på en vendor — det er behandling. Hvis banneret stadig viser "afventer valg", og kaldet allerede er sket, er banneret dekoration.

De tre lag skal stemme overens. Politik uden kald er fiktion. Kald uden politik er det, en tilsynssag peger på. Cookies uden kald kan være rester. Kald uden cookies kan stadig være personoplysninger. Tænk i strømme, ikke i "har vi husket cookie-banneret".

Nødvendigt er det, der får den handling, brugeren bad om, til at virke. En kurv. En session efter login. Et load-balancer-cookie. Et samtykke-cookie der husker "nej tak". Et security-token. Det er en kort liste. Den bliver ikke længere, fordi marketing kalder et værktøj "essentielt". Hvis sitet virker uden kaldet, var kaldet ikke nødvendigt.

Analytics er det hyppigste selvbedrag. First-party, cookieless, aggregeret måling kan i nogle designs forsvares uden samtykke — det er et juridisk kald, og det kræver, at I faktisk har slået identifikatorer og deling fra. Klassisk pageview med et klient-id, der følger brugeren, og som I blander med ads, er ikke det design. Antag ikke "statistik er legitim interesse" og lad GTM stå åben. Byg målingen, så I kan forklare den, eller spørg om lov.

Marketing-pixels, A/B-værktøjer der profiler, session replay, most heatmaps, embedded sociale feeds og "smart" chat der sender URL og snippet til en model, er samtykke-land. Chat kan være funktionel, hvis den er jeres egen, først åbner efter et klik, og ikke lækker siden til en tredjepart før tid. Den chat, der injector et script på alle sider og lytter med det samme, er det ikke.

Embeds er det, folk glemmer. YouTube, maps, en booking-iframe, et review-widget. De sætter ofte cookies, I ikke har listet. En ærlig løsning er at vise en pladsholder og først loade embeddet efter ja — eller efter et bevidst klik på "vis kort". Det er mere arbejde end at paste et iframe. Det er også det, der gør politikken sand.

Funktionelt first-party vs. det banneret skal kunne slukke

Typisk funktionelt

Uden det virker den handling, brugeren bad om, ikke.

  • Login-session, kurv, CSRF, load-balancing
  • Selve samtykke-valget, så I kan huske et nej
  • Indhold I hoster selv, uden tredjeparts-id
  • En chat der først loader efter et bevidst åbent klik og jeres DPA

Typisk samtykke — eller lad være

Det der måler, retargeter, optager eller deler.

  • Ads-pixels, CAPI, linked audiences
  • Session replay og de fleste heatmaps
  • Klassisk analytics med et vedvarende klient-id
  • Embeds og tags i GTM, I ikke kan pege på et grundlag for

Sådan kortlægger I datastrømmene på en eftermiddag

Uden det her inventar er ethvert CMP gætteri. I kan ikke styre det, I ikke har set.

  1. 01

    Åbn et rent vindue og reload forsiden

    Inkognito, uden adblock. Netværksfanen, cookies, localStorage. Skriv hvert tredjeparts-domain ned. Det I ikke kan navngive, er risiko — ikke "sikkert noget fra temaet".

  2. 02

    Gentag efter reject, efter accept, og på en tak-side

    De tre tilstande lyver ofte forskelligt. Reject skal ligne et site uden marketing-kald. Accept må tænde det, I har beskrevet. En receipt-side er der, pixels elsker at gemme sig.

  3. 03

    Gennemgå Tag Manager som om det var produktion

    Hvert tag: navn, trigger, om det venter på samtykke, hvilke felter det sender. Fjern det, I ikke kan forklare. GTM er et deploy-rør. Det er ikke et frirum.

  4. 04

    Par datastrøm med grundlag og databehandler

    For hver strøm: formål, grundlag, leverandør, DPA, hvor data lander. Tomme celler er opgaver. "Vi har altid haft den pixel" er ikke et grundlag.

  5. 05

    Først derefter: ret banner, gates og politik

    Gør reject synlig. Gate scripts så de ikke loader før ja. Opdater politikken til det, I faktisk gør. Så kan I skifte CMP senere uden at starte forfra.

Et cookie-banner er ærligt, når netværksfanen efter "nej tak" er kedelig. Ellers er det grafik.

Sådan gates scripts — så banneret ikke er teater

Det tekniske krav er simpelt at sige og nemt at fejle: intet samtykke-krævende script må evalueres, før valget er ja. Ikke "må ikke sætte cookie". Evalueres. Et script der kører og så "vælger ikke at sætte", har ofte allerede sendt IP og URL. Server-side tagging flytter kaldet. Det sletter det ikke. Hvis I sender de samme events til samme vendor, har I stadig en behandling — I har bare gjort den sværere at se i browseren.

På et Next.js-site betyder det: tredjepart i en loader, der læser samtykke-state, ikke i root-layout som default. Chat, analytics, pixels, embeds. Consent Mode og tilsvarende signaler er nyttige, når I allerede har et ærligt inventar. De er ikke en fritagelse til at loade tagget alligevel. Et default-on tag med "consent unknown" er det mønster, vi ser oftest — og det er det forkerte default.

På WordPress betyder det: temaet og de plugins, der injector i head, ikke kun CMP-pluginet. Et SEO-plugin, et chat-plugin og et pixel-plugin kan alle ignorere banneret. Ét sted der styrer, hvad der må loade, slår fem plugins der hver især "støtter GDPR".

Tilbagekaldelse er det, I glemmer bagefter. Brugeren skal kunne sige nej i morgen. Så skal I slukke de tags, slette de cookies I kan, og lade politikken sige hvordan. Hvis "administrer cookies" linker til en død anker, har I bygget et museum. Sæt det i footeren, og test at et nej faktisk fjerner kaldet ved næste load.

Hvad I typisk bør gøre i den situation, I står i

Venstre er det, I typisk har. Højre er det næste skridt, vi typisk anbefaler.

  • Situation

    Banneret findes, men kaldene kører før et valg

    Næste skridt

    Gate tags. CMP uden gate er UI — ret load-rækkefølgen først

  • Situation

    I kan ikke liste tredjeparts-domains på én side

    Næste skridt

    Inkognito-inventaret. Køb ikke et nyt banner, før I har listen

  • Situation

    Marketing insisterer på at alle pixels er "essentielle"

    Næste skridt

    Slå dem fra en uge. Virker sitet, var de ikke essentielle

  • Situation

    I har en kundeportal med login bag sitet

    Næste skridt

    Skil marketing-sitet fra app-sessionen. Portal-cookies er ikke et alibi for ads

  • Situation

    Politikken nævner værktøjer, I ikke længere bruger

    Næste skridt

    Opdater teksten til netværksfanen. En gammel skabelon er et brud i slow motion

Tjekliste før I kalder sitet GDPR-klar

Hvis I mangler flere af punkterne, er banneret sat op før arbejdet — ikke omvendt.

  • Reject er synlig på første skærm og koster ikke flere klik end accept
  • Et rent reject-load viser ikke marketing- eller replay-kald
  • Hvert tredjeparts-domain har formål, grundlag og en databehandler I kan pege på
  • GTM og tema-plugins fyrer ikke tags med default-on ved ukendt samtykke
  • Privatlivspolitik og cookie-liste matcher det, I faktisk loader efter ja
  • Brugeren kan ændre valget senere, og det slukker kaldet ved næste load

Spørgsmål vi får igen og igen

  • Må vi bruge Google Analytics uden samtykke?

    Ikke som det oftest er sat op. Et klient-id, der følger en browser, blandet med ads eller delt med andre produkter, er sjældent det, I kan kalde strengt nødvendigt — og legitim interesse er ikke et frirum, I kan påberåbe jer uden at have tænkt minimering og indsigelse. Cookieless, første-parts, aggregeret måling kan være et andet design. Det kræver, at I faktisk har slået det andet fra. Spørg en jurist om jeres konkrete setup. Antag ikke at et GA-snippet i head er harmløst.

  • Er et cookie-banner nok til at overholde GDPR?

    Nej. Banneret er samtykke-UI til det, der kræver samtykke. GDPR er også formål, databehandlere, sletning, indsigt, minimering og at I ikke samler ind "fordi feltet var på formularen". Et site uden banner og uden tracking kan være mere ærligt end et site med banner og tolv pixels. Start med inventaret. Så ved I, om I overhovedet har brug for et CMP.

  • Hvad med chat-widgets og AI-assistenter på sitet?

    Hvis scriptet loader på alle sider og sender URL, snippet eller formularfelter til en leverandør, er det en behandling — ofte før nogen har bedt om hjælp. Gate det bag samtykke eller bag et bevidst klik, hav en DPA, og skriv det i politikken. En assistent der først vågner efter "åbn chat", og som ikke lækker siden i baggrunden, er et andet produkt end en tracker med en taleboble på.

  • Tæller server-side tagging som at vi "ikke tracker i browseren"?

    Nej. I har flyttet røret. Formålet og modtageren er de samme, hvis I stadig sender de samme events. Det kan være fornuftigt af performance- og kontrolhensyn. Det fjerner ikke pligten til grundlag, og det fjerner ikke, at I skal kunne slukke for det, der kræver samtykke. En CNAME der ligner jer, men tilhører en vendor, er stadig deres behandling — bare sværere at få øje på.

  • Hvad skal vi kræve af et bureau, der "sætter GDPR op"?

    Et inventar af kald, et banner hvor reject er ærligt, gates der er testet i tre tilstande, og en politik der matcher. Hvis de kun kan levere et plugin og en standardtekst, har de sat UI op. Bed om et screenshot af netværksfanen efter reject. Hvis den ikke er kedelig, er opgaven ikke færdig — uanset hvad tilbuddet kaldte det.

Hvis banneret siger ét, og netværksfanen noget andet

Lad os kortlægge de kald, sitet faktisk laver.

En eftermiddag med inventar, gates og en ærlig reject-sti er ofte nok til at skille et rigtigt samtykke fra et banner, I har sat for at få ro.

Hvorfor vi skrev den her

Det er sådan vi tænker — og det er det vi bygger.

Vores indsigter handler om det vi rent faktisk leverer. Hvis det her ramte noget du arbejder med, så er der en konkret service der ligger tæt på.