Cookie Consent Basics for AdSense

EU / UK / California users need consent UI. Bare minimum for compliance.

You run a content site with AdSense. A visitor from Germany loads your page, AdSense doesn’t show ads, and the dashboard later complains about “consent management.” Or you’re in the US, never thought about cookies, and AdSense quietly restricts personalized advertising for ~30% of your traffic. Since March 2024, Google has required a certified CMP (Consent Management Platform) for any AdSense publisher serving users in the EEA, UK, or Switzerland. California adds CCPA/CPRA on top. This article covers the bare minimum to stay compliant without losing revenue.

Common causes

You’re reading this for one of these reasons:

In the EEA / UK / Switzerland, you legally cannot set advertising cookies until the user has actively consented (not pre-checked boxes, not implied by scrolling). AdSense personalized ads use cookies; therefore, personalized ads require consent first.

How to spot it: VPN to Germany → open your site → if no consent UI appears, you’re non-compliant.

2. California CCPA/CPRA “opt-out of sale/share”

California requires a “Do Not Sell or Share My Personal Information” link in the footer. AdSense’s personalized advertising is considered a “share” under CPRA, so this link must be there for CA visitors.

How to spot it: VPN to California → check the footer. If no DNSMPI link, you’re non-compliant.

It’s not enough to have a consent banner; AdSense reads consent via the IAB TCF v2.2 standard. If your consent banner doesn’t pass the TC string through, AdSense treats every visit as “no consent” and stops personalizing.

How to spot it: In AdSense → Reports → Personalization, if “Non-personalized” is > 50% of impressions and you have substantial EU traffic, your CMP isn’t signaling correctly.

4. Your CMP is “free” but not IAB-certified

Some popular cookie banner plugins look like CMPs but don’t implement TCF v2.2. They show a banner, the user clicks “accept,” and nothing is actually passed to AdSense.

How to spot it: Open page, accept consent, then in DevTools console run __tcfapi('getTCData', 2, console.log). If undefined, your “CMP” isn’t IAB-certified.

5. CMP loads too late or async

If the CMP loads after AdSense’s script has already fired, AdSense gets a default “no consent” state. Personalization fails even though the user later accepts.

How to spot it: Performance tab → check load order. CMP script should fire before adsbygoogle.js.

Shortest path to fix

Step 1: Pick a certified CMP

Easiest: enable Google’s Funding Choices / Privacy & messaging inside AdSense. Free, certified, integrated.

Alternatives if you need more customization:

For most indie sites, Funding Choices is the right answer.

Step 2: Configure regions

In AdSense → Privacy & messaging:

  1. Create a GDPR message → choose “European Economic Area, UK, Switzerland.”
  2. Create a CCPA / state regulations message → choose “California (and other US states).”
  3. Set what happens when user rejects: serve “non-personalized ads” (fills less but still earns).

Step 3: Install the CMP code on every page

Funding Choices generates a <script> snippet. Place it in the <head> of your root layout, before the AdSense script:

<head>
  <script async src="https://fundingchoicesmessages.google.com/i/pub-XXXXXXXXX?ers=1"></script>
  <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXXX"></script>
</head>

So users who don’t consent still see ads (just non-personalized):

<script>
  (window.adsbygoogle = window.adsbygoogle || []).pauseAdRequests = 1;
  window.googletag = window.googletag || {cmd: []};
</script>

Funding Choices automatically signals consent state to AdSense; you usually don’t need extra code.

In your footer template:

<a href="/do-not-sell">Do Not Sell or Share My Personal Information</a>

Or, if Funding Choices generates a CCPA message, use its provided UI link.

Step 6: Update /privacy to reference your CMP

Add to your privacy policy: “We use Google Funding Choices (or [your CMP]) to manage user consent for advertising cookies. You can change your consent preferences at any time by clicking [link].”

Step 7: Verify with VPN

VPN to Germany → consent banner appears → click accept → personalized ads serve. VPN to California → DNSMPI link visible in footer. VPN to US (non-CA) → no banner needed but ads serve normally.

Prevention

  • Default to Funding Choices for new sites — free, certified, AdSense-integrated.
  • Always serve non-personalized ads to non-consenters; never fully block ads, you lose revenue.
  • Test from at least 3 regions (EU, CA, rest of US) after any consent-related change.
  • Review CMP config every 6 months — IAB TCF gets minor updates and your config can drift out of compliance.
  • Make the consent state visible to the user (link in footer to reopen the banner).

Tags: #AdSense #Monetization #Debug #Troubleshooting