Consent Mode v2,
initialized in order.
ConsentEase sets denied Consent Mode v2 defaults before the Google Tag Manager container, then sends a consent update on the visitor's choice — so supported Google tags read the right state from the start.
Initialization order
Illustrative- step 0Page loadDefaults before GTM
The document begins parsing.
- step 1ConsentEase snippetgtag('consent', 'default', { denied })Defaults before GTM
Defaults set before Google Tag Manager.
- step 2GTM container loadsSupported tags read state
Supported Google tags read the denied consent state.
- step 3Banner appearsChoices presented
Visitor is presented with consent choices.
- on choiceVisitor decidesgtag('consent', 'update', { … })Update on choice
A consent update reflects the visitor's choice.
- afterSignals adjustBehavior adjusts
Supported Google tags respond to the updated consent state.
Order is illustrative. ConsentEase sets denied defaults before the Google Tag Manager container; supported Google tags then adjust their behavior from the consent state.
Order is the whole game.
A late consent default creates a race
If the consent default is declared after tags already run, early requests are made without an established consent state.
Missing updates limit downstream behavior
Without a consent update reflecting the visitor's choice, supported Google tags cannot adjust their behavior for that choice.
Hand-wiring the dataLayer is fragile
A single mistake in a hand-written dataLayer can break the consent flow, and without diagnostics it can go unnoticed.
The timeline is illustrative and shows sequence, not fixed timings. Setting the consent default before the Google Tag Manager container is what keeps the order correct.
Late default: an initialization race
IllustrativeRelative order only — bars show sequence, not fixed timings.
gtm.js
container loads
Analytics tag
fires
Ads tag
fires
CMP script
loads late
Consent banner
appears
Consent default
set (too late)
The gap: when the consent default is set after tags already ran, early hits carry no established consent state. Setting the default first is what closes this gap.
Four stages, in order.
Defaults first, dependent tags next, choices presented, updates sent. Supported Google tags adjust their behavior from the consent state; non-Google tags require their own GTM consent checks or vendor controls.
Establish defaults
The ConsentEase snippet runs first and sets denied defaults before the Google Tag Manager container loads.
gtag('consent', 'default', { ad_storage: 'denied', ad_user_data: 'denied', analytics_storage: 'denied', security_storage: 'granted', wait_for_update: 500});Load dependent tags
Google Tag Manager loads. Supported Google tags read the denied consent state and adjust their behavior; non-Google tags need their own GTM checks or vendor controls.
Present choices
The banner appears and the visitor makes a choice. Nothing is inferred — the update reflects exactly what the visitor selects.
Send updates
A consent update is sent for the choice. Supported Google tags respond to the new state.
gtag('consent', 'update', { ad_storage: 'granted', analytics_storage: 'granted'});The gcs parameter
Diagnostics-supportedThe consent state on a Google request is encoded in gcs. These are the interpretations ConsentEase diagnostics inspect — no outcome is guaranteed.
- ad_storage
- granted
- analytics_storage
- granted
Both granted — expected after a visitor accepts.
- ad_storage
- granted
- analytics_storage
- denied
Ads granted, analytics denied.
- ad_storage
- denied
- analytics_storage
- granted
Analytics granted, ads denied.
- ad_storage
- denied
- analytics_storage
- denied
Both denied — the state before a visitor chooses.
Interpretations are observed from initial-load evidence, not an outcome guarantee.
Compact examples reflect the current ConsentEase embed. It initializes ad_storage, ad_user_data, ad_personalization, analytics_storage, functionality_storage, and personalization_storage as denied; security_storage as granted; wait_for_update at 500; enables ads_data_redaction and url_passthrough; then loads the script asynchronously.
What diagnostics can see.
The initial-load scan reports what it can observe and is explicit about what it cannot. It never claims a verified accept or reject journey.
Observed before interaction
- Banner script presenceobservable
- Consent default declarationobservable
- Google request consent statewhen present
- Consent default countbrowser mode only
Not measured on this scan
- Default-before-GTM orderingnot proven
- After accept — gcsnot measured
- After reject — gcsnot measured
- Storage grants per choicenot measured
What the evidence is
The diagnostic scan inspects the initial page load. It can observe the banner script, a consent default declaration, and consent state on eligible Google requests. Browser-mode evidence can also count default declarations; fallback scans may report that as unavailable.
What it is not
Finding a default does not by itself prove it ran before Google Tag Manager. The scan also never answers the banner, so the after-accept and after-reject journey is not simulated or verified. It is implementation evidence — not legal clearance or a compliance verdict.
Read the diagnostics documentationDiagnostics are observed initial-load implementation evidence. Availability depends on the scan mode. The evidence does not by itself prove ordering, is not legal clearance, and does not simulate a full accept or reject journey. Confirm your setup against current Google documentation and your own vendor controls.
Setup responsibilities, compared.
Default set before GTM
- ConsentEase
- Set before the container
- Cookiebot
- Configuration-dependent
- CookieYes
- Configuration-dependent
- Manual implementation
- You control the order
Consent update on choice
- ConsentEase
- Sent automatically
- Cookiebot
- Configuration-dependent
- CookieYes
- Configuration-dependent
- Manual implementation
- You write it
Consent Mode v2 signals
- ConsentEase
- ad_user_data / ad_personalization set
- Cookiebot
- Configuration-dependent
- CookieYes
- Configuration-dependent
- Manual implementation
- You map each signal
Initial-load diagnostics
- ConsentEase
- Built-in
- Cookiebot
- Check the vendor's tooling
- CookieYes
- Check the vendor's tooling
- Manual implementation
- Browser DevTools
Setup path
- ConsentEase
- Guided install + verification
- Cookiebot
- Vendor setup flow
- CookieYes
- Vendor setup flow
- Manual implementation
- Fully manual
Neutral, configuration-dependent comparison. Where a vendor's behavior depends on its own configuration, it is labelled as such rather than asserted. Verify current vendor capabilities and Google policy before deciding.
Verify your Consent Mode
setup for free.
Scan your site to see the initial-load evidence, then talk to us if you want a hand getting the order right.