Introductie: Waarom de keuze van opslag belangrijker is dan het lijkt

De meeste teams hebben vandaag een consent banner en een CMP op hun website staan. De juridische vakjes zijn afgevinkt, de banner verschijnt, en gebruikers kunnen cookies accepteren of weigeren. Klaar… toch? Niet helemaal.

Achter de schermen heeft de manier waarop je de toestemmingsstatus bewaart – en hoe je die doorgeeft aan Google Tag Manager en Consent Mode – een directe impact op:

In de praktijk zijn er twee belangrijkste manieren waarop CMP’s de keuze van een gebruiker bewaren:

  1. First‑party cookie

  2. localStorage

Vanuit het standpunt van de CMP werken beiden. Vanuit een measurement-perspectief gedragen ze zich anders, en die verschillen zijn belangrijk.

Dit artikel legt uit:

1. First‑Party Cookies vs localStorage: hetzelfde doel, ander gedrag

Beide mechanismen worden gebruikt om te “onthouden” dat een gebruiker toestemming heeft gegeven, geweigerd of gepersonaliseerd. Maar onder de motorkap werken ze heel verschillend.

1.1 First-party cookie – belangrijkste eigenschappen

Implicaties voor consent:

1.2 localStorage – belangrijkste eigenschappen

Implicaties voor consent:

1.3 Gedrag wanneer gebruikers hun browser ‘opschonen’

Dit is een van de belangrijkste praktische verschillen:

Als consent in een cookie staat:

Als consent in localStorage staat:

Er is geen universeel “beste” optie; het is een trade‑off tussen UX‑stabiliteit en een strikte koppeling tussen cookie‑aanwezigheid en consent.

2. Consent implementeren met first-party cookies (GTM-voorbeeld)

Er zijn veel geldige manieren om een CMP, GTM en Consent Mode met elkaar te verbinden.
Onderstaande setup is één concreet voorbeeld, waarbij we:

2.1 Aannames

Voor dit voorbeeld gaan we uit van het volgende:

Je kan benamingen en format uiteraard aanpassen aan je eigen CMP.
Voor dit voorbeeld gebruiken we de Simo Ahava Consent Mode‑template om consent te configureren.

2.2 Stap 1 – Laat de CMP de consent‑cookie schrijven

Dit gebeurt meestal in de CMP‑interface of scriptconfiguratie, niet in GTM.

Typische configuratie in je CMP:

Wanneer de gebruiker zijn voorkeuren opslaat:

Je hoeft dit meestal niet zelf te hardcoden; zorg wel dat je volgende informatie kent:

2.3 Stap 2 – Maak de cookie zichtbaar voor GTM via een 1st‑party cookie‑variabele

Nu zorgen we ervoor dat GTM die cookie kan lezen.

  1. Ga naar Variables → New

  2. Variabeletype: 1st‑Party Cookie

  3. Naam: Cookie – cmp_consent

  4. Cookie name: cmp_consent

Deze variabele zal nu een string teruggeven zoals:
ad_storage=granted|analytics_storage=granted|ad_user_data=granted|ad_personalization=granted

zodra de cookie bestaat.

202512 Local Storage vs FirstParty Cookies Cookie cmp consent 2

2.4 Stap 3 – Haal elke consent‑waarde uit de cookie met Regex‑variabelen

Op dit moment geeft {{Cookie – cmp_consent}} de volledige string terug, bijvoorbeeld:
ad_storage=granted|analytics_storage=denied|ad_user_data=denied|ad_personalization=denied

Simo’s Consent Mode‑template verwacht vier variabelen, één per consent‑signaal, die elk exact granted of denied teruggeven.
Een eenvoudige manier om dat te bereiken is met Regex Table‑variabelen.

2.4.1 Maak Regex – ad_storage

  1. Ga naar Variables → New

  2. Type: Regex Table

  3. Naam: Regex – ad_storage

  4. Input variable: {{Cookie – cmp_consent}}

Vul de tabel als volgt in:

Als de cookie ad_storage=granted bevat, geeft deze variabele granted terug.
Ontbreekt het veld of is het ongeldig, dan wordt standaard denied gebruikt.

202512 Local Storage vs FirstParty Cookies Regex ad storage 2

2.4.2 Maak Regex – analytics_storage

Zelfde idee:

  1. Variables → New → Regex Table

  2. Naam: Regex – analytics_storage

  3. Input variable: {{Cookie – cmp_consent}}

Tabel:

2.4.3 Maak Regex – ad_user_data en Regex – ad_personalization

Herhaal voor de twee V2‑specifieke signalen.

ad_user_data

ad_personalization

Op dit punt heb je vier variabelen:

Elke variabele geeft granted of denied terug, precies zoals Simo’s template verwacht.

2.5 Stap 4 – Configureer de Simo Ahava Consent Mode‑tag

Nu koppelen we die variabelen aan de Consent Mode (Google tags)‑tagtemplate.

2.5.1 Voeg de template toe aan je container

Je hebt nu een nieuw tagtype beschikbaar.

2.5.2 Maak de “default” Consent Mode‑tag

  1. Ga naar Tags → New

  2. Tag type: Consent Mode (Google tags)

  3. Naam: Consent Mode – default (from cookie)

Configureer:

Laat wait_for_update op een waarde die past bij je CMP‑gedrag (bijv. 500–1000 ms).

       4. Trigger: Consent Initialization – All Pages

      Wanneer deze tag afvuurt:

2.5.3 Optioneel: “update” Consent Mode‑tag

De meeste CMP’s pushen ook een dataLayer‑event zodra de gebruiker zijn voorkeuren opslaat, bijvoorbeeld:

dataLayer.push({
event: 'cmp_consent_updated'
});

Als je CMP niet zelf Consent Mode aanroept, kun je:

  1. Een tweede tag maken met dezelfde template:

    Consent Mode – update (from cookie)

  2. Command type: update

  3. Opnieuw dezelfde vier Regex‑variabelen gebruiken (die nu de nieuwe cookie‑waarde lezen na de keuze van de gebruiker)

  4. Trigger: Custom Event → event name: cmp_consent_updated

Zo blijft je volledige Consent Mode‑configuratie binnen GTM en aangestuurd door de CMP‑cookie.

2.6 Praktisch voorbeeld: van CMP‑keuze tot werkende Consent Mode

Om het concreet te maken, stel je de volgende flow voor:

Dit is maar één mogelijke pattern, maar het illustreert mooi hoe first‑party cookies + Regex‑variabelen + Simo’s template samenkomen.

3. Consent implementeren met localStorage (GTM‑voorbeeld)

Dezelfde filosofie geldt wanneer je CMP consent bewaart in localStorage in plaats van in een cookie.

Ook dit is slechts één manier; het idee is om te tonen hoe je:

3.1 Aannames

Voor dit voorbeeld gaan we uit van:

(Gebruikt je CMP JSON, dan is de logica gelijkaardig – je past alleen de extractie aan.)

3.2 Stap 1 – Zorg dat de CMP naar localStorage schrijft

In de CMP‑UI / config:

Bij een keuze van de gebruiker:

3.3 Stap 2 – Lees localStorage in GTM met een JavaScript‑variabele

  1. Ga naar Variables → New

  2. Type: Custom JavaScript

  3. Naam: JS – cmpConsent (localStorage)

  4. Code:

function () {
try {
var raw = window.localStorage.getItem('cmpConsent');
return raw || '';
} catch (e) {
return '';
}
}

Deze variabele retourneert de volledige string, bijvoorbeeld:
ad_storage=granted|analytics_storage=denied|ad_user_data=denied|ad_personalisation=denied

zodra de gebruiker eerder een keuze heeft gemaakt.

3.4 Stap 3 – Haal elke consent‑waarde uit localStorage met Regex‑variabelen

Je kan nu exact dezelfde Regex‑aanpak herhalen, maar met de localStorage‑variabele als input.

3.4.1 Regex – ad_storage (LS)

  1. Variables → New → Regex Table

  2. Naam: Regex – ad_storage (LS)

  3. Input variable: {{JS – cmpConsent (localStorage)}}

Tabel:

3.4.2 Regex – analytics_storage (LS)

Zelfde patroon:

3.4.3 Regex – ad_user_data (LS) en Regex – ad_personalization (LS)

Elke variabele geeft nu opnieuw exact granted of denied terug.

3.5 Stap 4 – Configureer de Consent Mode‑tag voor localStorage

Je kan:

Typische setup:

  1. Tags → New

  2. Type: Consent Mode (Google tags)

  3. Naam: Consent Mode – default (from localStorage)

Velden:

Trigger: Consent Initialization – All Pages

Als de CMP ook cmp_consent_updated triggert wanneer de gebruiker zijn keuze wijzigt en nieuwe localStorage‑waarden schrijft, kan je:

3.6 Praktisch voorbeeld: localStorage houdt consent stabiel

Een voorbeeldflow:

De gebruiker ziet de banner niet opnieuw (als je CMP de consent nog geldig vindt), en je metingen blijven consistent, ondanks het wissen van cookies.

Conclusie

Of je CMP consent nu opslaat in een first‑party cookie of in localStorage, het belangrijkste is hoe dat signaal wordt vertaald naar Google Tag Manager en Consent Mode. First‑party cookies geven je een vroeg, server‑zichtbaar consent‑signaal dat eenvoudig herbruikbaar is in sGTM en back‑ends, terwijl localStorage de nadruk legt op UX‑stabiliteit omdat het de meeste cookie‑opschoonacties overleeft.

De implementaties in dit artikel – met GTM‑cookievariabelen, JavaScript/localStorage‑variabelen, Regex‑extractie en de Simo Ahava Consent Mode‑template – zijn slechts één manier om alles aan elkaar te koppelen. Ze illustreren het kernprincipe: kies één bron van waarheid voor consent, normaliseer die in GTM en laat Consent Mode die keuze consistent afdwingen over al je tags. Eens dat fundament er ligt, kan je de details afstemmen op je CMP, je juridische vereisten en je measurement‑stack.


publication auteur Sven Bosschem
AUTEUR
Sven Bosschem

| LinkedinDit E-mail adres wordt beschermd tegen spambots. U moet JavaScript geactiveerd hebben om het te kunnen zien.

 

Tags: