ookies: functioneel versus niet-functioneel, met voorbeelden
De wet vraagt geen toestemming voor cookies die strikt noodzakelijk zijn om een dienst te leveren die je zelf hebt gevraagd. Voor al het andere wel, vooraf. Het verschil tussen die twee is de hele cookiewet, en het wordt structureel verkeerd getrokken. Hier staat per soort cookie of hij zonder toestemming mag, met echte voorbeelden en de toets die je zelf kunt doen.
De enige vraag die telt¶
De cookiewet, artikel 11.7a van de Telecommunicatiewet, kent maar twee uitzonderingen op de toestemmingsplicht. Een cookie mag zonder toestemming als hij dient om communicatie over een netwerk uit te voeren, of als hij strikt noodzakelijk is om een dienst te leveren die de gebruiker zelf uitdrukkelijk heeft gevraagd.
Let op het woord strikt. Niet handig, niet gebruikelijk, niet nuttig voor de organisatie. Strikt noodzakelijk voor de dienst die de bezoeker vroeg. De toets is: valt de dienst om zonder deze cookie, vanuit het perspectief van de bezoeker?
Dat is de hele wet. Al het andere volgt daaruit. Toch wordt het structureel verkeerd getrokken, en het patroon is altijd hetzelfde: de organisatie bepaalt wat noodzakelijk is vanuit haar eigen bedrijfsvoering, niet vanuit de dienst die de bezoeker aanvroeg.
Letterlijk: wat ik aantrof voor de toestemmingsvraag¶
Hieronder staan de cookies die ik op Nederlandse overheidssites daadwerkelijk aantrof in de modus waarin de bezoeker niets deed. Geen klik, geen keuze, alleen de pagina openen. De aantallen komen uit de scan van 14 juli 2026 over 1.718 sites.
Dit mag zonder toestemming (functioneel):
JSESSIONID 48 sites sessie op een Java-server, houdt je ingelogd
ASP.NET_SessionId 22 sites idem op een .NET-server
PHPSESSID idem op PHP, de bekendste van de drie
Archiefsessid 32 sites sessie binnen een archiefomgeving
GUEST_LANGUAGE_ID 18 sites onthoudt je taalkeuze
COOKIE_SUPPORT 18 sites test of je browser cookies aanneemt
cookies_consent 17 sites onthoudt je eigen cookiekeuze
OptanonConsent idem, van OneTrustDe laatste twee verdienen toelichting, want ze zorgen voor verwarring. De cookie die jouw keuze onthoudt is zelf functioneel. Zou hij dat niet zijn, dan moest je bij elke pagina opnieuw kiezen, en dat is precies de dienst die je vroeg. Een toestemmingsmodule mag dus een cookie zetten. Wat hij niet mag, is naast die keuze-cookie ook nog telemetrie over jou wegsturen. Zie Je cookiebanner is zelf een tracker.
Dit mag niet zonder toestemming, en stond er toch:
stg_traffic_source_priority 730 sites Piwik PRO tag manager
stg_last_interaction 730 sites idem, legt je gedrag vast
stg_returning_visitor 730 sites idem, herkent je als terugkeerder
stg_externalReferrer 353 sites idem, legt vast waar je vandaan kwam
_ga 143 sites Google Analytics, jouw bezoeker-ID
_gid 51 sites Google Analytics, per dag
_gat 17 sites Google Analytics, snelheidsregeling
_pk_id / _pk_ses 18 sites Matomo of Piwik, bezoeker en sessie
VISITOR_INFO1_LIVE 20 sites YouTube, via een ingesloten video
YSC 20 sites YouTube, sessie
__Secure-YNID 20 sites YouTube, identificatie
__Secure-ROLLOUT_TOKEN 20 sites YouTube
VISITOR_PRIVACY_METADATA 20 sites YouTube, ironisch genoegHet woord stg_returning_visitor is de scherpste illustratie die er bestaat. Een cookie die letterlijk vastlegt dat jij hier eerder was, gezet voordat je iets kon kiezen, op 730 overheidssites.
En dit is het grijze gebied, met de redenering erbij:
__cf_bm 52 sites Cloudflare bot managementCloudflare zet deze cookie om geautomatiseerd verkeer te onderscheiden van mensen. Het argument voor de uitzondering is dat de dienst zonder botbescherming omvalt. Het argument ertegen is dat de bezoeker geen botbescherming vroeg, maar een webpagina. Mijn eigen standpunt: als de cookie uitsluitend een kortlopend beveiligingsdoel dient, niet over sites heen leest en niet naar analytics gaat, is de uitzondering verdedigbaar. Kun je dat niet aantonen, dan is hij toestemmingsplichtig. Label dit als verdedigbaar, niet als vaststaand.
Analytics is geen aparte categorie¶
De hardnekkigste misvatting is dat analytics een eigen uitzondering heeft. Die bestaat niet in de wet. Wat wel bestaat, is de handreiking van de Autoriteit Persoonsgegevens voor analytics-cookies die zo zijn ingericht dat de inbreuk verwaarloosbaar is. Om daaronder te vallen moet je, cumulatief:
1. een verwerkersovereenkomst hebben met de leverancier; 2. het laatste octet van het IP-adres maskeren; 3. gegevensdeling met de leverancier voor eigen doeleinden uitzetten; 4. geen cookies van derden gebruiken die de leverancier over sites heen kan koppelen; 5. de bezoeker hierover informeren in je privacyverklaring.
Als een van deze vijf ontbreekt, is je analytics gewoon toestemmingsplichtig. In mijn metingen is punt 3 het vaakst het struikelblok, en punt 4 daarna: zodra je Google Analytics via de standaardconfiguratie draait, staat gegevensdeling aan en gaat het naar een partij die het over duizenden sites kan aan elkaar knopen.
Zelf gehoste analytics, Matomo of Piwik PRO op je eigen domein, komt veel dichter bij de uitzondering. Maar zelf gehost is geen vrijbrief: op 730 overheidssites zag ik de tag manager van Piwik PRO gedragscookies zetten voor de toestemmingsvraag. De techniek was privacyvriendelijk, de configuratie niet. Zie De rijksbrede analytics staat op 668 sites voor toestemming.
Waar je als bouwer op moet letten¶
Dit is de checklist die ik zelf afloop, in deze volgorde, omdat elke stap goedkoper is dan de volgende.
Stap 1. Tel wat er laadt voordat je iets klikt. Open de ontwikkelaarstools, tabblad netwerk, laad de pagina, doe niets. Alles wat je daar ziet naar een ander domein dan je eigen, is verdacht tot het tegendeel blijkt. Sla het op als HAR-bestand zodat je het later kunt narekenen. Zie Netwerkverkeer lezen via HAR-files.
Stap 2. Haal je lettertypen, kaarten en scripts van je eigen server. Dit is de grootste bron van pre-consent verkeer op Nederlandse overheidssites, en de makkelijkste te repareren. Zie Wat je van een CDN haalt, laadt voor je banner.
Stap 3. Vervang ingesloten video door een facade. Een YouTube-embed zet vijf cookies voordat iemand op play drukt. Een statische afbeelding met een afspeelknop die de echte speler pas na de klik laadt, kost je twintig regels code. Het youtube-nocookie.com-domein helpt, maar het is geen volledige oplossing: het stelt het zetten van cookies uit tot de klik, en dat is precies wat je wilt, maar controleer het zelf per implementatie.
Stap 4. Zet je tag manager op weigeren als startstand. De meeste tag managers laden hun eigen container voordat de toestemmingsstatus bekend is. Dat is een instelling, geen wet van de natuur. Configureer de container zo dat er zonder expliciete toestemmingsvlag niets vuurt.
Stap 5. Test je weigerknop echt. Klik weigeren, herlaad, kijk opnieuw in het netwerktabblad. Op vier van de vijf gemeten sites was er geen verschil. Zie Weigeren doet op vier van de vijf sites niets.
Stap 6. Controleer je DNS op verhulde derden. Een subdomein van jezelf dat via een CNAME naar een tracker wijst, telt juridisch als een derde partij, maar gedraagt zich technisch als eigen verkeer. Zie CNAME-cloaking zit op vier op de tien overheidssites.
Wat je als bouwer niet moet willen¶
Niet: een toestemmingsmodule kopen en denken dat je klaar bent. De module is een vraag, niet een slot. In mijn metingen laadde bij twee van de gemeten modules op elke onderzochte site al iets voordat de vraag beantwoord was.
Niet: gegevens verzamelen omdat het kan. Elk veld dat je verzamelt is een veld dat kan lekken, dat je moet verantwoorden en dat je moet bewaren binnen een termijn. Wat je niet bewaart, kan niet lekken.
Niet: de privacyverklaring laten schrijven door iemand die de code niet heeft gezien. Het gat tussen de verklaring en de uitvoering is de meest voorkomende bevinding in mijn werk. Zie Papier versus code: de verklaring en de uitvoering.
Niet: aannemen dat een keurmerk of een gerenommeerde leverancier je vrijwaart. Ik heb de partijen gemeten die privacy keuren, en ze zakten zelf voor de toets.
De toets die je zelf kunt doen, in vijf minuten¶
1. Open een privevenster, ga naar je site, doe niets. 2. Ontwikkelaarstools, tabblad Application of Opslag, kijk onder Cookies. 3. Staat er iets anders dan een sessie-, taal- of keuzecookie? Dan heb je een probleem. 4. Klik weigeren, herlaad, kijk opnieuw. 5. Is de lijst gelijk gebleven? Dan heb je een groter probleem, want dan is je weigerknop een decorstuk.
Dit kost minder tijd dan het lezen van je eigen cookieverklaring, en het levert bewijs op in plaats van een indruk.