Table of contents

Google Consent Mode V2: what it is, how it works, and how to set it up

What Consent Mode V2 is, how does it work, and how to leverage it with Server-side Tracking

Google updated its Consent Mode framework in early 2024, adding 2 new consent types and making the whole thing mandatory for anyone using Google Ads in Europe. Most teams updated their CMP tag in GTM and moved on. What many didn't catch is that the Basic vs. Advanced choice, and how consent signals travel through a server container, has a direct impact on how much conversion data reaches your ad platforms.

The framework, the tradeoffs, the server-side nuances, and the setup steps are covered in this article.

Consent Mode is a set of signals that your cookie banner sends to Google's tags. When a user accepts or declines cookies, those signals tell Google's products what they're allowed to do: set cookies, collect user data, run personalised ads, or model conversions.

The CMP handles the user interaction, the upstream side. Google's tags then adjust their behaviour based on whatever the user chose. Consent Mode sits between the two and carries the decision from one to the other.

V1 used two consent types. V2 added two more:

Consent TypeControlsAdded inDMA Required
ad_storageAdvertising cookiesV1No
analytics_storageAnalytics cookiesV1No
ad_user_dataSending user data to Google for advertising purposesV2Yes
ad_personalizationPersonalised ads and remarketingV2Yes

The last two matter specifically for the EU's Digital Markets Act. Google needs explicit consent not just for storing cookies, but for using your visitors' data inside its ad systems. Without ad_user_data and ad_personalization properly configured, remarketing audiences and conversion tracking are incomplete regardless of what your CMP says.

There are two ways to implement Consent Mode, and the difference shows up in your advertising performance.

Basic Consent Mode: Tags only fire after the user explicitly consents. Non-consenting visitors generate no data at all.

Advanced Consent Mode: Tags load with default states (denied in the EU). When a non-consenting user visits, the tag still sends cookieless pings to Google, a minimal signal without identifying data. When they accept, full data flows.

Here's how the 3 states compare in practice:

No Consent ModeBasicAdvanced
Non-consenting usersUncontrolled (compliance risk)No signal sentCookieless ping sent
Conversion modeling availableNoNoYes (after threshold)
Modeling threshold--700 ad clicks / 7 days / country
EU site at ~40% consent rateCompliance risk54% of signals gone, no alert54% partially recoverable

Google Ads needs at least 700 ad clicks over 7 days per country before it starts modeling conversions. Under that threshold, even Advanced mode sends cookieless pings from non-consenting users, but the modeling never kicks in.

consent mode v2 for european websites

According to SearchLab’s Privacy & GDPR’s Statistics, for EU sites where consent rates typically sit around 46%, Basic mode means 54% of your conversion signal disappears from Google's view. Campaigns keep running, bidding algorithms adjust to whatever's left, and there's no warning that the data is thin.

Advanced is the better choice for most sites. The requirement is that your CMP tag fires before any other tag, during the consent initialisation trigger, so default states are set before any data is collected. If there's a delay, you risk sending data before consent is initialised.

Most server-side setups have a gap here: consent states are not forwarded to the server container automatically. What happens instead depends entirely on which tags you're running.

Google products: handled automatically

For GA4 and Google Ads, the web container packages the current consent state into a gcs parameter on every outgoing request. That request hits the server container, and the Google tags there read the parameter and handle consent enforcement on their own. No additional configuration needed in the server container for these tags.

Meta Conversions API, LinkedIn Insight Tag server-side, TikTok Events API, and similar platforms don't read the gcs parameter. They need consent states passed explicitly as event parameters. Without that, the tag has no way to know what the user agreed to.

Setup for non-Google tags

  1. Download and import the GitHub Consent State Template into your GTM web container
  2. Create a Consent State variable for each relevant type: ad_storage, analytics_storage, ad_user_data, ad_personalization
  3. Add all four variables to a Google Tag Event Settings variable as event parameters
  4. Attach that Event Settings variable to your main Google Tag
  5. In the server container, create Event Data variables for each consent state, using the consent type name as the Key Path (e.g., ad_personalization)
  6. Use these variables as trigger conditions to gate non-Google tags, so they only fire when the relevant consent type is granted

Without this, a server-side Meta or TikTok tag fires on every event, regardless of what the user chose.

Go to Admin → Container Settings in your GTM web container. Under Additional Settings, enable Consent Overview and save. This makes consent behaviour visible in Preview mode, which you need for verification.

2. Add your CMP tag

Go to Tags → New and find your CMP in the Community Template Gallery. Set the trigger to Consent Initialisation - All Pages. This fires before everything else on the page and sets the default consent states.

Different CMPs use different internal category names. Standard mapping for EU sites:

  1. Marketing → ad_storage, ad_user_data, ad_personalization
  2. Statistics → analytics_storage
  3. Preferences → functionality_storage, personalization_storage

Check your CMP's documentation to confirm its exact category names. Mismatched mapping is one of the more common Consent Mode problems and not obvious to spot from the outside.

4. Set defaults to denied for EU visitors

All four consent types should default to "denied" before any user interaction. Your CMP tag should handle this, but verify it in GTM Preview by checking the Consent tab on a fresh page load before interacting with the banner.

5. Configure the server container for non-Google tags

Follow the steps from the previous section: Consent State Template, Event Settings variable, server-side Event Data variables, consent-based trigger conditions. For GA4 and Google Ads in the server container, nothing extra is needed.

6. Verify with Tag Assistant

Open GTM Preview in a fresh browser session. Load your site and open the Consent tab. All four types should show "denied." Accept the banner and confirm that they update to "granted." Then check the Tags tab to verify tags fire or hold back according to the consent state.

For the full configuration reference, the TAGGRS Consent Mode documentation walks through each step in detail.

CMP-specific notes

Cookieconfirm

Cookieconfirm uses a dedicated tag in the Community Template Gallery. Install it with a Consent Initialisation trigger, and the server container picks up the GCS parameter for all Google tags automatically. For non-Google tags, create custom blocking triggers using the ED | x-ga-gcs Event Data variable. The value gcs=G101 means ad_storage is denied; gcs=G10 at the start indicates ad_storage denial in the GCS string format. 

Axeptio

Axeptio works differently. Rather than the standard GCS parameter, Axeptio tracks consent through vendor names stored in axeptio_authorized_vendors and pushes an axeptio_update event to the dataLayer when consent changes. On the server side, create an Event Data variable for axeptio_consent_state and condition each tag on whether the relevant vendor name (e.g., google_analytics) is present in that variable. The category-to-signal mapping for Consent Mode V2 is configured inside the Axeptio platform itself. 

Three methods are used in combination.

Open a private browser session, start Preview mode, and load your site. Before touching the banner, open the Consent tab. All four consent types should read "denied." Accept the banner and watch the values update. If they don't change, the CMP tag isn't firing or its categories aren't mapped to the right consent types.

Network tab - gcs parameter

In Chrome DevTools, filter network requests for collect. Each GA4 hit includes a gcs parameter that encodes the current consent state. G111 means all four types are granted. G101 means ad_storage is denied, analytics_storage is granted. The parameter value is what actually got sent to Google, not what the banner claimed to set.

TAGGRS dashboard

In your TAGGRS server container, incoming events carry the consent state parameters passed from the web container. Check an event from a consenting session and confirm that ad_storage, analytics_storage, ad_user_data, and ad_personalization appear as event parameters with the expected values. If they're missing, the Event Settings variable isn't connected, or the Consent State Template wasn't imported.

Where TAGGRS fits

Server-side tracking and Consent Mode V2 work well together, but they need to be wired up correctly for the combination to hold. The automatic GCS handling in Google's tags covers GA4 and Google Ads without extra work on the server side. For everything else, Meta, LinkedIn, TikTok, or any custom server-side integration, consent has to be passed deliberately through the event payload.

TAGGRS provides the server container infrastructure and publishes the Consent State Template that handles how consent parameters travel from the web container to the server. For teams on Axeptio or Cookieconfirm, the CMP-specific guides above cover the exact configuration steps for each platform.

FAQ

V1 used two consent types: ad_storage and analytics_storage. V2 added ad_user_data, which controls whether user data is sent to Google for advertising, and ad_personalization, which controls remarketing and personalised ads. Both new types are required for DMA compliance. Sites still on V1 will see incomplete remarketing audiences and gaps in conversion tracking.

No. They serve different purposes. Consent Mode governs what data Google is allowed to process based on user choices. Server-side tracking changes where data collection happens, moving it from the browser to your own server. The two work together: server-side tracking improves first-party cookie lifespans and data quality, but consent decisions still need to travel with the data to stay compliant.

Three checks: the GTM Preview Consent tab (verify defaults are "denied" before interaction and update after); the gcs parameter on GA4 network requests (G111 = all granted); and your TAGGRS server container dashboard to confirm consent state parameters are arriving on server-side events.

Google Ads needs 700 ad clicks over 7 days per country and domain before conversion modeling activates. Below that, Advanced Consent Mode sends cookieless pings from non-consenting users but Google can't yet model conversions from them. Basic Consent Mode never reaches this threshold for non-consenting users because no signal is sent at all.

About the author

Recently published

magnifiercrossmenu linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram