How to implement Google Consent Mode v2.

Set up GDPR-compliant tracking in Webflow with GTM.

Date
November 21, 2025
Time to Read
5
minutes
Topic
CRM
Websites

Understanding Google Consent Mode v2 requirements

Before diving into implementation, it's important to understand what Google Consent Mode v2 actually requires.

Google now expects websites to define four consent signals:

  • ad_storage – controls cookies for advertising
  • analytics_storage – controls cookies for analytics
  • ad_user_data – controls whether user data can be sent to Google for ads
  • ad_personalization – controls personalized advertising

These signals determine whether Google Ads, GA4, Enhanced Conversions, remarketing, and cross-site tracking can run on your site.

If these signals aren't configured correctly, your tags will either fire when they shouldn't, fail to fire when they should, or get rejected entirely by Google Ads. You'll also see "Consent Not Configured" warnings inside GTM's Consent Overview panel.

That's why getting this setup right matters for both compliance and accurate tracking.

Setting consent defaults to "denied" in Webflow

For GDPR compliance, your page must load with all consent signals denied by default. No tracking should occur until the user explicitly grants permission.

I built a fully custom cookie banner in Webflow. To ensure compliance, I added the following script at the very top of the Webflow <head> section, before the GTM container loads:

This ensures no Google tags fire prematurely and no cookies are dropped before consent is given.

Restoring returning user consent before GTM loads

One discovery that saved me hours of debugging:

GTM will only respect user consent if it's restored before GTM loads.

If a returning visitor has already accepted cookies, you need to restore their preferences before the GTM container initializes. Otherwise, the site loads in "denied" mode every time, causing broken analytics and lost conversions.

I solved this by reading the user's previous settings from localStorage and updating Consent Mode before injecting GTM:

This ensures repeat visitors load the site with their previous consent signals already active, so tags fire correctly from the first pageview.

Fixing the biggest problem: tags not firing after consent changes

Everything looked correct in my setup until I discovered something frustrating:

When a user updates their cookie settings, GTM does not automatically re-fire tags.

This creates a serious tracking gap:

  • User accepts cookies → tags don't fire
  • User changes preferences → tags don't fire
  • User allows analytics → GA4 doesn't start
  • User allows ads → Google Ads conversions don't send
  • Enhanced conversion events silently fail

The reason? GTM evaluates tag firing conditions once, on page load. It doesn't re-evaluate when consent state changes mid-session.

The solution: push a custom event when consent changes

Inside my cookie banner's "Save Preferences" function, I added this line:

Then, in GTM, I created a new trigger:

  • Trigger type: Custom Event
  • Event name: consent_refresh

I added this trigger to every tag that depends on consent:

  • GA4 Configuration tag
  • GA4 Event tags
  • Google Ads Conversion tags
  • Enhanced Conversions (User-Provided Data Event)
  • HubSpot tracking script
  • Meta Pixel
  • Any tag requiring analytics_storage or ad_storage

Now all tags fire instantly when consent is granted, without requiring a page reload.

This was one of the biggest breakthroughs in getting the system to work properly.

Why GTM's built-in consent settings aren't enough

GTM automatically recognizes consent requirements for most Google tag types. For example:

  • GA4 requires: analytics_storage, ad_user_data, ad_personalization
  • Google Ads Conversion requires: ad_storage, ad_user_data

These appear in GTM's Consent Overview as "Built-in consent."

But here's what tripped me up:

Even if a tag has built-in consent rules, GTM still blocks it unless you explicitly configure what happens when consent is missing.

That's where "Additional Consent" settings come in.

For every marketing and analytics tag, I had to manually enable:

  • "Require additional consent" = ON
  • Select the exact consent signals that tag depends on

Here's how I configured my main tags:

Google Ads Conversion tag

  • Additional consent required: ad_storage, ad_user_data

GA4 Configuration tag

  • Additional consent required: analytics_storage

Meta Pixel (Custom HTML)

  • Additional consent required: ad_user_data, ad_personalization

If you skip this step, GTM won't evaluate your tags correctly under Consent Mode v2. They'll appear in the dashboard as "Consent Not Configured" even if they seem to work during testing.

This was another major source of confusion during my first implementation attempt.

Validating your setup with GTM's Consent Overview

GTM's Consent Overview panel is essential for verifying your configuration.

It categorizes your tags into two groups:

Consent not configured
Tags that are missing additional consent requirements, have mismatched consent signals, or have triggers that aren't aligned with consent state.

Consent configured
Tags where built-in consent requirements are satisfied, additional consent rules are defined, and triggers only fire after consent is granted.

I used this panel to verify that each tag:

  • Had correct built-in consent recognition
  • Had correct additional consent requirements set
  • Included the custom consent_refresh trigger
  • Was not firing early or without permission

Only once every tag moved into the "Consent Configured" section was the setup fully compliant and reliable.

Why I didn't use Cookiebot (and when you should)

For many Webflow users, Cookiebot is the easier route:

  • Automatically detects and categorizes cookies
  • Integrates directly with GTM
  • Sends consent states to Google automatically
  • Blocks scripts until user approval
  • GTM offers a Cookiebot tag template for quick setup

I chose not to use Cookiebot because I wanted:

  • Fully custom banner design
  • A lightweight script footprint
  • Complete control over consent logic
  • A Webflow-native implementation
  • No recurring monthly cost

But building your own banner has real downsides:

  • You're responsible for compliance. If regulations change or you miss a requirement, there's no automatic update. You need to stay informed and maintain the code yourself.
  • No automatic cookie scanning. You have to manually audit which cookies your site drops and categorize them correctly.
  • More debugging. When something breaks, you're on your own. Tools like Cookiebot have support teams and community forums.
  • Initial time investment. Getting everything working correctly took me significantly longer than a plug-and-play solution would have.

If you want a simpler, lower-maintenance solution and don't need custom styling, Cookiebot is a solid choice that handles most of the complexity for you.

Final result: a fully compliant Consent Mode v2 setup

After all the troubleshooting, my Webflow site now:

  • Loads with all consent signals denied by default
  • Restores previous user consent before GTM initializes
  • Updates Consent Mode instantly when users change their preferences
  • Fires tracking tags immediately using the consent_refresh custom event
  • Uses proper additional consent rules for each tag type
  • Passes GTM's Consent Overview validation
  • Works seamlessly with Webflow forms and HubSpot integration

It took significant debugging to get everything working correctly, but the end result is clean, predictable, and fully GDPR-compliant.

Read more.

Insights
Click to Read
Featured image for blog item
12.3.25
Automation

AI tools for marketing teams: Smarter, faster, leaner.

How AI automation eliminates repetitive work.

Click to Read
Featured image for blog item
12.1.25
Automation
CRM

Marketing technology strategy for UK SMEs.

How to build an integrated MarTech stack that works.

Click to Read
Featured image for blog item
12.1.25
Automation
Branding & Design
CRM
PPC & SEO
Websites

Our journey and why The Marketing Technologists exists.

Why we exist and how we help lean teams thrive.

Click to Read
Featured image for blog item
11.30.25
CRM
Automation

Get more from your CRM: A practical guide for UK SMEs.

How to turn your CRM into a growth engine.

Click to Read
Featured image for blog item
11.27.25
Automation
Websites

AI-powered Webflow management with MCP.

How MCP integrations transform website workflows.

Click to Read
Featured image for blog item
11.24.25
Websites
Automation
Branding & Design

What Webflow App Gen means for anyone planning a new website.

AI-powered custom features at half the cost and time.

Click to Read
Featured image for blog item
11.24.25
Automation
Branding & Design
CRM
Websites

Resetting your marketing baseline.

Why overstretched B2B teams need to rebuild the basics.

Click to Read
Featured image for blog item
11.18.25
Branding & Design
Websites

Content led vs design led websites.

Why content and messaging should always lead web design.

Ready to take your marketing to the next level?

Schedule a meeting
Call 
CRM
Websites

Cookie Preferences

We use cookies to ensure you get the best experience.

Cookie Settings

Strictly Necessary

Required for the site to function.

Analytics

Helps us understand usage.

Marketing

Used for personalised ads.

🍪