DEV Community

Vhub Systems
Vhub Systems

Posted on

Your Cookie Banner Is Probably Breaking GDPR — Here's the 20-Point Audit to Find Out

You installed a cookie banner plugin, clicked through the setup, and moved on. That was six months ago. You just received an email from a user asking why your site set cookies before they clicked "Accept." You do not know the answer.

That is the moment most founders discover that having a cookie banner and having a compliant cookie banner are two different things. The GDPR does not require the presence of a banner. It requires the quality of a specific consent mechanism — one that meets precise legal requirements the vast majority of pre-built plugins do not enforce by default.

This article gives you the 20-point audit to find out where your implementation stands, before a Data Protection Authority does it for you.

1. Why "I Have a Cookie Banner" Is Not the Same as "I'm GDPR Compliant"

The core legal requirement is in GDPR Article 4(11): consent must be "freely given, specific, informed, and unambiguous." Recital 32 adds the operative detail — "silence, pre-ticked boxes or inactivity should not therefore constitute consent."

Three consent requirements that most plugins ignore by default:

Pre-consent script blocking. Cookies and tracking scripts must not fire until after the user has actively consented. This is not a setting that comes enabled out of the box on most free-tier consent management platforms. You have to explicitly configure it.

Equal-friction reject option. GDPR Article 7 requires that withdrawal of consent be as easy as giving it. Regulators have interpreted this to mean the "Reject" or "Decline" button must be as easy to find and click as the "Accept" button — not buried behind a "Manage Preferences" link.

Consent logging. Under GDPR Article 7(1), the data controller bears the burden of demonstrating that consent was obtained. That means storing a record of each consent decision with a timestamp, the banner version shown, the scope of purposes consented to, and a user identifier. The DPA does not ask whether you have a banner — they ask whether you can produce the consent record for a specific user on a specific date.

Marketing agencies and compliance teams managing dozens of client sites use automated crawlers (like Apify actors) to detect pre-consent script loads across an entire portfolio in minutes. If you are managing a single site, you are doing the manual version of that audit — which is exactly what this checklist is built for.

2. The 5 Dark Patterns That Invalidate Your Consent (Without You Knowing)

The following five patterns appear in enforcement decisions from multiple European DPAs. Each one invalidates the consent mechanism entirely — not just weakens it.

1. Pre-ticked checkboxes. Any checkbox that is checked by default when the banner loads constitutes non-consent under GDPR. Consent must be an active, affirmative action. The user must opt in — not opt out of something already selected. This is explicitly prohibited in Recital 32.

2. Reject button buried behind "Manage Preferences." If a user has to click through to a secondary screen to find a "Reject All" option, while "Accept All" is available in one click on the primary banner, the reject path requires more effort — which regulators have found to be a dark pattern violating the equal-friction requirement. France's CNIL and Germany's DPAs have issued enforcement decisions on this pattern specifically.

3. Banner disappears on page scroll. Several implementations dismiss the banner when a user scrolls down the page, treating the scroll action as implicit consent. GDPR Recital 32 explicitly states that "browsing a website" does not constitute consent. Scroll-to-dismiss is non-compliant.

4. Accept highlighted, Reject greyed out. Using color, size, font weight, or visual contrast to make "Accept" more prominent than "Reject" is a documented dark pattern. The buttons must have equivalent visual weight. A large green "Accept" button next to a small grey text link that says "decline" does not satisfy the equal-friction requirement.

5. "By using this site you agree" banners. These are purely informational notices, not consent mechanisms. Displaying a banner that says "We use cookies — by continuing to browse you agree" does not collect consent under GDPR. It collects nothing. Any data processing downstream from this banner is processed without a valid legal basis.

3. The Third-Party Scripts You Need to Audit First (GA, Meta Pixel, LinkedIn)

Three scripts appear on the majority of founder-operated sites and represent the highest-risk pre-consent violations:

Google Analytics (analytics.js / gtag.js). Google Analytics places cookies and processes IP address data. Under GDPR, this requires a valid consent legal basis for EU/UK visitors unless you have a documented legitimate interest assessment. Many founders assume that enabling Google Consent Mode v2 resolves this. It does not.

Google Consent Mode v2 is not a GDPR compliance framework. It is a measurement adjustment tool that tells Google how to model conversions when consent is not granted. It does not block the GA script from loading. It does not prevent cookies from being set in all configurations. Whether your implementation is compliant depends on how your CMP is configured to gate the script — not on whether Consent Mode is enabled.

Meta Pixel (fbq). Meta Pixel fires page view events and sets cookies on page load. In the default implementation, this occurs before any consent is collected. The script must be gated by your consent management platform so it does not load until the user has explicitly consented to marketing purposes.

LinkedIn Insight Tag (li_fat). Same requirement as Meta Pixel. LinkedIn's tag sets cookies used for conversion tracking and retargeting. It must not load before consent.

How to verify in five minutes:

  1. Open an incognito window (so no prior consent state is stored)
  2. Navigate to your site and do not interact with the banner
  3. Open Chrome DevTools → Network tab → filter by "analytics", "fbq", "li_fat", "gtag"
  4. Check whether any requests to these services appear before you click Accept

Any request to an analytics or advertising service before consent is clicked = a violation.

4. Consent Logging — The Requirement Most Banners Quietly Skip

GDPR Article 7(1) places the burden of proof on the data controller: "the controller shall be able to demonstrate that the data subject has consented to processing of his or her personal data."

Demonstrating consent requires a record. That record must include:

  • The timestamp of the consent decision
  • The version of the consent banner shown at the time
  • The purposes the user consented to (granular, not just "accepted all")
  • A user identifier linking the record to the specific individual

The free-tier problem. Most consent management platforms — including Cookiebot, CookieYes, and similar tools — do not store individual consent logs on free plans. They may show aggregate statistics ("X% of visitors accepted all"), but they cannot produce a record for a specific user on a specific date. If a DPA or individual user submits a Subject Access Request referencing your consent decision, you cannot respond with the required documentation.

How to check your implementation:

  1. Log into your CMP dashboard
  2. Look for a "Consent Log," "Audit Log," or "Proof of Consent" section
  3. If this feature is locked behind a paid tier — or does not exist — your current implementation cannot demonstrate consent under GDPR Article 7(1)

This is one of the most commonly overlooked requirements because the site appears to function normally. The gap only becomes visible when documentation is requested.

5. How to Run the 20-Point Audit on Your Site (Before a DPA Does It For You)

The full audit runs in four sections. Each section can be completed in a single browser session using an incognito window, Chrome DevTools, and your CMP dashboard.

Section 1: Pre-consent behavior (5 checks)

  • Load your site in incognito without interacting with the banner. Check the Network tab for any cookie-setting requests to analytics, advertising, or third-party services before consent is clicked.
  • Check your browser's Application tab → Cookies to confirm that no non-essential cookies are set before consent.
  • Verify that no tracking pixels fire before the consent interaction.
  • Confirm no checkboxes are pre-ticked in your banner's purpose selection UI.
  • Verify that scrolling, clicking elsewhere on the page, or navigating to a second page does not dismiss the banner or record consent.

Section 2: Banner UI (5 checks)

  • Compare the visual weight of your Accept and Reject buttons. Are they equivalent in size, color, and prominence?
  • Confirm that a "Reject All" option is available on the primary banner layer — not only behind a "Manage Preferences" secondary screen.
  • Check that each data processing purpose is listed separately with an individual toggle, not bundled under "Accept All" with no granularity.
  • Verify that no pre-ticked boxes appear in any purpose category.
  • Confirm the banner does not include "by continuing to browse you agree" language as a substitute for an actual consent interaction.

Section 3: Consent logging (3 checks)

  • Open your CMP dashboard and locate individual consent records. Verify you can filter by user identifier and retrieve a record for a specific date.
  • Confirm the stored record includes: timestamp, banner version, purpose scope, and user identifier.
  • Check that this log feature is available on your current plan (not locked behind a paid tier).

Section 4: Post-consent validation (3 checks)

  • After clicking Accept, verify that the consented scripts load correctly in the Network tab.
  • Test consent withdrawal: withdraw consent via your banner's preferences UI and verify that scripts cease to load on subsequent page views.
  • Confirm you have a documented process for responding to a Subject Access Request referencing consent data.

Fix order when you find a violation: Scripts first (pre-consent blocking), then UI (equal-friction reject, dark pattern removal), then logging (upgrade CMP plan or switch platforms if consent logging is not available at your tier).

6. What Happens If You Fail the Audit (And How DPA Fines Actually Work for Small Companies)

GDPR fines are structured in two tiers under Article 83. The upper tier (€20M or 4% of global annual turnover) applies to violations of core principles including consent requirements. Fines are meant to be "effective, proportionate, and dissuasive" — and DPAs are required to consider the size of the company and the severity of the violation when calculating the amount.

In practice, small companies and individual founders have received fines from DPAs across the EU for cookie consent violations. The amounts are lower than the headline figures, but the more material costs for a small company are:

Legal response costs. Even if a DPA investigation concludes without a fine — which is common for first-time minor violations — the cost of engaging a privacy attorney to draft your response starts at $500 and can exceed $2,000 for a substantive investigation. A formal DPA notice always requires a written response; you cannot ignore it.

Investment due diligence risk. If you are fundraising at any stage, a VC or acquirer's legal team will review your privacy and data practices. A non-compliant consent implementation found in due diligence is a flagged risk item. In competitive raise environments, a compliance flag delays the process and can require a legal remediation plan before close.

Reputational risk. DPA enforcement decisions in several EU member states are published. A published decision referencing your company by name creates a permanent public record, regardless of the fine amount.

The cost of running the 20-point audit today is zero. The cost of not running it is open-ended.

7. Get the Full 20-Point Audit Checklist (PDF)

Everything in this article condenses into a single 20-point PDF you can work through in under an hour — organized by audit section so you can move through each area systematically without needing to track anything in a separate document.

The checklist covers: pre-consent behavior (5 checks), banner UI dark patterns (5 checks), consent logging (3 checks), third-party script audit (4 checks — Google Analytics, Meta Pixel, LinkedIn Insight Tag), and post-consent validation (3 checks).

No GDPR background required. Each check is written as a binary yes/no you can complete in your browser and CMP dashboard.

[Get the GDPR Cookie Consent Audit Checklist → $39][GUMROAD_URL]

Less than 10 minutes of your privacy lawyer's billing rate — and you do not need to schedule a call.

If you have just received a user complaint or are about to enter investment due diligence, this is the fastest way to document where you stand before your next conversation with legal.

Top comments (0)