Three lists that do not match
With data protection questions on websites there are almost always three descriptions of the same reality. The first is the cookie banner, which names individual services and categories. The second is the privacy policy, which explains the same services in running text. The third is the actual behaviour of the site in the browser. Each of these lists was maintained at a different time by different people, and accordingly they rarely agree.
Services that are not recognisable as services are especially tricky. A theme loads fonts from a third-party server because the developer set it up that way during the build. An embed code for a video sets cookies before anyone clicks play. A form plugin includes a captcha that sends data to a third party. The operators decided none of this consciously, and yet they are responsible for it.
The time factor is added to this. Every plugin update, every new page with an embed, every additional marketing component can change the picture. A state that is correct today may be outdated in six months. The challenge is therefore not only a one-off review, but creating a state that can be kept up to date with manageable effort.
- The banner, the privacy policy and the actual network behavior describe different services.
- Services get loaded through themes, plugins and embedded code snippets without anyone noticing them as a service.
- No named person reconciles the three lists after changes to the website.
Figure · Three descriptions of the same website
- The banner lists three categories; the network tab shows further counterparties.
- The privacy policy dates from the last relaunch.
- Fonts, map and video load from third-party servers on the very first visit.
- Nobody knows who approves new embeds.
Sort things out before designing: rough orientation, not a legal opinion
The most important distinction when sorting services is this: what is technically necessary to run the site, and what serves other purposes such as audience measurement, advertising or convenience? For the first group, consent is generally not requested; for the second, the opposite often applies. This rough line is widely known. Where exactly it runs in an individual case, however, is a legal assessment that we do not replace.
A thought experiment helps in practice: would the site still work for a visitor if this service were missing? A language switcher, a shopping cart, a session for a login belong to operating the site. Visitor statistics, an ad pixel, a video from a platform or a map from a third-party provider more likely do not. Beyond that, there is the question of whether a service transmits data to third parties and whether those third parties use the data for their own purposes.
Besides consent, legitimate interest exists as another legal basis. For audience measurement, it remains disputed when it holds up. We therefore stick to a pragmatic rule: the less a service processes personal data and the fewer third parties are involved, the more likely it can be operated without a prompt. Anyone who wants to be sure has the classification of the delicate services confirmed in writing by a qualified body.
The consequence of this classification is less legal than a matter of design. Every service that can be technically replaced or removed no longer has to be prompted, explained and documented. The simplest measure for a GDPR-compliant website is therefore often not a better banner, but dropping a component that nobody misses.
Figure · Where the effort per service typically concentrates
- Advertising and remarketing pixelsrelative priority
- Videos embedded from platformsrelative priority
- Visitor statisticsrelative priority
- Maps and chat widgetsrelative priority
- Fonts from third-party serversrelative priority
First remove, then host locally, then ask for consent
The order of measures that follows from this sorting is one we think of in three stages. First we check whether a service is needed at all. Then whether it can be run locally or in a data-minimizing way. Only for the services that remain and cannot easily be replaced do we design the consent. This order prevents an elaborate banner from managing things that are better left unloaded.
The alternative would be the more convenient route: installing a consent management tool that covers as much as possible and otherwise leaving the site as it is. That works technically but has drawbacks. The banner becomes complex, using it is tedious for visitors, and every additional script increases maintenance and risk. A tool documents decisions; it does not make them for you.
A third route would be to do without anything external: no statistics, no map, no video. For some businesses that is coherent, for example a trades business with a clear overview of its services and a contact form. For others it means lacking insight into their own site, and a location map has real practical value. Our recommendation is therefore not a doctrine but a trade-off per service.
An example of this trade-off: customers actually use a location map, whereas a social media feed in the footer is hardly used. The map then stays as a two-click solution, and the feed is replaced by a simple link. The result is a site that loads less, has less to explain and loses hardly any function for visitors. It is precisely this comparison of benefit and explanatory effort that provides the basis for the decision.
Every service you leave out or host locally is one less service you have to explain, ask consent for and document.
Figure · Decision path for each embedded service
Needed?
Name the benefit for visitors or for the business
Replaceable?
Own solution or data-minimizing alternative
Local?
Deliver from your own server
Only after a click?
Two-click solution instead of preloading
Consent
Present it in the banner with a clear purpose
What the implementation looks like technically
It starts with the inventory, using tools anyone can follow: the browser’s network tab with an emptied cache and without consent, the cookie view in the storage area of the developer tools, and a look at the source code for embedded scripts, iframes and stylesheets. The result is a table with service, purpose, where it was found and provider. It becomes the source for everything that follows.
Fonts are the easiest win. Instead of loading them from a third-party server on every visit, the files sit in your own project and are delivered with the page. That saves a connection, can improve load time and removes a transmission to third parties. What matters here is checking whether the font’s license permits self-hosting, and cleanly removing the old embed, which would otherwise keep running unnoticed.
We usually solve maps and videos as a two-click solution. Instead of the embed code, a placeholder appears first with a note on what happens on loading. Only the visitor’s click loads the external content. For videos, privacy-friendly embedding variants come into question, and directions can often be shown just as well with an address, a link and your own static image, without any data flowing at all.
For statistics there are two ways: a service with consent, or a privacy-friendly, self-hosted solution that manages without personal identifiers. Whether the latter is permissible without a prompt in an individual case is something you clarify with a qualified body. Technically, in both cases: scripts are loaded only after consent, not loaded and then merely “disabled”. The banner controls delivery; it is not decoration on top of a page that has already sent its requests.
If you use Google services with consent, Consent Mode comes into play. It passes the consent status as signals, for example for storage for advertising and analytics purposes, to the Google scripts, which adjust their behavior accordingly. The correct order matters: default values of “denied” are set before the scripts load, and only the visitor’s choice changes them. Anyone who sets up this sequence wrongly creates a banner that only looks as if it controls something.
Figure · Where a privacy problem can sit in the technology
Documentation
Privacy policy, list of services, contracts with service providers
Consent
Banner, storage of the choice, control of the scripts
Embeds
Fonts, maps, videos, chat, statistics, forms
Platform
CMS, themes, plugins, server logs, hosting
Chat, forms and contracts: the edge cases
Besides the obvious components, there are special cases that, in our experience, get forgotten. A contact form processes names and messages, and the path of this data does not end at the submit button: does it land in a mailbox, in a CRM, in a ticketing system? Every stop is a recipient, and the privacy policy should describe the actual path, not the imagined one.
Chat widgets and AI assistants deserve special attention because visitors enter free text there and reveal more than in a form field. The questions here are where the data is processed, how long it is stored and whether the provider uses it for its own purposes. A notice about the processing before the first input is a sensible design measure but does not replace contractual clarification.
By this contractual side we mean data processing on behalf of a controller: if a service provider processes personal data on your behalf, a written contract is generally required. This concerns hosting providers, newsletter providers, chat services and some analytics tools. Part of the upkeep is to collect these contracts and assign them to the providers in the list of services, so that nothing has to be searched for when a request comes in.
Another edge case is services based or hosted outside the EU. The question of transfers to third countries is legally fluid and changes over time. We do not assess it; we flag such services in the list and recommend having them reviewed separately there. Here too: if a European or local alternative serves the same purpose, it is often the simpler path.
Figure · The path of an enquiry through the contact form
Form
Name, message, consent to being contacted
Web server
Encrypted transmission, logs with a retention period
Email or CRM
The business’s mailbox or customer management
Deletion
Fixed period after the enquiry has been handled
What you can realistically expect
A privacy overhaul delivers no certification and no free pass. Whether a website stands up in a dispute is decided by authorities and courts based on the individual case, and the legal situation and its interpretation remain in flux. An honest goal is therefore this: the site’s actual behavior is known, limited, documented and matches what visitors read in the banner and in the policy.
This state can be verified. In the network tab you can see that no non-essential requests go to third parties before consent. The number of third-party servers contacted on the first visit is smaller than before. The list of services, the privacy policy and the banner name the same services. In addition, a spot check with a fresh browser profile can be repeated after every major change.
Site performance can also benefit when third-party resources are dropped. Fewer external connections tend to mean shorter load times, measurable with Lighthouse or PageSpeed Insights. That is a side effect, not a promise, since the impact depends on what exactly was removed. On the other side there is a limitation: if you run statistics only with consent, you see only part of the visits and should read the numbers accordingly with caution.
You should not expect all risks to be eliminated. Even a carefully cleaned-up site can be criticized, for example because of a provider whose classification changes. The only reliable thing is the ability to react to such changes: whoever has the overview replaces a service in an afternoon instead of starting a weeks-long search.
Figure · A possible process over several weeks
- 1
Week 1
Inventory in the browser and in the source code, set up the list of services.
- 2
Week 2
Classification per service, decision: remove, host locally, ask for consent.
- 3
Week 3
Local fonts, two-click embeds, rebuild the banner.
- 4
Week 4
Reconcile the privacy policy, assign contracts, test with a fresh profile.
- 5
Afterwards
Check after every major change, annual review.
What can be learned from the inventory
The most important lesson is unspectacular: most problems arise from adding things without approval. A fixed rule that every new embed is entered in the list of services first prevents more than any after-the-fact audit. The rule needs no software, but a responsible person and a habit that applies to every plugin and every marketing component.
Second, it is worth maintaining the banner and the privacy policy from the same source. If the two are created separately, they drift apart. If they come from one list with service, purpose, provider and retention period, the reconciliation takes minutes. This also applies to the legal notice and other mandatory information, which tend to be forgotten when moving or changing legal form.
Third, it turns out that fairness in the banner is no conflict with business. Declining on equal terms costs, in our experience, a little reach in the statistics, but creates a picture of the website in which visitors do not feel patronized. For a business that lives on trust, that can weigh more than a marginally more complete analysis.
- Keep a list of services: service, purpose, provider, data, where found, contract, date of last review.
- Approve new embeds only after they are entered in the list and a short check with the responsible person.
- After every major update, check the network tab with a fresh browser profile and without consent.
- File service-provider contracts together and link them in the list.
- Schedule a review once a year, even without a specific reason.
Anyone who enters every new embed in a list first saves themselves most of the later discussions.
Conclusion: first know, then design
A GDPR-compliant website does not come from a single banner but from a sequence: know your services, remove the superfluous ones, host resources locally, ask fairly for the rest and reflect everything consistently in the banner and the policy. Each of these steps is manageable on its own. Together they produce a site whose behavior you can explain without looking anything up.
The next step is small. Open your homepage in a private window, open the network tab and count the domains contacted before any consent. Compare them with your banner and your privacy policy. If the numbers do not match, an inventory makes sense, and we are happy to carry it out with you.
Part of putting this in context is the limit of our contribution: we design and build the technical side and prepare the information. The binding legal assessment of your individual case, the classification of delicate services and the wording of the final texts belong in the hands of data protection law specialists. With a clean inventory, their work becomes faster and cheaper.
One more note on expectations: data protection is not a project with an end date. New browser rules, changed services and shifts in interpretation mean that even a well-positioned site needs a look at regular intervals. Plan a fixed, small appointment for this once a year. The effort is low when the list of services is maintained, and it grows when you postpone it.
Frequently asked questions
What belongs to a GDPR-compliant website?
As rough technical guidance: an overview of all embedded services, as few connections to third-party servers as possible, consent only where it is needed, a fairly designed banner, an up-to-date privacy policy and contracts with service providers who process data on your behalf. The binding legal assessment is a matter for your data protection officer or your lawyer.
Do I need consent for every service?
No, not across the board. As a broad rule of thumb: technically necessary functions generally need no prompt, whereas services for statistics, advertising or embedded third-party content often do. In an individual case it depends on purpose, type of data and provider. Do not decide difficult cases alone; have them classified by a qualified person.
What should the buttons in the cookie banner look like?
Accept and decline should be equivalent: same level, comparable size and prominence, with no pre-selected boxes for non-essential services. In addition, a permanently accessible link for changing the decision belongs on the page. The banner should be operable by keyboard and screen reader.
Should I host fonts locally?
In most cases, yes. If the font files sit on your own server, a connection to a third-party server is no longer needed, and load time can improve. Check the font’s license and remove the old embed completely, otherwise the page keeps loading externally. A test with an empty cache shows this reliably.
What does Consent Mode do?
Consent Mode passes your visitors’ consent status as signals to Google services so that they behave accordingly. It replaces neither a correctly configured banner nor a legal review. What matters is that the default values are set to “denied” before the scripts load and that only the visitor’s choice may change them.
How often do I need to update the privacy policy?
Whenever something changes in the embedded services, purposes or recipients, i.e. with new plugins, forms, chat tools or provider changes. On top of that comes an annual review as routine. If you maintain the banner and the policy from a shared list of services, you handle this in a few minutes instead of a project.