[ BLOG ]

Setting up Google Consent Mode v2 in WordPress (without plugin bloat)

by | October 4, 2026 | Consent & DSGVO, English

Since March 2024, Google has required Consent Mode v2 for websites with visitors in the European Economic Area — otherwise features like remarketing and conversion tracking stop working. At the same time, practice shows: many WordPress sites bring in a full consent management platform for this, even though the mechanism itself is surprisingly lean. This guide explains what Consent Mode v2 technically does and how to set it up in WordPress — without plugin bloat.

Note: this article describes the technical setup and is not legal advice. If in doubt, check with a specialist which services on your website require consent.

What Consent Mode v2 does

Consent Mode is a signalling channel between your cookie banner and the Google tags on the page. Instead of blocking Google scripts entirely, you load them with a default state of "everything denied". The tags then run in a restricted mode: they only send anonymous, cookieless pings until the visitor consents — then they switch to normal measurement.

Version 2 introduced two additional signals compared to v1. In total, your banner communicates these states:

  • ad_storage — cookies/measurement for advertising purposes
  • ad_user_data — passing user data to Google for advertising purposes (new in v2)
  • ad_personalization — personalized advertising / remarketing (new in v2)
  • analytics_storage — analytics cookies (GA4)
  • functionality_storage — functional storage (e.g. language settings)
  • security_storage — security-related storage

The difference between Basic and Advanced Consent Mode matters: with Basic, Google tags are blocked entirely before consent (no ping, no load). With Advanced, the tags load immediately in the "denied" state and send modeled, anonymous pings. Which one you choose is also a legal assessment — Advanced means Google servers are contacted before consent is given.

The three options in WordPress

1. Consent management platform (CMP) with Consent Mode support

Plugins like Cookiebot, Complianz or Borlabs Cookie ship with Consent Mode built in. The convenience is real — but you get a complete consent framework with admin interfaces, external rule sets and often a SaaS connection. For a single WordPress site with a manageable set of services, that is frequently oversized: you install a framework to produce two lines of JavaScript.

2. Manual integration

The core is two steps: set the default before the Google tag, and update the state when the visitor decides. The default goes into the <head>, strictly before the actual gtag/GTM snippet:

<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('consent', 'default', {
  ad_storage: 'denied',
  ad_user_data: 'denied',
  ad_personalization: 'denied',
  analytics_storage: 'denied',
  functionality_storage: 'granted',
  security_storage: 'granted',
  wait_for_update: 500
});
</script>

After consent, your banner (or your code) fires the update:

gtag('consent', 'update', {
  ad_storage: 'granted',
  ad_user_data: 'granted',
  ad_personalization: 'granted',
  analytics_storage: 'granted'
});

That is the entire mechanism. The rest — banner UI, blockers for YouTube & co., consent records, a way to revoke — is legwork, not magic.

3. A lean consent plugin

The third option sits in between: a plugin that encapsulates exactly this mechanism, without an external platform. Disclosure: Skit Consent is our own plugin — it renders the default server-side into the <head>, performs updates per category and blocks embedded services until consent is given. If you prefer building it yourself, option 2 has everything you need.

Integration via Google Tag Manager vs. gtag.js

If you use GTM, the principle stays the same: the default snippet still belongs directly in the <head> before the GTM container — not as a tag inside the container itself, because that would fire too late. In the GTM console, enable "Consent Overview" under Admin → Container Settings → Additional Settings. GA4 tags respect the consent signals automatically; for your own tags, check each tag's Consent Settings to see whether "Built-in Consent Checks" or additional checks are required.

If you use gtag.js directly (without GTM), set the default and update as shown above — the integration needs nothing more.

Verifying that it works

  • Tag Assistant: open tagassistant.google.com with your URL — under "Consent" you see the default and update states per signal.
  • DevTools: print dataLayer in the console — the consent events with default and later update must appear.
  • Network tab: before consent, GA4 requests must not carry a gcs flag with granted values; after "Accept" the parameters change.
  • Private window: always test incognito — otherwise your stored consent kicks in and you see nothing.

The most common mistakes

  • Default too late: the consent snippet sits after the GTM/GA tag — the signals are ignored.
  • Duplicate default calls: a plugin sets one default, your own snippet sets a second — the last one wins, not always the right one.
  • Update without category logic: "Reject all" still fires update: granted because the event is wired incorrectly.
  • Missing revoke option: technically trivial (another consent call with denied), but legally required — a small consent button or footer link is enough.

Conclusion

Consent Mode v2 is no rocket science: default before the tag, update after the decision, verify cleanly. The real work is in the rest — banner, blockers, records, revocation. That is exactly what we build Skit Consent for: the mechanism above is fully implemented in it, with no external services and no subscription.

Waitlist: sign up if you want to be there at launch — early access info and the launch price arrive by email.

Newsletter

Updates zu neuen Releases, Features und Divi-5-Tipps — kein Spam.

Wofür interessierst du dich? (optional)

[ KEEP READING ]

More from the workshop.

[ October 4, 2026 ]

Cookie banners have a dubious reputation: they cover the page, annoy visitors — and they cost loading time. How much depends less on the banner itself than on how the consent solution is built. This article breaks down where the costs actually arise, how to measure them on your own website, and what to look […]

[ October 4, 2026 ]

Anyone who wants to sell plugins, themes or design assets directly from their own WordPress site almost automatically ends up at WooCommerce. That is a strong platform for shipping goods — but seriously oversized for a portfolio of digital products: shipping zones, stock management, product types for physical goods, and an admin area half of […]