Google Consent Mode v2 instellen: complete gids voor GTM, gtag.js en AdSense
Zo stel je Google Consent Mode v2 in: de keuze tussen basic en advanced, de zeven consent-signalen, implementatie via gtag.js of Google Tag Manager, de instellingen van de gratis AdSense-banner en de controle in Tag Assistant.
Google Consent Mode v2 geeft de toestemmingsstatus van je bezoekers door aan Google-tags, zodat die hun gedrag daarop aanpassen. In deze gids komen de keuze tussen de basic- en de advanced-variant aan bod, de implementatie via gtag.js of via Google Tag Manager, de instellingen van de gratis AdSense-banner en de controle achteraf. Het kopieerbare consent script staat in stap 2.
Voor wie: websites die Google Analytics, Google Ads of AdSense gebruiken en bezoekers uit de EER, het Verenigd Koninkrijk of Zwitserland hebben. De AdSense-stappen zijn geschreven voor sites die de gratis 'Privacy en berichten'-banner als toestemmingsoplossing gebruiken.
TL;DR: kies basic of advanced, plaats het default consent script BOVEN je GTM-code (stap 2), zet de consent-instelling van elke tag goed (stap 3) en controleer het resultaat in Tag Assistant (stap 4).
Kort samengevat
- Consent Mode is de API waarmee je toestemmingsbanner aan Google-tags doorgeeft wat ze mogen doen. Een banner die de vraag stelt heb je er dus nog steeds bij nodig.
- Er zijn zeven consent-signalen. Vier daarvan zijn relevant voor advertenties en analytics:
ad_storage,ad_user_data,ad_personalizationenanalytics_storage. - Bij de basic-variant laden Google-tags pas na een keuze van de bezoeker. Bij de advanced-variant laden ze meteen en sturen ze metingen zonder cookies zolang toestemming ontbreekt.
- Plaats het default consent script in je
<head>BOVEN de GTM-container, zodat de standaardstatus bekend is voordat er tags kunnen vuren. - Google-tags zoals GA4, Google Ads en Floodlight hebben een ingebouwde consent check. Voor tags zonder die check, bijvoorbeeld Facebook Pixel of Hotjar, stel je de vereiste toestemming zelf in GTM in.
- Test met Tag Assistant: op het Consent-tabblad zie je de kolommen 'On-page Default' en 'On-page Update'. Blijft dat tabblad leeg, dan staat Consent Mode niet op de pagina of is je Google-tag geblokkeerd.
- Bij geweigerde toestemming kan Google gedrag en conversies modelleren, maar alleen als je account genoeg data verzamelt. De drempels voor GA4 staan verderop in deze gids.
Wat is Google Consent Mode v2?
Consent Mode laat je de toestemmingsstatus van bezoekers doorgeven aan Google, waarna de tags hun gedrag daarop aanpassen. De vraag aan de bezoeker stelt je banner, en Consent Mode vertaalt het antwoord naar signalen waar Google Analytics, Google Ads en Floodlight mee kunnen werken.
De zeven consent-signalen en wat ze regelen:
| Signaal | Wat het regelt |
|---|---|
ad_storage |
Opslag zoals cookies of apparaat-ID's voor advertentiedoeleinden |
ad_user_data |
Het sturen van gebruikersgegevens naar Google voor online advertenties |
ad_personalization |
Gepersonaliseerde advertenties |
analytics_storage |
Opslag voor analytics, bijvoorbeeld de duur van een bezoek |
functionality_storage |
Opslag die de werking van de site of app ondersteunt |
personalization_storage |
Opslag voor personalisatie, bijvoorbeeld video-aanbevelingen |
security_storage |
Opslag voor beveiliging, zoals authenticatie en fraudepreventie |
Elk signaal heeft twee mogelijke waarden: granted of denied.
Wat er gebeurt als toestemming ontbreekt
Staat een signaal op denied, dan mogen de bijbehorende cookies niet gelezen of geschreven worden. Google-tags sturen dan metingen zonder cookies. Zet je daarnaast ads_data_redaction aan, dan worden advertentie-identifiers in de netwerkverzoeken van Google Ads- en Floodlight-tags geredigeerd zolang ad_storage op denied staat, en lopen die verzoeken via een domein zonder third-party cookies zoals pagead2.googlesyndication.com. De volledige pagina-URL gaat wel gewoon mee, inclusief eventuele klikparameters; dat is een veelgemaakte aanname die niet klopt.
Basic of advanced: welke variant kies je?
Google onderscheidt twee implementaties. Het verschil zit in het moment waarop de tags laden.
| Basic | Advanced | |
|---|---|---|
| Laden van tags | Geblokkeerd tot de bezoeker een keuze maakt | Direct, met standaardwaarden op denied |
| Data vóór de keuze | Geen enkele, ook de toestemmingsstatus niet | Metingen zonder cookies |
| Na toestemming | Volledige meting | Volledige meting |
| Modellering | Algemeen model | Adverteerder-specifiek model |
De advanced-variant levert rijkere modellering op, omdat Google in dat geval iets heeft om op te modelleren. Kies je basic, dan blijft Google volledig buiten beeld tot de bezoeker akkoord gaat. Welke variant bij je site past hangt af van de juridische afweging die je organisatie maakt over meten zonder cookies. De rest van deze gids beschrijft de advanced-variant, want dat is wat het script in stap 2 doet.
Drempels voor gedragsmodellering in GA4
Modellering start niet automatisch. Voor gedragsmodellering in GA4 gelden twee drempelwaarden:
- minstens 1.000 events per dag met
analytics_storage='denied'gedurende minstens 7 dagen - minstens 1.000 dagelijkse gebruikers die events sturen met
analytics_storage='granted'op minstens 7 van de afgelopen 28 dagen
Ook als je die aantallen haalt, is modellering niet gegarandeerd. Google hanteert daarnaast interne criteria, onder meer rond de verhouding tussen nieuwe en terugkerende gebruikers. Voor kleinere sites betekent dit in de praktijk dat de gaten in de data blijven bestaan.
Wat Google verlangt, en sinds wanneer
Wanneer je toestemming nodig hebt, volgt uit de AVG en de ePrivacy-regels. Consent Mode is het kanaal waarlangs die toestemming bij Google terechtkomt, en Google stelt daar eigen eisen bij.
- Vanaf maart 2024 moeten bepaalde functies gebruikerstoestemming binnenhalen volgens het EU-gebruikerstoestemmingsbeleid, waaronder Klantenmatch en Ads Data Hub. Google geeft aan dat je zonder toestemmingssignalen de mogelijkheden voor advertentiepersonalisatie kwijtraakt. De signalen die daarvoor gelden zijn
ad_user_dataenad_personalization, de twee die in versie 2 zijn toegevoegd. - Voor uitgevers geldt een aparte eis. Sinds 16 januari 2024 heb je voor gepersonaliseerde advertenties in de EER en het Verenigd Koninkrijk een door Google gecertificeerde CMP nodig die met het IAB TCF is geïntegreerd. Voor Zwitserland geldt dat sinds 31 juli 2024. Verkeer van een niet-gecertificeerde CMP komt mogelijk alleen nog in aanmerking voor niet-gepersonaliseerde of beperkte advertenties.
- Het bericht over Europese regelgeving uit 'Privacy en berichten' van AdSense, Ad Manager en AdMob is volgens Google gecertificeerd voor die TCF-eis. Gebruik je een andere CMP, controleer dan of die op de lijst met gecertificeerde CMP's staat.
Implementatie: rechtstreeks in de code of via Tag Manager
Rechtstreeks met gtag.js
Je zet de standaardstatus met een default-commando, dat je afvuurt voordat er meetdata verstuurd wordt:
gtag('consent', 'default', {
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'analytics_storage': 'denied'
});
Zodra de bezoeker een keuze maakt, stuur je een update-commando met de nieuwe waarden:
gtag('consent', 'update', {
'ad_storage': 'granted',
'ad_user_data': 'granted',
'ad_personalization': 'granted',
'analytics_storage': 'granted'
});
Drie optionele instellingen die hierbij horen:
wait_for_updategeeft in milliseconden aan hoe lang tags moeten wachten op een update-commando. Met de waarde 500 krijgt je toestemmingsoplossing een halve seconde de tijd voordat de tags op de standaardstatus afgaan.regionbeperkt een default-commando tot bepaalde gebieden, met codes volgens ISO 3166-2. Als meerdere commando's elkaar overlappen, wint de meest specifieke regio.gtag('set', 'url_passthrough', true)geeft klik- en sessiegegevens door via URL-parameters wanneer opslag geweigerd is. Het gaat om de parametersgclid,dclid,gclsrc,_glenwbraid.
Via Google Tag Manager
Laad je je banner via de GTM-container, dan gebruik je de API's van Tag Manager in plaats van de gtag-commando's: setDefaultConsentState, updateConsentState en gtagSet. Google waarschuwt in die documentatie voor het alternatief, omdat gtag-commando's achter alle andere wachtende berichten in de rij komen en mogelijk niet verwerkt zijn voordat het volgende event begint. Vervang updateConsentState dus niet door gtag('consent', 'update', ...).
Elke webcontainer heeft standaard de trigger Consent Initialization - All Pages. Die is bedoeld voor tags die de toestemmingsstatus zetten, en vuurt vóór alle andere triggers. Hang je toestemmingsplatform daaraan, dan staan de consent-instellingen vast voordat de rest van je container in beweging komt. In de Community Template Gallery staan kant-en-klare sjablonen voor de bekende CMP's.
Stap 1: AdSense consent banner configureren
Open je Google AdSense-dashboard en ga naar Privacy en berichten.
Controleer deze punten:
- Het bericht over Europese regelgeving staat actief en is gepubliceerd op je site.
- De knopindeling met "Toestemming geven, Geen toestemming geven, Opties beheren" is geselecteerd.
- Op de instellingenpagina van het bericht staat Zet de toestemmingsmodus aan voor advertentiedoeleinden aan. Daarmee mogen andere Google-producten de bestaande toestemmingskeuzes uit de EER, het VK en Zwitserland lezen voor advertentieopslag, advertentiepersonalisatie en gebruikersgegevens voor advertenties.
- Meet je ook met Analytics, zet dan Toestemmingsmodus aanzetten voor analysedoeleinden aan. Dat vinkje verschijnt pas als het vorige aanstaat.
Berichten die je in Privacy en berichten maakt, ondersteunen de TCF v2.3-specificatie van het IAB. De toestemmingsinstellingen die je hier kiest, gelden voor alle sites en apps waarvoor je een bericht over Europese regelgeving hebt ingesteld.
Stap 2: Default consent script plaatsen
Dit script definieert de standaardstatus voordat je banner laadt. Alle signalen starten op denied, behalve security_storage, zodat er geen data verzameld wordt zonder toestemming.
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
// Standaard: alles op denied, behalve security
gtag('consent', 'default', {
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'analytics_storage': 'denied',
'functionality_storage': 'denied',
'personalization_storage': 'denied',
'security_storage': 'granted',
'wait_for_update': 500
});
</script>
Plaatsing in je <head>
De volgorde luistert nauw:
- Eerst: dit consent script
- Daarna: de GTM container code
Het consent script moet geladen zijn voordat GTM start. Anders kunnen je tags al vuren voordat de default consent status bekend is.
<head>
<!-- 1. Consent defaults -->
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('consent', 'default', { ... });
</script>
<!-- 2. GTM container -->
<script>(function(w,d,s,l,i){...})(window,document,'script','dataLayer','GTM-XXXX');</script>
</head>
Stap 3: GTM tags configureren
Google-tags hebben een ingebouwde consent check en passen hun gedrag aan op de toestemming die is verleend. Voor tags zonder die check stel je de controle zelf in.
| Tag type | Consent instelling | Waarom |
|---|---|---|
| GA4, Google Ads, Floodlight | No additional consent required | Ingebouwde consent check |
| Facebook Pixel | Require additional consent: ad_storage |
Geen ingebouwde check |
| Hotjar en andere analytics-scripts | Require additional consent: analytics_storage |
Geen ingebouwde check |
| Overige custom scripts | Require additional consent: het type dat bij de tag past | Geen ingebouwde check |
Voor Google tags (GA4, Ads):
- Open de tag in GTM
- Ga naar Advanced Settings → Consent Settings
- Selecteer No additional consent required
Voor third-party tags:
- Open de tag in GTM
- Ga naar Advanced Settings → Consent Settings
- Selecteer Require additional consent for tag to fire
- Voeg
ad_storagetoe (of het consent type dat bij de tag past)
De derde optie in dat menu is Not set, de standaardwaarde. Wil je weten welke tags nog op die stand staan, open dan het Consent Overview-scherm in je container. Dat verdeelt je tags in 'Consent Not Configured' en 'Consent Configured' en laat je de instelling voor meerdere tags tegelijk aanpassen.
Stap 4: Configuratie testen
Google raadt Tag Assistant aan om je implementatie te controleren. Start een sessie op tagassistant.google.com met de URL van je site, of gebruik GTM Preview Mode.
Test 1: default consent
Selecteer het eerste Consent-event en open het Consent-tabblad. In de kolom 'On-page Default' horen ad_storage, ad_user_data, ad_personalization en analytics_storage op Denied te staan. Alleen security_storage staat op Granted.
Test 2: na toestemming
Klik op 'Akkoord' in je banner en selecteer het meest recente Consent-event. In de kolom 'On-page Update' springen de signalen waar je toestemming voor vraagt naar Granted.
Test 3: tags vuren correct
Klik in het Summary-gedeelte op het Tags-tabblad en open een tag om te zien of die zich aan de consent-instellingen hield. Google-tags vuren pas na de consent update. Third-party tags vuren alleen als hun vereiste toestemming op Granted staat.
Test 4: controle in de Google-producten zelf
In GA4 ga je naar Beheerder → Verzameling en wijziging van gegevens → Instellingen voor toestemming. Daar zie je welk percentage van je verkeer en je conversies uit de EER komt, plus waarschuwingen per gegevensstream over ontbrekende signalen voor advertenties en gedragsanalyse. In Google Ads verschijnt de status 'De toestemmingsmodus is geïmplementeerd' zodra alles staat, en 'De toestemmingsmodus is geïmplementeerd en de modellering is geactiveerd' zodra de drempels gehaald zijn.
Over functionality en personalization_storage
De AdSense banner stuurt updates voor:
ad_storagead_user_dataad_personalizationanalytics_storage
functionality_storage en personalization_storage worden niet door AdSense aangestuurd. Dat is normaal gedrag, want deze categorieën zijn bedoeld voor andere functionaliteit dan advertenties, zoals het onthouden van een taalvoorkeur.
Belangrijk: de AVG vraagt toestemming per doel. Je mag deze categorieën dus niet automatisch meeliften op de toestemming die iemand voor advertenties of analytics geeft.
Veelgemaakte fouten
- Het default-commando komt te laat. Zet je de standaardstatus pas nadat de eerste tags geladen zijn, dan heeft die geen effect meer. Het commando hoort vóór elke andere code die de toestemmingsstatus gebruikt of aanpast.
- Alleen de oude twee signalen zetten. Een configuratie met alleen
ad_storageenanalytics_storageis niet compleet. Zonderad_user_dataenad_personalizationontbreken precies de signalen die versie 2 toevoegde. gtag('consent', 'update', ...)gebruiken in een custom HTML-tag in GTM. Gebruik daarupdateConsentState, anders loop je het risico dat de update te laat verwerkt wordt.- Geen update-mechanisme. Blijft de status na een klik op de banner hangen op Denied, dan stuurt je banner geen update-commando. Bij een CMP van een derde partij controleer je in de instellingen van die CMP of de Consent Mode-koppeling aanstaat.
- TCF en Consent Mode allebei handmatig naast elkaar zetten. Google adviseert om het een of het ander te implementeren, om onbedoelde interacties te voorkomen. Bij tegenstrijdige signalen past Google de meest terughoudende combinatie toe.
- Testen met een oude cache. Een consent-keuze wordt onthouden. Test in een incognitovenster of leeg je cache, anders zie je de default-status nooit terug.
Veelgestelde vragen
Is Consent Mode v2 verplicht?
Consent Mode zelf komt in geen enkele wet voor. De AVG bepaalt wanneer je toestemming nodig hebt en Consent Mode is de manier om die toestemming aan Google door te geven. Sinds maart 2024 verlangt Google wel dat je toestemmingssignalen stuurt voor bepaalde functies, en zonder die signalen raak je volgens Google de mogelijkheden voor advertentiepersonalisatie kwijt. Voor uitgevers die advertenties tonen in de EER en het VK geldt sinds 16 januari 2024 bovendien de eis van een door Google gecertificeerde CMP met TCF-integratie.
Wat is het verschil tussen basic en advanced consent mode?
Bij de basic-variant laden Google-tags pas nadat de bezoeker een keuze heeft gemaakt, en gaat er vóór dat moment niets naar Google. Bij de advanced-variant laden de tags meteen met de standaardwaarden op denied en sturen ze metingen zonder cookies zolang toestemming ontbreekt. De advanced-variant geeft een adverteerder-specifiek model voor de modellering, de basic-variant een algemeen model.
Vervangt Consent Mode mijn cookiebanner?
Nee. Je hebt nog steeds een banner nodig die de vraag stelt en de keuze vastlegt. Consent Mode geeft die keuze alleen door aan de Google-tags.
Werkt dit voor Cookiebot of OneTrust?
De AdSense-stappen in deze gids gelden voor de gratis banner uit Privacy en berichten. Cookiebot en andere CMP's hebben eigen GTM-integraties met vergelijkbare functionaliteit. Voor die oplossingen staan er sjablonen in de Community Template Gallery van Tag Manager.
Mijn Consent-tabblad in Tag Assistant blijft leeg
Dat betekent dat Consent Mode niet op de pagina staat, of dat je Google-tag geblokkeerd is en niet kon laden. Controleer of het default-script daadwerkelijk in de broncode van de pagina staat en of een adblocker of scriptblokkering de tag tegenhoudt.
Mijn tags vuren niet na toestemming
Controleer in dat geval deze punten:
- Het consent script staat BOVEN je GTM code
- Je hebt je browser cache geleegd (of je test in een incognitovenster)
- Je GTM container is opnieuw gepubliceerd
- Je AdSense banner is actief en gepubliceerd
Waarom zie ik nog geen gemodelleerde data in GA4?
Modellering begint pas als je property genoeg data verzamelt. Voor gedragsmodellering vraagt Google minstens 1.000 events per dag met analytics_storage='denied' gedurende zeven dagen, plus minstens 1.000 dagelijkse gebruikers met toestemming op zeven van de afgelopen 28 dagen. Kleinere sites halen die aantallen zelden.
Checklist: Consent Mode v2 configuratie
Na deze handleiding heb je het volgende staan:
- Keuze gemaakt tussen de basic- en de advanced-variant
- Default consent script geplaatst vóór GTM
- Alle signalen starten op Denied, behalve
security_storage ad_user_dataenad_personalizationzitten in het default-commando- Consent banner stuurt update-commando's na een keuze
- Google tags geconfigureerd zonder extra consent
- Third-party tags geconfigureerd met consent vereisten
- Geen tags meer op 'Not set' in het Consent Overview-scherm
- Alles gecontroleerd in Tag Assistant, GA4 en Google Ads
Daarmee is de configuratie afgerond. Voeg je later een nieuwe tag toe aan je container, loop dan opnieuw door stap 3 en 4 om de consent instelling en het vuurgedrag van die tag te controleren.
