Consent Accept/Reject Not Working: Why Consent State Never Updates

Your cookie banner appears. Users click "Accept" or "Reject." The banner disappears. But nothing changes: reject still tracks, accept doesn't enable conversions, and Google sees no consent state updates. The buttons work visually, but the consent state machine is broken.

The Problem:

When consent state doesn't update, your consent banner becomes cosmetic. Users think they're controlling tracking, but Google never receives consent updates, breaking measurement and potentially violating privacy regulations.

What It Looks Like

You might experience these symptoms:

  • Users click "Reject" but tracking continues anyway
  • Users click "Accept" but conversions still don't record
  • Consent Mode v2 is installed but gtag('consent', 'update') never fires
  • Cookie banner UI works but browser console shows no consent state changes
  • GTM consent signals remain in default state regardless of user choice
  • Google Ads sees no consent updates so it uses modeled data instead of actual conversions

The technical reality: your consent banner JavaScript handles the UI (hiding the banner, showing a message), but it never calls the functions that actually update Google's consent state. The visual feedback works, but the underlying state machine is disconnected. This is one of several common ways Google Ads conversion tracking breaks. For a full breakdown of how consent, timing, and configuration interact, see why Google Ads conversions break.

Why This Happens

Consent state updates require explicit calls to Google's consent APIs. Here are the common failure points:

1. Missing Consent Mode Update Calls

The most common issue: your consent banner JavaScript handles the UI but never calls gtag('consent', 'update').

What happens:

  1. User clicks "Accept" button
  2. Banner JavaScript hides the banner
  3. Banner JavaScript sets a cookie or localStorage flag
  4. But gtag('consent', 'update') is never called
  5. Google never knows consent was granted
  6. Tracking remains in denied state

This is especially common with custom-built consent banners or CMPs that don't properly integrate with Consent Mode v2.

2. Consent Updates Called Too Late

Even if you call gtag('consent', 'update'), timing matters. If tracking scripts have already fired before the update, Google may have already processed requests in the denied state.

The sequence that breaks:

  1. Page loads with consent default: denied
  2. Tracking scripts fire (but are suppressed due to denied state)
  3. User clicks accept
  4. Consent update is called
  5. But conversion events that should fire after consent don't fire because the page context has changed

This is why tracking scripts firing before consent and consent state not updating are often related problems.

3. CMP Not Integrated with Consent Mode

Many consent management platforms (CMPs) handle cookie consent but don't automatically update Google Consent Mode. They may:

  • Block cookies but not call Consent Mode update functions
  • Have Consent Mode integration that's not enabled or configured
  • Update consent state but only for their own tracking, not Google's
  • Use outdated Consent Mode v1 syntax instead of v2

Even popular CMPs like Cookiebot, OneTrust, or Quantcast require specific configuration to update Consent Mode v2. If that configuration is missing or incorrect, consent state never updates.

4. React/SPA State Management Issues

In single-page applications (SPAs) built with React, Vue, or similar frameworks, consent state might be managed in component state but never propagated to Google's consent APIs.

What happens:

  • User clicks accept in React component
  • Component state updates (e.g., setConsentGranted(true))
  • UI updates to reflect consent
  • But gtag('consent', 'update') is never called
  • Google never receives the consent update

This is common when developers build custom consent banners in React but forget to integrate with Google's consent APIs.

5. GTM Consent Mode Not Configured

If you use Google Tag Manager, consent state updates must be configured in GTM, not just in your page code. GTM has its own consent mode settings that must be enabled and configured.

Common mistakes:

  • Consent Mode v2 enabled in page code but not in GTM
  • GTM consent settings using v1 instead of v2
  • Consent update triggers not configured in GTM
  • GTM tags not set to respect consent signals

What It Breaks

Google Ads Conversion Tracking

When consent state never updates:

  • Even if users accept consent, Google never receives the update
  • Conversions fire but are suppressed because consent state remains "denied"
  • Google Ads uses modeled conversions instead of actual data
  • Campaign optimization suffers because Google doesn't trust the conversion data
  • You see conversions in your dashboard but they're not used for bidding

This problem rarely exists in isolation. It usually appears alongside other consent or timing issues covered in the broader guide on Google Ads conversion failures.

User Privacy Expectations

When users click "Reject" but tracking continues:

  • Users believe they've opted out, but they haven't
  • This violates GDPR, CCPA, and other privacy regulations
  • Legal risk increases because consent mechanism doesn't actually work
  • User trust erodes when they discover tracking continues after rejection

GA4 Reporting

GA4 relies on consent state to determine how to process events:

  • Events may be marked as "modeled" instead of actual
  • Conversion reporting becomes unreliable
  • Audience building fails because consent state is unknown
  • Attribution models break because consent timing isn't tracked

How to Detect It

You can check if consent state updates using browser developer tools:

  1. Open your website in a private/incognito window
  2. Open browser DevTools (F12) and go to the Console tab
  3. Type: window.dataLayer and press Enter
  4. Look for consent-related entries in the dataLayer
  5. Click "Accept" on your consent banner
  6. Check dataLayer again: you should see a consent update entry
  7. If no consent update appears, consent state is not updating

Alternatively, check the Network tab:

  1. Filter by "collect" or "google-analytics"
  2. Click "Reject" on consent banner
  3. Check if tracking requests stop (they should)
  4. Click "Accept" on consent banner
  5. Check if tracking requests resume (they should)
  6. If requests don't change based on consent choice, state is not updating

This is exactly what the diagnostic report highlights, with concrete fixes. View sample report →

Quick Test:

Use our free scanner to automatically detect if consent state updates when users accept or reject. It simulates both actions and checks if Google receives consent updates.

Want ongoing alerts when consent or tracking breaks? Monitoring runs weekly scans and emails you only when we detect a change.

The Fix: Properly Update Consent State

The solution is to ensure your consent banner actually calls Google's consent update functions. Here's how:

Option 1: Manual Consent Mode Updates

If you have a custom consent banner, you must call gtag('consent', 'update') when users make a choice:

// When user clicks Accept
function handleAcceptConsent() {
  // Update UI
  document.getElementById('consent-banner').style.display = 'none';
  localStorage.setItem('consent', 'granted');
  
  // CRITICAL: Update Google Consent Mode
  gtag('consent', 'update', {
    'ad_storage': 'granted',
    'analytics_storage': 'granted'
  });
  
  // Now tracking can proceed
}

// When user clicks Reject
function handleRejectConsent() {
  // Update UI
  document.getElementById('consent-banner').style.display = 'none';
  localStorage.setItem('consent', 'denied');
  
  // CRITICAL: Update Google Consent Mode
  gtag('consent', 'update', {
    'ad_storage': 'denied',
    'analytics_storage': 'denied'
  });
  
  // Tracking should stop
}

The key is that both UI updates AND consent state updates must happen. Many implementations only do the UI part.

Option 2: Use a CMP with Consent Mode Integration

If using a consent management platform, ensure it's configured to update Consent Mode v2:

  • Enable Consent Mode v2 in CMP settings
  • Verify CMP documentation mentions Consent Mode v2 support
  • Test that consent updates appear in dataLayer after accept/reject
  • Check that CMP is calling gtag('consent', 'update') internally

Option 3: GTM Consent Mode Configuration

If using Google Tag Manager:

  1. Enable Consent Mode v2 in GTM container settings
  2. Configure consent types (ad_storage, analytics_storage)
  3. Set up consent update triggers
  4. Ensure tags respect consent signals
  5. Test that consent updates fire when banner buttons are clicked

Why This Connects Other Issues

Consent state not updating is the underlying issue behind many other problems:

Fix consent state updates, and many related issues resolve automatically.

The State Machine Problem

Consent management is fundamentally a state machine:

  1. Initial state: Consent default (denied)
  2. User action: Click accept or reject
  3. State transition: Update consent state in Google's systems
  4. Behavior change: Tracking behavior changes based on new state

When consent state doesn't update, the state machine is broken. User actions don't trigger state transitions, so behavior never changes. The UI suggests everything works, but the underlying state machine is stuck.

This is why tracking before consent and consent state not updating are the two root causes: one breaks the initial state, the other breaks state transitions.

Verify Your Fix

After implementing a fix, verify it works:

  1. Clear browser cookies and cache
  2. Visit your site in a private/incognito window
  3. Open browser console and check dataLayer
  4. Click "Reject": dataLayer should show consent update with denied values
  5. Check Network tab: tracking requests should stop
  6. Click "Accept": dataLayer should show consent update with granted values
  7. Check Network tab: tracking requests should resume

Not Sure If Your Site Has This Problem?

Run a free scan to automatically detect if consent state updates when users accept or reject. Get a detailed report showing exactly what happens when consent buttons are clicked.

Scan Your Site Free →

Part of the Google Ads conversion tracking series:

← Back to: Why Google Ads Conversions Break