The Problem Consent Mode Solves
Under GDPR and similar privacy regulations, you must obtain user consent before setting analytics and advertising cookies.
If users decline consent, standard GA4 tags do not fire - which means no data for those users. In some markets (EU, UK, EEA), consent decline rates can be 30 - 60% of users. Losing that data creates a significant blind spot.
Consent Mode v2 is Google’s framework for handling this gap.
What Is Consent Mode v2?
Consent Mode v2 is a protocol that tells Google tags how to behave based on user consent status.
It works through two primary consent types:
analytics_storage- controls whether GA4 can set analytics cookies and track sessionsad_storage- controls whether Google Ads tags can set conversion cookies
And two additional types introduced in v2:
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 (remarketing)
All four must be addressed in a v2-compliant implementation.
Basic vs Advanced Consent Mode
Basic Consent Mode
Tags are blocked entirely until consent is granted.
- If user denies: no tag fires, no data sent to Google
- If user accepts: tags fire normally
- No modelling, no pings, no data recovery
Simple to implement, but offers no data recovery for non-consenting users.
Advanced Consent Mode
Tags fire in a limited, cookieless mode even without consent.
- If user denies: tag fires but sends a cookieless ping - a limited hit without cookies or identifiers
- If user accepts: tags fire normally with full cookie-based tracking
- Google uses these pings to model behaviour and recover estimated data
Advanced Consent Mode is the recommended implementation. It retains some signal even from non-consenting users, which GA4 uses to model estimated conversions and sessions.
How Behavioural Modelling Works
When Consent Mode is active and users decline consent, GA4 receives limited cookieless pings.
GA4 uses these pings - along with patterns from consenting users - to statistically model the behaviour of non-consenting users.
This modelled data appears in GA4 reports alongside observed data. Reports show combined totals.
Important: Modelling is not perfect. It is an estimate. The quality of modelled data depends on:
- The ratio of consenting to non-consenting users
- How much data GA4 has to build models from
- The similarity between consenting and non-consenting user behaviour
Modelling helps but does not fully replace the lost signal from declined consent.
How to Implement Consent Mode v2 with GTM
Step 1: Set Default Consent State
The default consent state must be set before any other tags fire. This tells Google tags what to assume before the user has made a choice.
In GTM, create a Custom HTML tag with an Initialization - All Pages trigger (this fires before all other tags):
<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
});
</script>
Setting all to denied by default is the correct approach for GDPR markets. Users are assumed to have declined until they explicitly consent.
wait_for_update: 500 gives the Consent Management Platform (CMP) 500ms to update consent before tags fire.
Step 2: Update Consent Based on User Choice
Your CMP (e.g. Cookiebot, OneTrust, Usercentrics, Complianz) handles the consent banner and stores the user’s choice.
When the user accepts or declines, the CMP should push a consent update to the data layer. Most major CMPs have built-in GTM integrations that handle this automatically.
The update looks like this (for a user who accepts all):
gtag('consent', 'update', {
'analytics_storage': 'granted',
'ad_storage': 'granted',
'ad_user_data': 'granted',
'ad_personalization': 'granted'
});
For a user who declines advertising but accepts analytics:
gtag('consent', 'update', {
'analytics_storage': 'granted',
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied'
});
Step 3: Enable Advanced Consent Mode in GA4
In your Google Tag (base configuration) in GTM:
- Open the tag configuration
- Expand Advanced Settings
- Under Consent Settings, ensure the tag respects consent requirements - this is usually automatic with the Google Tag type
You do not need to manually configure this if you are using the Google Tag tag type in GTM. It reads the consent state automatically.
CMP Integration
The major CMPs have native GTM integrations that push consent updates automatically. You typically just need to:
- Install the CMP tag or script
- Connect the CMP to GTM (usually via a template in the GTM Template Gallery)
- Verify the consent update is being pushed to the data layer after the user makes a choice
Check that the CMP fires its consent update before your GA4 tag fires. Use GTM Preview mode to verify the firing order.
How to Verify Consent Mode Is Working
In GTM Preview Mode
- Open your site in Preview mode
- Decline consent on the banner
- In Tag Assistant → check the GA4 tag
- The tag should show as “Fired” but in a limited state - this confirms Advanced Consent Mode is active
In GA4 DebugView
With Consent Mode active and after declining consent, GA4 should still receive page_view pings - but without a client ID. These appear as anonymous pings in DebugView.
In Google Tag Manager - Consent Overview
GTM has a built-in Consent Overview:
- GTM → Preview → open a page
- In Tag Assistant, click the Consent tab
- This shows the current state of each consent type and which tags are affected
What Gets Lost Even With Consent Mode
Consent Mode modelling recovers estimated session and conversion data - but some things are genuinely lost for non-consenting users:
- Remarketing audiences: Users who decline
ad_storagecannot be added to GA4 audiences for Google Ads remarketing - Cross-device tracking: Google Signals cannot operate without
ad_personalizationconsent - Enhanced conversions: Enhanced conversion matching requires
ad_user_dataconsent - User-level data: Individual user journeys are not stored for non-consenting users
These are real limitations. The goal of Consent Mode is to preserve aggregate signal - not to circumvent consent requirements.
Common Implementation Mistakes
Not setting a default state before tags fire.
If the Google Tag fires before gtag('consent', 'default', ...) runs, Consent Mode is not applied. Use the Initialization trigger to prevent this.
Setting default to “granted.” In GDPR markets, defaulting to “granted” is not compliant. Default must be “denied” for EU/EEA users. Some implementations use geo-based logic to apply denied defaults only in regulated markets.
Using Basic Consent Mode when Advanced is available. Basic Consent Mode blocks all pings. Advanced Consent Mode allows cookieless pings. Use Advanced unless you have a specific reason not to.
Not including all four consent types.
Consent Mode v2 requires ad_user_data and ad_personalization in addition to the original two. Missing these causes issues with Google Ads data matching and remarketing.
Final Thoughts
Consent Mode v2 is not optional in regulated markets. It is also not magic - it cannot recover all lost data, but it significantly improves the signal available for modelling.
Implement it correctly from the start. The alternative - running without consent compliance - carries regulatory and reputational risk that no analytics setup is worth.
In the next article of this series, we will cover:
GA4 Explorations - how to build custom reports that actually answer business questions.
Related Posts
How Consent Mode Impacts Your Tracking: What Changes When Users Decline
12 min read
GA4 Enhanced Ecommerce Tracking - What the Data Layer Needs to Look Like
10 min read
How to Implement Consent Mode v2 with Google Tag Manager
14 min read
Need Help With Your Google Ads?
I help e-commerce brands scale profitably with data-driven PPC strategies.
Get In Touch