I keep getting violations with codes like GCM_001, GCM_003, and GCM_009. What do these codes mean and how do I fix them?
I keep getting violations with codes like GCM_001, GCM_003, and GCM_009. What do these codes mean and how do I fix them?
Analytics Proof checks for 10 specific Google Consent Mode v2 violation types. Here's what each code means and how to fix it:
The gtag('consent', 'default', {...}) command is not present before GTM or GA4 initializes.
Fix: Add this snippet before your GTM container loads:
gtag('consent', 'default', {
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'analytics_storage': 'denied'
});
Tracking cookies like _ga, _fbp, or _ttp were set before any consent default was established.
Fix: Ensure your GTM/GA4 scripts load only after the consent default is set. The consent default should deny all storage types initially.
After the user clicked accept or reject on the consent banner, no consent update command was detected.
Fix: Configure your CMP to call gtag('consent', 'update', {...}) when the user makes a choice. Most CMPs (OneTrust, Cookiebot, etc.) have a Google Consent Mode integration — make sure it's enabled.
The consent update values don't match the user's action. For example, the user clicked "reject" but ad_storage was set to granted.
Fix: Verify your CMP maps the accept button to granted and the reject button to denied for all consent types.
New tracking cookies were created after the user rejected consent.
Fix: This usually means a vendor script is ignoring consent state. Check that all tracking tags in GTM have consent checks enabled, or use Advanced Consent Mode.
After reloading the page, the consent state was not restored.
Fix: Ensure your CMP saves the consent choice to a cookie and restores it on subsequent page loads via a new consent default or consent update command.
The internal consent state (google_tag_data.ics.entries) shows inconsistent values between different consent types.
Fix: Review your CMP configuration to ensure all consent types are updated together in a single consent update call.
GA4 requests contain a gcs parameter that doesn't match the current consent state. For example, gcs=G111 (all granted) was sent when consent was denied.
Fix: This is usually a timing issue. Ensure consent updates propagate to GA4 before new requests fire.
Analytics or advertising vendors made tracking requests before the user interacted with the consent banner, and those requests were not in compliant cookie-less mode.
Note: The following are considered compliant before consent:
gtm.js) and gtag.js librarygcs=G100 (Advanced Consent Mode / cookie-less)Fix: Enable Advanced Consent Mode for GA4. For other vendors, delay loading until consent is granted.
Tracking vendors made non-compliant requests after the user explicitly rejected consent.
Fix: Ensure all tracking tags stop firing when consent is denied. In GTM, use built-in consent checks on every tag.