Consent Mode v2 fails quietly. The banner shows up, the visitor clicks, the site looks fine, and yet Google may be receiving the wrong signal, or no signal at all. You usually find out weeks later, when conversions drop in Google Ads or GA4 stops modeling. This guide shows how to check if consent mode is enabled and working, step by step. If you have not implemented it yet, start with our Google Consent Mode v2 implementation guide, then come back here to test it.
How to check Google Consent Mode v2: what a working setup looks like
Before testing, know what you are looking for. A correct implementation meets five conditions:
- A default is set first. A
gtag('consent', 'default', {...})command runs before any Google tag loads (GA4, Google Ads, Floodlight). If a tag fires before the default, it runs as if consent were granted. - All four v2 signals are declared. Consent Mode v1 only had
ad_storageandanalytics_storage. Version 2 addsad_user_dataandad_personalization, which Google requires to keep audiences and conversion measurement for EEA traffic. - The default is
deniedfor visitors who must consent. For EU and UK visitors, all four signals start asdenied. - An update follows the choice. When the visitor accepts or rejects, the CMP sends
gtag('consent', 'update', {...})with the matching values. - The stored choice is sent again on every page. A returning visitor who accepted yesterday must not be treated as denied today.
The tests below check each condition in turn.
Test 1: check if consent mode is enabled in the browser console
This is the fastest check, and it works on any site.
- Open the site in a private window so that no previous choice is stored.
- Open the developer tools (F12, or right-click then Inspect) and go to the Console tab.
- Type
dataLayerand press Enter.
Expand the entries. One of the first ones should be an arguments object containing consent, default and the four signals set to denied. It must appear before the entries that load your tags (js, config). Then click "Accept all" in the banner, type dataLayer again and look for a new consent, update entry with the signals set to granted.
If you see no consent entry at all, Consent Mode is not enabled. If the config entry for your GA4 or Google Ads ID comes before the default, the tag ran without consent restrictions. FlowConsent's banner checks for exactly this race at startup and logs a console error naming the tag IDs involved.
Test 2: test Google Consent Mode with Tag Assistant
Tag Assistant (tagassistant.google.com) is Google's own debugger and the most reliable way to test Google Consent Mode. If you use Google Tag Manager, clicking Preview in your container opens it for you.
- Enter your site URL and connect.
- In the left column, select the first event (often "Consent" or "Consent Initialization").
- Open the Consent tab. It shows each signal with three columns: the on-page default, the on-page update and the current state.
Before you click the banner, the default column must show denied for the four signals and the update column must be empty. Click "Accept all" on the site, then select the new event in Tag Assistant: the update column should now show granted. Repeat with "Reject all" in a fresh session: the update stays denied.
Tag Assistant also flags common problems with a warning, for example a tag that read consent before a default was set. In GTM, you can additionally turn on Consent Overview in the container settings to see which tags have built-in consent checks and which ones need an additional consent requirement. Our Google Tag Manager and Consent Mode v2 guide covers that configuration.
Test 3: read the gcs and gcd parameters in network requests
Every request a Google tag sends carries the consent state in two URL parameters. Reading them shows what Google actually received, which is what matters.
- Open the Network tab of the developer tools and reload the page.
- Filter on
collect(GA4 requests) or ongcs=(any Google tag). - Click a request and look at its query parameters.
The gcs parameter
gcs encodes the two storage signals. It starts with G1, followed by one digit for ad_storage then one for analytics_storage (1 for granted, 0 for denied):
G100: both denied. Expected before any choice and after a refusal.G111: both granted. Expected only after the visitor accepts.G110: advertising storage granted, analytics denied.G101: analytics storage granted, advertising denied.
If you see G111 on the very first request, before anyone touched the banner, your default is missing or set to granted. That is the most serious failure, because Google records consent that was never given.
The gcd parameter
gcd is longer (for example 13p3p3p3p5) and covers the four v2 signals, in this order: ad_storage, analytics_storage, ad_user_data, ad_personalization. Google does not document it officially, but the letters have been analyzed by the measurement community. The ones you will meet most often:
l: signal not set. Seeing it forad_user_dataorad_personalizationmeans you are still on a v1 setup.p: denied by default, no update yet.q: denied by default and denied by the update.r: denied by default, then granted by the update. This is the ideal pattern after an acceptance.t: granted by default, no update.v: granted by default and by the update.
A t or v for EU visitors means the default was granted, which defeats the point of asking.
Basic or advanced mode?
What you see in the network tab also depends on the mode you chose. In basic mode, Google tags do not load at all before consent: no collect request should appear until the visitor accepts. In advanced mode, tags load and send cookieless pings with gcs=G100 while consent is denied. Both are valid, but the result of the test is different. Our article on basic vs advanced Consent Mode explains how to choose.
Test 4: check the cookies before and after the choice
Consent Mode signals are only half of the story. The other half is that nothing is stored on the device while consent is denied.
- In a private window, open the developer tools and go to Application (Chrome) or Storage (Firefox), then Cookies.
- Load the site without touching the banner. You should see no
_ga,_ga_<ID>(GA4) or_gcl_au(Google Ads conversion linker) cookie. - Click "Reject all" and reload: still no Google cookies.
- In a new private window, click "Accept all": the cookies appear.
If _ga is present before any choice, a tag is running outside Consent Mode, often a second copy of GA4 added by a plugin or by the site builder's native integration. Want to see every cookie your site sets before consent, not only Google's? Check it in 30 seconds with the free cookie scanner.
Test 5: check the consent mode status in Google Ads and GA4
The browser tests prove what a single visit sends. The platform screens show what Google receives across all your traffic.
- Google Ads: open your conversion actions, then the Diagnostics tab. Google shows whether consent mode is detected on your tags and flags a lack of consent signals for EEA traffic. Changes can take several days to appear there, so do not expect an instant update after a fix.
- GA4: go to Admin, then Data streams, and open your web stream. The Consent settings section tells you whether consent signals for measurement and for ads personalization are active.
If the browser tests pass but these screens report missing signals, the problem is usually limited to some pages or some templates (a landing page without the snippet, a checkout on another domain). The impact of missing signals on bidding and audiences is detailed in our article on Consent Mode v2 and Google Ads.
Test 6: run every consent scenario
One acceptance on the home page is not a test plan. Run each scenario in a fresh private window and repeat Tests 2 to 4:
- First visit, no choice: default
denied, no Google cookies,gcs=G100or no request (basic mode). - Accept all: update to
granted, cookies written,gcs=G111. - Reject all: update stays
denied, no cookies. - Partial choice: accept statistics only, then check that
analytics_storageisgrantedand the three advertising signals staydenied. - Returning visitor: accept, close the tab, come back to another page. The stored choice must be applied immediately, without a burst of denied requests first.
- Withdrawal: reopen the cookie settings, withdraw consent and check that the next requests go back to
G100. - Region: if your default uses the
regionparameter to applydeniedonly in the EEA, test from an EEA connection (or a VPN). A test from outside the region will showgrantedand tell you nothing.
Also test at least one product page, the checkout or thank-you page (where conversions fire) and the mobile version.
The most common failures and what they mean
- No
consent defaultin the dataLayer: Consent Mode is not enabled. Check that your CMP has the option turned on, or that the default is set in GTM with the Consent Initialization trigger. - The
configcomes before thedefault: a tag is hard-coded above the CMP snippet. Move the CMP snippet up or remove the duplicate tag. lfor two signals ingcd: v1 setup. Update your CMP or template so it sendsad_user_dataandad_personalization.- The state stays
deniedafter acceptance: the CMP does not send the update, or sends it with the wrong signal names. grantedbefore any choice for EU visitors: wrong default. This is a compliance problem, not just a measurement one.- Meta, LinkedIn or Hotjar still fire before consent: these tags do not read Google's signals. They must be blocked by the CMP or given an additional consent requirement in GTM.
How FlowConsent handles Consent Mode v2 checks
FlowConsent is built to pass these tests by default. The integration snippet starts with an inline stub that sets the four signals to denied before any Google tag, with wait_for_update so a returning visitor's stored choice is applied before the first hits. The banner sends the update on every choice and on every page. If a Google tag is queued before the defaults, the banner logs a console error naming it, and the installation assistant checks the whole chain on your live page. The compliance scan also recognizes cookieless gcs=G100 pings as compliant and flags any hit that claims consent was granted after a refusal. It is free up to 25,000 sessions per month. Details are in the Google Consent Mode documentation.