Consent Mode V2 Implementation: Complete Guide for Google's New Requirements (2024)

Google now requires Consent Mode V2 for EU ads. Here's how to implement it correctly—covering default consent, update signals, and GTM configuration.

consent modeGDPRprivacyGA4Google Adsimplementation

Google now requires Consent Mode V2 for any business running ads targeting users in the European Economic Area (EEA). Without proper implementation, you’ll lose audience data, remarketing capabilities, and conversion tracking for EU users starting March 2024.

This guide covers everything you need to know to implement Consent Mode V2 correctly.

Consent Mode is a Google API that adjusts how Google tags behave based on user consent choices. Version 2 adds two new required signals:

SignalPurposeV2 Requirement
analytics_storageGA4 cookiesV1 (existing)
ad_storageGoogle Ads cookiesV1 (existing)
ad_user_dataSend user data to GoogleV2 (new)
ad_personalizationPersonalized ads/remarketingV2 (new)

The key change: V2 requires explicit signals for ad_user_data and ad_personalization. Without these, Google won’t accept audience data from EU users.

Why This Matters

If you don’t implement Consent Mode V2 by March 2024:

  • Google Ads remarketing stops for EU users
  • Customer Match uploads fail for EU users
  • Conversion tracking degrades significantly
  • Audience building stops in GA4 for EU users

Implementation Options

You can implement Consent Mode V2 in three ways:

Option 1: Native CMP Integration (Easiest)

Many Consent Management Platforms (CMPs) now support Consent Mode V2 natively:

  • Cookiebot: Built-in support
  • OneTrust: Built-in support
  • Usercentrics: Built-in support
  • CookieYes: Built-in support
  • Termly: Built-in support

If using one of these, check their documentation for Consent Mode V2 activation. Usually it’s a toggle in settings.

Option 2: GTM Template (Most Control)

Use Google’s official Consent Mode template in GTM:

  1. GTM → Templates → Search Gallery
  2. Find “Consent Mode” by Google
  3. Add to workspace

Option 3: Manual Implementation (Most Flexible)

Implement directly in code using gtag.js commands.

Step-by-Step GTM Implementation

Here’s the complete GTM implementation for Consent Mode V2.

Create a tag that sets default consent BEFORE any Google tags fire.

  1. Create a new Custom HTML tag
  2. Add this code:
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}

  // Set default consent state (denied for EEA users, granted for others)
  gtag('consent', 'default', {
    'analytics_storage': 'denied',
    'ad_storage': 'denied',
    'ad_user_data': 'denied',
    'ad_personalization': 'denied',
    'wait_for_update': 500  // Wait 500ms for CMP to load
  });

  // Optional: Region-specific defaults
  gtag('consent', 'default', {
    'analytics_storage': 'granted',
    'ad_storage': 'granted',
    'ad_user_data': 'granted',
    'ad_personalization': 'granted',
    'region': ['US', 'CA', 'AU']  // Non-EEA regions can default to granted
  });
</script>
  1. Trigger: Consent Initialization - All Pages (fires before other triggers)

Critical: This tag must fire BEFORE your GA4 Configuration tag and all Google Ads tags.

Your CMP needs to push consent updates to the data layer when users accept or reject:

// When user accepts all cookies
gtag('consent', 'update', {
  'analytics_storage': 'granted',
  'ad_storage': 'granted',
  'ad_user_data': 'granted',
  'ad_personalization': 'granted'
});

// When user accepts only necessary cookies
gtag('consent', 'update', {
  'analytics_storage': 'denied',
  'ad_storage': 'denied',
  'ad_user_data': 'denied',
  'ad_personalization': 'denied'
});

// Granular consent (user picks and chooses)
gtag('consent', 'update', {
  'analytics_storage': 'granted',      // Accepted analytics
  'ad_storage': 'denied',              // Rejected ad cookies
  'ad_user_data': 'denied',            // Rejected data sharing
  'ad_personalization': 'denied'       // Rejected personalization
});

For each Google tag in GTM:

  1. Open the tag
  2. Go to Advanced Settings → Consent Settings
  3. Select “Require additional consent for tag to fire”
  4. Add the appropriate consent types:
    • GA4 tags: analytics_storage
    • Google Ads tags: ad_storage, ad_user_data
    • Remarketing tags: ad_personalization
  1. GTM → Admin → Container Settings
  2. Enable “Enable consent overview”
  3. This shows consent status in Preview mode

Testing Your Implementation

Use GTM Preview Mode

  1. Click Preview in GTM
  2. Check the Consent tab
  3. You should see:
    • Default consent state on page load
    • Consent update when you interact with CMP
    • Tags properly blocked/allowed based on consent

In the browser console:

// Check current consent state
dataLayer.filter(item => item[0] === 'consent')

You should see both default and update commands.

Check Tag Behavior

  1. Deny consent
  2. Verify Google tags don’t fire (or fire with limited data)
  3. Grant consent
  4. Verify tags fire normally

When consent is denied, Google can model conversions using machine learning. To enable this:

  1. GA4 → Admin → Data Collection and Modification → Data Collection
  2. Ensure “Google signals data collection” is ON
  3. Modeling happens automatically

Enable in Google Ads

  1. Google Ads → Settings → Measurement → Conversions
  2. Enable consent mode modeling
  3. You need ~100 daily consented conversions for modeling to work

Common Implementation Mistakes

// Wrong order - tags fire before consent is set
gtag('config', 'G-XXXXXXXX');  // GA4 fires with no consent info
gtag('consent', 'default', {...});

// Right order
gtag('consent', 'default', {...});
gtag('config', 'G-XXXXXXXX');  // GA4 respects consent state

In GTM, use the Consent Initialization trigger for default consent.

Mistake 2: Missing V2 Signals

// Wrong - only V1 signals
gtag('consent', 'default', {
  'analytics_storage': 'denied',
  'ad_storage': 'denied'
});

// Right - includes V2 signals
gtag('consent', 'default', {
  'analytics_storage': 'denied',
  'ad_storage': 'denied',
  'ad_user_data': 'denied',        // V2 required
  'ad_personalization': 'denied'   // V2 required
});

Mistake 3: Not Updating All Signals

// Wrong - only updates V1 signals
gtag('consent', 'update', {
  'analytics_storage': 'granted',
  'ad_storage': 'granted'
});

// Right - updates all signals
gtag('consent', 'update', {
  'analytics_storage': 'granted',
  'ad_storage': 'granted',
  'ad_user_data': 'granted',
  'ad_personalization': 'granted'
});

Mistake 4: CMP Not Pushing Updates

Your CMP must push the consent update to the data layer. Many CMPs have this built in, but check:

  1. Open browser console
  2. Interact with consent banner
  3. Run: dataLayer.filter(item => item[0] === 'consent')
  4. Verify update command appears

If no update appears, your CMP isn’t configured correctly.

Mistake 5: Ignoring Region Defaults

// Consider different defaults by region
gtag('consent', 'default', {
  'analytics_storage': 'denied',
  'ad_storage': 'denied',
  'ad_user_data': 'denied',
  'ad_personalization': 'denied'
});

// Non-EEA regions can default to granted
gtag('consent', 'default', {
  'analytics_storage': 'granted',
  'ad_storage': 'granted',
  'ad_user_data': 'granted',
  'ad_personalization': 'granted',
  'region': ['US', 'CA', 'MX', 'AU', 'NZ', 'JP']
});

For better cross-domain tracking with denied consent:

gtag('consent', 'default', {
  'analytics_storage': 'denied',
  'ad_storage': 'denied',
  'ad_user_data': 'denied',
  'ad_personalization': 'denied',
  'url_passthrough': true  // Enables URL parameter passing
});

This passes limited conversion data through URL parameters when cookies are blocked.

In GTM, enable “URL Passthrough” in your Consent Mode template settings.

Verifying Compliance

Check Google Tag Assistant

  1. Install Tag Assistant Legacy extension (for this specific check)
  2. Load your page
  3. Click the extension
  4. Check for consent mode status

Check GA4 DebugView

  1. GA4 → Admin → DebugView
  2. Load your page with consent denied
  3. Events should show with consent status

Check Google Ads

  1. Google Ads → Tools → Conversions
  2. Your conversion tags should show “Consent mode detected”

Timeline and Requirements

Google’s Deadline

  • March 2024: Consent Mode V2 required for EU audience building and remarketing
  • Without V2: You’ll lose EU remarketing audiences and customer match functionality

Who Must Implement

  • Any business showing consent banners to EU users
  • Any business running Google Ads targeting EU countries
  • Any business collecting EU user data for Google audiences

Who Can Skip

  • Businesses not targeting EU users at all
  • Businesses not using Google Ads
  • Businesses already blocking all Google tags for EU users (though this loses all EU data)

Integration Checklist

Before going live, verify:

  • Default consent fires BEFORE all Google tags
  • All four consent signals are set (analytics_storage, ad_storage, ad_user_data, ad_personalization)
  • CMP pushes consent update on user choice
  • Consent update includes all four signals
  • GTM tags have appropriate consent requirements
  • Preview mode shows correct consent flow
  • Tags respect consent state (blocked when denied)
  • URL passthrough enabled (optional but recommended)

Need Help With Implementation?

Consent Mode V2 has many moving parts, and incorrect implementation can either:

  • Break your EU tracking completely
  • Violate GDPR by tracking without consent

Both are bad outcomes.

If you’re unsure whether your implementation is correct, or you’re seeing issues with EU tracking, we can help diagnose the problem.

Get a free scan and we’ll check your Consent Mode implementation and tell you exactly what’s missing or misconfigured.