The short version
- Offer a reject option on the same layer as accept. A vast majority of the regulators in the EDPB taskforce treat a banner without one as an infringement.
- Nothing may be pre-ticked. Pre-ticked boxes do not give valid consent.
- Make refusing as visible as accepting: no reject link buried in a paragraph, no washed-out reject button beside a bold accept.
- A banner that records a choice but does not hold scripts back changes nothing. Scripts that need consent must not run until it is given.
- Withdrawing consent must be as easy as giving it — a small settings button or a link in a standard place, on every page.
- Google's Consent Mode passes the answer to Google's tags. It is not a banner and does not replace one.
This is not legal advice. Whether you need a banner at all, and exactly what it must say, depends on where you and your visitors are and on what your site loads. What follows is the practical picture: what a banner has to offer the visitor, what it has to do with their answer, and the mistakes regulators have catalogued.
The most useful single source is the report of the European Data Protection Board's cookie banner taskforce, published on 18 January 2023 after national regulators coordinated their handling of complaints about banners. It records where most authorities agreed. It is a common position rather than a binding rulebook, and national guidance still applies on top of it.
Whether you need a banner is a separate question — what counts as storage on a visitor's device, and what is exempt, is covered in the guide on widgets, cookies and consent. This one assumes you need one.
A reject option, as easy to use as accept
The first practice the taskforce examined was a banner that offers Accept with no way to refuse on the same layer, so refusing means opening the settings and switching things off. A vast majority of the authorities considered the absence of a reject option, on a layer that has an accept button, to fall short of valid consent and so to be an infringement. A few disagreed, because the ePrivacy Directive does not mention a reject option in so many words.
How the reject option is drawn matters too. The taskforce agreed that a refuse link embedded in a paragraph of text, without enough visual support to draw an average visitor's attention, does not lead to valid consent. On colours and contrast it declined to set one universal standard, but agreed that banners must be checked for colours and contrast that obviously push the visitor toward accepting.
Nothing pre-ticked, and "essential" means essential
Category switches that arrive already on are pre-ticked boxes, and the taskforce confirmed that pre-ticked boxes do not lead to valid consent — the GDPR's recital 32 names them alongside silence and inactivity as things that should not count as consent. Optional categories start off, and the visitor turns them on.
The strictly-necessary category is the other common shortcut. Labelling analytics or advertising cookies "essential" moves them outside the consent question altogether, and the taskforce found controllers doing exactly that. Its members noted that whether a cookie is essential has to be assessed rather than looked up, and that a website owner should be able to show the authorities why each cookie it calls essential qualifies.
The banner has to stop scripts, not just ask
A browser runs every ordinary script tag the moment the page loads. A banner that displays its question while the analytics tag beside it has already fired is recording an answer about something that already happened. The whole point of asking first is that nothing which needs consent runs before it is given.
There are two common ways to hold a script back. A tag manager can fire tags only once consent arrives. Or the script tag itself is written so the browser will not run it — given a type the browser does not execute, such as text/plain, with a marker naming its consent category — and the banner swaps in a runnable copy once that category is allowed. Iframes, such as video players, can be held back the same way by leaving their source empty until consent.
Whichever you use, test it: open the page in a private window, refuse everything, and look at the Network and Storage panels of the developer tools. Anything that loaded anyway is not gated.
Changing your mind must be as easy as saying yes
Consent has to be withdrawable at any time, and the taskforce recorded that withdrawing must be as easy as giving it. Its suggestion was concrete: a small, permanently visible icon on every page, or a link in a visible and standard place, that takes the visitor back to their settings.
Withdrawal has a technical catch. A script that has already run cannot be un-run, so the honest way to make a withdrawal take effect is to reload the page once the visitor saves it, so the newly refused scripts never start.
Where Google's Consent Mode fits
Consent Mode is how a page tells Google's own tags what the visitor decided. It defines consent types — ad_storage and analytics_storage for storage, and ad_user_data and ad_personalization, added in version 2, for sending user data to Google for advertising and for personalised ads. The page sends a default state when it loads, usually everything denied, and an update when the visitor chooses.
Google describes two ways to run it. In basic mode, Google tags do not load until the visitor interacts with the banner. In advanced mode they load straight away with the default state and adjust when the choice arrives, which gives Google more to model from.
Consent Mode is not a banner. Google says you remain responsible for obtaining consent, with a consent banner, a custom solution or a consent management platform, and for passing the result on. For visitors in the EEA, Google's Tag Manager help says you must collect consent for the use of personal data, and share consent signals with Google, to keep its measurement, personalisation and remarketing features.
Records, and what a banner cannot do for you
Some obligations sit outside the banner. Google's EU user consent policy, which applies to sites using Google products with visitors in the EEA, the UK and Switzerland, says you must keep records of the consent end users give, give them clear instructions for revoking it, and identify each party that may collect, receive or use their personal data.
A banner that keeps the choice only in the visitor's own browser, with no log on a server, keeps no such record. That is a deliberate privacy choice in some banners — Zyff's is one — but if a policy or law you are bound by requires records of consent, you need them from somewhere else.
And none of this makes a site compliant by itself. Compliance also depends on what your privacy notice says, what else your pages load, and where you and your visitors are. A banner is the mechanism for asking and for honouring the answer; check the rest with someone who knows your jurisdiction.
How Zyff's banner handles each point
Zyff builds a cookie consent banner, so here is how it maps onto the points above — including the one it deliberately does not do.
- Accept all and Reject all sit side by side, drawn from one button style that cannot be set apart, so refusing is never the smaller option.
- The optional categories — preferences, analytics, marketing — start switched off; strictly necessary is always on.
- Tagged scripts stay inert until their category is allowed, through type="text/plain" with a data-zyff-consent category, and iframes through data-src.
- A small cookie settings button stays on the page after the choice, any link with data-zyff-consent-open reopens the preferences, and withdrawing a category reloads the page.
- It sends Consent Mode v2 default and update commands. It is not a Google-certified CMP, so it does not suit the cases where Google requires one: AdSense, Ad Manager and AdMob in the EEA and UK.
- The choice is kept for 1 to 365 days, as you set, in one first-party cookie on your own domain, and Zyff keeps no log of it — which is the records point above.
Try it on Cookie Consent Banner
Free to build and preview in a live editor. The embed code needs a free sign-in.
How to set up a cookie banner that actually blocks scripts
List what your pages load
Open each kind of page in a private window and note every third-party script, iframe and storage key in the Network and Storage panels of the developer tools.
Sort them into categories
Strictly necessary, preferences, analytics and marketing. Be strict about necessary: if it serves you rather than what the visitor asked for, it is not.
Hold back everything that needs consent
Gate each such script through your tag manager, or give it a type the browser will not run and a category marker, and leave iframe sources empty until consent.
Add the banner
Accept and reject on the first layer with equal weight, every optional category switched off, and a link to your cookie policy.
Test with everything refused
Reload in a private window, refuse all, and confirm that nothing in the gated categories loaded or stored anything.
Give visitors a way back
Keep a settings button or a footer link that reopens the preferences on every page, and update your privacy policy to name what is loaded.
At a glance
| Reject option | On the same layer as accept (a vast majority of EDPB taskforce authorities) |
|---|---|
| Pre-ticked categories | Not valid consent |
| Withdrawal | At any time, and as easy as giving consent |
| Consent Mode v2 types | ad_storage, analytics_storage, ad_user_data, ad_personalization |
| Records of consent | Required by Google's EU user consent policy |
| Zyff's banner | Equal-weight buttons, script gating, settings button, Consent Mode v2; no consent log; not a Google-certified CMP |
Frequently asked questions
Does a cookie banner need a reject all button?
In the EU, a vast majority of the national regulators in the EDPB's cookie banner taskforce consider a banner with an accept button but no reject option on the same layer to be an infringement. A few disagreed, and national guidance varies, but offering reject beside accept, with the same prominence, is the safe and honest default.
Can cookie categories be switched on by default?
No. Pre-ticked boxes do not give valid consent; the GDPR's recital 32 names them alongside silence and inactivity. Optional categories should start off and be turned on by the visitor.
Does a cookie banner block cookies automatically?
Only if it is wired to the scripts. A browser runs ordinary script tags immediately, so each script that needs consent has to be held back — by a tag manager, or by a script type the browser will not execute — until the banner says yes. A banner that only records the answer blocks nothing.
Is Google Consent Mode a cookie banner?
No. It is how your page passes the visitor's answer to Google's own tags. Google says you still need to obtain consent, with a consent banner, a custom solution or a consent management platform, and send the result to Google.
Do I need to keep a record of cookie consent?
If you use Google products with visitors in the EEA, the UK or Switzerland, Google's EU user consent policy says you must keep records of the consent end users give. Whether other law requires one depends on your jurisdiction. A banner that stores the choice only in the visitor's browser keeps no record.
Will a cookie banner make my site GDPR compliant?
No banner can on its own. A banner handles asking and honouring the answer; compliance also depends on what your site loads, what your privacy notice says, and where you and your visitors are. Treat it as one part, and check the rest with someone who knows your jurisdiction.