What Consent Mode actually does
Consent Mode tells Google's tracking tags how to behave based on what a user has consented to. When consent is granted, tags fire normally. When consent is declined, tags do not fire — but they leave a signal that Google uses to model what conversions were likely missed. Google uses this modelled data to fill gaps in conversion reporting and audience building.
The practical effect is that your reported conversions become more accurate than a simple opt-in/opt-out toggle would produce. Instead of losing all data for users who declined, you get a statistical estimate of their behaviour.
What changed in v2
Version 1 of Consent Mode had two consent types: analytics_storage and ad_storage. Version 2 adds two more:
ad_user_data— controls whether user data can be sent to Google for advertising purposesad_personalization— controls whether data can be used for personalised advertising
For Google Ads and any Google advertising products to function properly in European markets after the March 2024 enforcement date, all four signals must be implemented. Using only the v1 signals means advertising features will be limited.
How to implement it in Google Tag Manager
The implementation has two parts: the default consent state (set before any tags fire) and the update (called after the user makes a choice in your consent banner).
Step 1 — Set the default state
This must run before GTM loads. Add this directly to your HTML, before the GTM snippet:
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('consent', 'default', {
analytics_storage: 'denied',
ad_storage: 'denied',
ad_user_data: 'denied',
ad_personalization: 'denied',
wait_for_update: 500, // milliseconds to wait for the CMP
});
</script>
Step 2 — Update consent after user choice
Your consent management platform (CMP) — or a custom banner — should call the update when the user makes their choice. Most CMP providers (Cookiebot, OneTrust, Usercentrics, etc.) handle this automatically via a GTM template from their respective galleries.
// When user grants all consent:
gtag('consent', 'update', {
analytics_storage: 'granted',
ad_storage: 'granted',
ad_user_data: 'granted',
ad_personalization: 'granted',
});
// When user declines:
gtag('consent', 'update', {
analytics_storage: 'denied',
ad_storage: 'denied',
ad_user_data: 'denied',
ad_personalization: 'denied',
});
Step 3 — Enable Consent Mode in GTM
In GTM, go to Admin → Container Settings and enable "Enable consent overview". This gives you a visual panel showing which tags respect which consent types, and which tags have no consent configuration at all.
Testing it
Use GTM Preview mode and check the Consent tab in the event inspector. You should see the four consent states and whether they are granted or denied at the point each tag fires. Google Tag Assistant also has a dedicated Consent tab that shows how consent is flowing through your tags.
What to watch out for
The most common mistake is setting the default state after GTM loads rather than before. If GTM fires first, tags may have already sent data before consent was applied — which defeats the purpose. Always ensure the default consent block appears in the HTML before the GTM snippet.
The second common issue is relying on a CMP template that only updates two consent types instead of four. Check your CMP provider's documentation specifically for v2 support.