If you serve EU or EEA users and you don't have Consent Mode v2 implemented properly, two things are happening right now:
- You're not legally compliant with Google Ads' Digital Markets Act requirements for personalised advertising in those regions.
- You're losing 20-40% of your reported conversions to "consent denied" without Google's modelled conversion fallback to recover them.
Most accounts I audit have Consent Mode v1 installed (or nothing at all) and have never upgraded. The performance impact is significant and usually invisible until someone explicitly checks.
Here's the full implementation, what changes between v1 and v2, and how to verify it's actually working.
The TL;DR: Consent Mode v2 tells Google whether each user has given consent for ads and analytics tracking. When consent is given, tracking works normally. When it's denied, Google uses modelled conversions to estimate what you'd have measured. Without v2 in EU/EEA, ad personalisation and remarketing are blocked entirely. With v2 properly set up, you recover ~70% of the conversion signal you'd otherwise lose.
What changed between v1 and v2
Consent Mode v1 (released 2020) had two signals:
ad_storage— consent for advertising cookies.analytics_storage— consent for analytics cookies.
Consent Mode v2 (mandatory March 2024 for EU/EEA) added two more:
ad_user_data— consent for sending user data to Google for advertising.ad_personalization— consent for personalised advertising and remarketing.
The new signals are required for any personalised advertising or remarketing to EU/EEA users. If you're not sending them, your Customer Match lists, remarketing audiences, and personalised ad serving will degrade or stop entirely in those regions.
The two modes of Consent Mode
You can implement v2 in two ways. Pick based on your risk tolerance.
Basic mode
- Google tags don't load at all until consent is given.
- No data is sent to Google before consent.
- Cleanest from a privacy perspective.
- Lowest modelled conversion recovery (Google has no signal to model from).
Advanced mode
- Google tags load on every page but in a restricted mode.
- "Cookieless pings" are sent when consent is denied — no personal data, just minimal signals (timestamp, country, basic event type).
- Google uses those pings to model the conversions that would have been measured if consent had been given.
- Higher modelled conversion recovery (typically 60-80% of denied conversions are estimated back).
Advanced mode recovers more data. Basic mode is more privacy-conservative. For performance marketing accounts, Advanced is almost always the right choice — both legally permitted and operationally significant.
Step 1: Audit what you're sending today
Before you change anything, check what's actually happening.
In Chrome DevTools:
- Open your site.
- DevTools > Network tab > filter on
collect. - Click on a
collectrequest to GA4. - Look at the query parameters for
gcs(consent state) andgcd(consent data).
What you'll see:
gcs=G111— full consent given (all four signals).gcs=G100— analytics consent only, ads denied.gcs=G000— all denied.gcs=G1+ partial codes — varying mixes.
If you don't see gcs or gcd parameters at all, you don't have Consent Mode running. Time to fix that.
Step 2: Choose a CMP (Consent Management Platform)
You need a tool that captures user consent and broadcasts the state to Google. Common options:
- Cookiebot / Usercentrics — paid, IAB-certified, full feature.
- OneTrust — enterprise, expensive, comprehensive.
- Cookiehub — affordable mid-market.
- Iubenda — popular in EU, mid-tier pricing.
- Klaro — open-source, self-hosted.
Whichever CMP you pick, verify it's Google-certified for Consent Mode v2 before committing. Google publishes a list of certified CMPs.
Step 3: Configure the CMP for all four consent signals
In your CMP setup, ensure you're capturing and broadcasting:
ad_storagead_user_dataad_personalizationanalytics_storage
Most certified CMPs do this automatically once you tell them you want v2. Some still default to v1 — check.
Step 4: Set the default consent state in GTM
Before any user has interacted with your consent banner, you need a default state.
In GTM:
- Templates > Consent.
- Add a Consent Initialization trigger to fire on page load before everything else.
- Configure with default values:
``javascript // In your CMP or a GTM Custom HTML tag set to fire on Consent Initialization window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('consent', 'default', { 'ad_storage': 'denied', 'ad_user_data': 'denied', 'ad_personalization': 'denied', 'analytics_storage': 'denied', 'wait_for_update': 500, 'region': ['EEA', 'GB'] // apply defaults only to EU/EEA + UK }); ``
For regions outside EU/EEA/UK, you can set defaults to granted if that matches your privacy posture. Many accounts run denied by default in EEA, granted elsewhere — legally compliant and operationally sensible.
Step 5: Update consent when the user interacts with the banner
When the user clicks "Accept All" or "Reject All" or saves custom preferences:
``javascript gtag('consent', 'update', { 'ad_storage': 'granted', 'ad_user_data': 'granted', 'ad_personalization': 'granted', 'analytics_storage': 'granted' }); ``
(Or denied values for users who reject.) Most CMPs do this automatically — verify in DevTools that the gcs parameter changes after the user interacts.
Step 6: Enable Advanced mode in GTM
In each of your Google Ads and GA4 tags:
- Open the tag.
- Scroll to Advanced Settings > Consent Settings.
- Set required consent: leave it as No additional consent required (this enables Advanced mode — tags load but respect consent state internally).
- Save.
Counter-intuitive: setting "Require additional consent" actually puts the tag in Basic mode (it won't fire without consent). "No additional consent required" puts it in Advanced mode (it fires but adjusts behaviour based on consent).
Step 7: Verify modelled conversions in Google Ads
Once Consent Mode v2 is live for at least 7 days:
- In Google Ads, go to Tools > Conversions.
- Open any conversion action.
- Scroll to Diagnostics.
- Look for the Consent Mode section.
You should see:
- Total conversions.
- Conversions from consented users.
- Modelled conversions (the recovered fraction).
A healthy implementation shows modelled conversions making up 15-35% of total. If you see 0 modelled conversions, advanced mode isn't working — go back through Steps 4-6.
Step 8: Verify Smart Bidding is using modelled conversions
In Google Ads:
- Open the Bid Strategy report.
- Look for "Conversion signals used" — should include modelled signals.
- Run for 2-3 weeks. Watch for ROAS / CPA stability.
If Smart Bidding is excluding modelled conversions (which it does by default in some configurations), enable them under Bid Strategy settings > Use estimated conversions.
The impact in real accounts
A few data points from accounts I've migrated:
- Travel account, UK + EU traffic: ~32% of conversions were being lost to "consent denied" before v2. After Advanced Mode + modelled conversions, recovered ~24% of total volume. Smart Bidding visibly stabilised within 3 weeks.
- Healthcare account, EU only: Modelled conversions added 28% to reported volume. Cost per booking dropped 19% as Smart Bidding had a fuller picture.
- E-commerce account, mixed geography: EU/EEA conversions previously underreported by 40%. Post-implementation, reported volume matched backend within 8%.
The pattern: the higher the percentage of EU/EEA traffic, the bigger the recovery.
Use case: a UK ticketing business losing visibility on EU bookings
A composite based on patterns I've seen.
A UK-based ticketing business sold attraction tickets across Europe. About 45% of bookings came from EU/EEA users. They had a basic cookie banner but no Consent Mode of any version. Conversion data in Google Ads showed roughly 60% of what their backend showed for EU traffic.
We implemented full Consent Mode v2 with Advanced mode:
- Cookiebot as the CMP.
- Default to all-denied in EU/EEA, all-granted elsewhere.
- GTM tags set to Advanced mode.
- Verified modelled conversions appearing in Google Ads after 10 days.
Results over 60 days:
- Reported conversions in Google Ads up 27% (with no actual booking increase — just better attribution).
- Modelled conversions accounted for 23% of total reported volume.
- Smart Bidding (tROAS) became visibly more consistent. Daily ROAS variance dropped.
- Customer Match audience refresh resumed for EU users (had been broken without ad_user_data consent signal).
- CAC reduced by 14% over the period as Smart Bidding had better signal.
The booking volume didn't change. Google Ads finally saw it accurately.
Common mistakes
- Defaulting to "granted" in EU/EEA. Illegal under GDPR. Default must be denied; consent must be active opt-in.
- Using a non-certified CMP. Not all CMPs broadcast v2 signals correctly. Verify certification.
- Forgetting
wait_for_update. Without this, page-load tags fire before the CMP has had time to apply user choices. - Setting "Require additional consent" in tag config. Disables Advanced mode and loses modelled conversion recovery.
- Not segmenting defaults by region. Applying EU defaults globally cuts your non-EU conversion signal unnecessarily.
- Ignoring the diagnostics report. If modelled conversions = 0, something's broken. Don't assume "no news is good news."
Bottom line
Consent Mode v2 is one of the highest-ROI implementations a performance marketer can do right now. It's legally required for EU/EEA personalised advertising, and the modelled conversion recovery makes it a measurable performance lever even for accounts that don't strictly need it for compliance.
- Use a certified CMP that supports all four v2 signals.
- Set sensible region-specific defaults (denied in EU/EEA, granted elsewhere).
- Run Advanced mode to recover modelled conversions when consent is denied.
- Verify in Diagnostics that modelled conversions are appearing.
- Watch Smart Bidding stabilise as the signal completeness improves.
The accounts I've migrated typically see 15-30% recovery in reported conversions and meaningful Smart Bidding improvements within 4 weeks. The implementation is half a day. The compliance protection is permanent.
Stop pretending the cookie banner has nothing to do with performance. It has a lot to do with it.
Sources and further reading:
