Skip to content
PageSpeed 100 as the delivery default
Datenschutz

GDPR and consent: setting up a website lawfully

Consent under TDDDG and GDPR: what stays lawful without it, how to build a defensible dialogue, and which design mistakes supervisory authorities keep flagging.

12 min read DSGVOConsentCookiesTDDDG

A consent dialogue is not a design element. It is the visible tip of a legal assessment. Anyone running a business website in Germany has to satisfy two sets of rules at the same time: the TDDDG governs access to the user device, while the GDPR governs what happens to personal data afterwards. This guide separates the two, explains what remains lawful without consent, describes how a consent dialogue must be built to survive a regulatory review, and lists the design mistakes that supervisory authorities keep flagging.

Consent dialogue: layout and decision path your-domain.com Privacy settings Every purpose separate, nothing pre-selected Necessary (technically required) Audience measurement External media Reject all Accept all same size, same weight, one click each Adjust settings Privacy policy Check before every script 1 Does it touch the device? Section 25 TDDDG, service by service 2 Does an exemption apply? Only strictly necessary access is free 3 Name each purpose Granular choice, not one blanket box 4 Withdrawal as easy as yes Article 7(3) GDPR, reachable anytime Logged for every consent Timestamp Purposes Text version Accountability: Article 7(1) GDPR

Most consent dialogues on the web were added on top of a website that was already finished. That is exactly where the familiar problems come from: scripts start loading while the dialogue is still rendering, purposes are described so vaguely that nobody can tell what they are agreeing to, and rejecting takes three clicks while accepting takes one. In legal terms, however, the dialogue is not an accessory. It is the evidence that a given processing operation has a legal basis at all. Without that evidence, the basis is missing retroactively for the entire period in which data was flowing. That is why the consent question belongs at the start of a website project rather than at the end. If you create a website with AI, map the data flows from the first sketch, because removing them later takes considerable effort.

The European coordination process shows how seriously regulators treat the topic. Following 422 complaints (European Data Protection Board, Cookie Banner Taskforce report) about consent dialogues filed with several European supervisory authorities, the European Data Protection Board set up a dedicated taskforce and published a shared assessment framework in 2023. For breaches of the processing principles, GDPR fines can reach 20 million euros (Article 83(5) GDPR) or four percent of worldwide annual turnover, whichever is higher. In day-to-day practice, complaints from visitors and unfair-competition letters are the more common risk, but the direction is clear: consent is being examined, not assumed.

TDDDG and GDPR: two checks, one website

The two frameworks apply in sequence rather than as alternatives. First, Section 25 TDDDG asks whether information is stored on the user device or read from it. That provision has applied in Germany since 2021 (Federal Law Gazette, TTDSG of 23 June 2021, in force since 1 December 2021); the Digital Services Act implementation renamed the statute TDDDG in May 2024, leaving the substance of Section 25 untouched. The rule is technology neutral: cookies, local storage, session storage, values held in the browser cache and the reading of device characteristics all fall under it, regardless of whether personal data is involved. Only afterwards does the GDPR ask which legal basis covers the subsequent processing and what information the individual has to receive about it.

  1. Step 1 (Section 25 TDDDG): does anything get written to or read from the device? If so, consent is required unless one of the two statutory exemptions applies.
  2. Step 2 (Article 6 GDPR): on what basis is the data processed afterwards? Where TDDDG consent was required, the basis is usually consent under Article 6(1)(a) as well.
  3. Step 3 (Article 13 GDPR): what has to be disclosed? Purpose, recipients, retention period, third-country transfers and the right to withdraw belong in the privacy policy, not only in the dialogue.
  4. Step 4 (Article 5 GDPR): can the purpose be achieved without touching the device at all? Data minimisation is a principle in its own right, not an optional extra.

Do not swap the order

A legitimate interest under Article 6(1)(f) GDPR does not replace consent under Section 25 TDDDG. Where device access sits at the start of the processing chain, consent is the entry ticket; a balancing test can at best support later steps. In its 2023 assessment framework, the European Data Protection Board explicitly criticised dialogues that pre-selected services on the second layer under the heading of legitimate interest.

Section 25(2) TDDDG contains two exemptions: access that serves only the transmission of a message over a telecommunications network, and access that is strictly necessary to provide a service the user has expressly requested. Strictly necessary has to be read narrowly. It covers what does not work technically without the stored value, not what makes operations more convenient or analytics more rewarding. The German Data Protection Conference set out this line in its guidance for telemedia providers (Datenschutzkonferenz), making clear that the provider's own view of necessity is not the deciding factor. The following cases are typically treated as exempt.

Session cookie

Keeps the signed-in state or the shopping basket alive during one visit. Without that value the requested service simply does not work.

Security token

Protects forms against forged requests. The value is tied to the session and is not combined into a longer-lived profile.

User's own choice

Language, contrast mode or font size the person selected themselves so the service is delivered the way they asked for it.

Consent record

The decision taken in the dialogue has to be stored somewhere, otherwise the same question would appear on every single page view.

Load balancing

A technical value that keeps a request on the same server, as long as it does not allow recognition beyond the current session.

Plain server logs

Access logs on the web server do not touch the device at all; here only the GDPR balancing test and the retention period matter.

What is clearly not covered: audience measurement, marketing pixels, embedded videos, remotely loaded web fonts, map services, chat windows from outside providers and split testing of page variants. German supervisory practice also treats purely statistical measurement as not strictly necessary, even when no names are involved, because writing the value onto the device already triggers the consent requirement. Anyone who wants reach figures without a dialogue therefore needs a method that avoids reading from and writing to the browser, for example server-side evaluation without any recognition token. How strongly such decisions shape structure and loading time is covered in the article on static delivery and PageSpeed 100, and the effect of a page without external embeds can be seen in the demo websites.

The requirements for valid consent sit in Article 4(11) and Article 7 GDPR: freely given, specific, informed and unambiguous. In case C-673/17 the Court of Justice of the European Union held in 2019 that a pre-ticked box does not meet those requirements, and the German Federal Court of Justice transferred the ruling into national law in 2020 in the follow-up case I ZR 7/16. The European Data Protection Board adds in its Guidelines 05/2020 on consent that scrolling on or simply continuing to browse is not a clear affirmative action. What follows is a short review list that a team can work through in a few hours.

  • Reject and accept sit side by side on the first layer: same size, comparable visual weight, the same number of clicks.
  • No optional toggle is pre-selected; only technically necessary processing is fixed as active and labelled as such.
  • Purposes can be chosen individually and are described in plain language, not bundled as vague labels such as convenience and marketing.
  • Every embedded service is listed with provider, purpose, retention period and recipient country, reachable through a second layer.
  • The dialogue does not block content that has to remain accessible without consent, and it can be operated entirely by keyboard.
  • Scripts that require consent start only after approval instead of loading first and then being declared inactive.
  • Withdrawal is reachable through a permanently visible entry point, usually in the footer of every single page.
Design questionDefensible implementationCommon risk
First layerReject and accept equally prominentReject hidden as a small text link
Pre-selectionAll optional purposes switched offToggles or boxes already ticked
Purpose wordingOne plain sentence per purposeUmbrella phrases such as improving your experience
Load timingScript starts after approvalScript loads first, the question follows later
WithdrawalFixed entry point in the footerOnly reachable through browser settings
Third countryTransfer named and justifiedNo mention of recipients outside the EU
OperabilityFocus order and contrast verifiedDialogue usable with a mouse only

Frequently criticised patterns

The assessment framework of the Cookie Banner Taskforce (European Data Protection Board, 2023) lists recurring patterns: no reject option on the first layer, pre-ticked boxes, misleading link design, colour contrast that visually devalues one option, and tracking classified as a legitimate interest. When reviewing your own dialogue, work through exactly these points first, because they typically account for the majority of complaints.

Withdrawal, logging and accountability

Article 7(1) GDPR requires the controller to be able to demonstrate consent. That is an active demonstration rather than a claim: every consent record needs the timestamp, the purposes actually selected, the version of the dialogue and the revision of the information texts that applied at the moment of the decision. Once the list of embedded services changes, the earlier consent is worthless for the new service, so the dialogue has to be shown again. Data minimisation applies to the log itself as well: a pseudonymous record without names and without a full IP address is usually sufficient, because it evidences the decision without building an additional profile.

Under Article 7(3) GDPR, withdrawing consent must be as easy as giving it. In practice that means: if approval took one click, withdrawal must not require three nested menus. A permanent footer entry that reopens the same dialogue and shows the stored selection has proven itself in practice. Just as important, a withdrawal has to stop the affected scripts and remove the values that were set. A dialogue that stores the choice while the loaded services keep running only creates the appearance of control, and it fails a review immediately. How this differs from classic CMS installations with retrofitted extensions is explained in the overview of our approach and services.

json
{
  "consent_id": "b7f4c1e0-9a25-4d31-8f0a-6c2e51d7ab93",
  "given_at": "2026-07-21T09:14:22Z",
  "dialogue_version": "3",
  "policy_revision": "2026-05-01",
  "purposes": {
    "necessary": true,
    "audience_measurement": false,
    "external_media": false
  },
  "action_taken": "explicit choice on the first layer",
  "withdrawal_via": "/en/privacy/#consent",
  "valid_until": "2027-07-21T09:14:22Z"
}

Reduce data flows instead of polishing dialogues

The strongest lever is not the design of the dialogue but the number of services behind it. More than nine out of ten pages embed at least one resource from an outside server (Web Almanac, HTTP Archive, Third Parties chapter), and every one of those resources creates a connection complete with IP address, browser signature and timestamp. Serving fonts, icons, maps and videos from your own domain instead cuts the number of consent-relevant cases substantially; often only a handful of purposes remain, and in simple setups none at all. A website without consent-relevant services needs no approval dialogue, only a complete and accurate privacy policy.

Every service a website does not embed at all is a purpose nobody has to explain, nobody has to log and nobody has to withdraw.

The dialogue is only one item on the list. Alongside it sit the information duties of Article 13 GDPR, the record of processing activities under Article 30, processor agreements under Article 28 with every service provider involved in hosting, mail delivery and form handling, plus the provider identification that has been governed by Section 5 of the German Digital Services Act since May 2024. Processing outside the European Union falls under Articles 44 and following of the GDPR; after the Court of Justice of the European Union invalidated the earlier transfer arrangement in case C-311/18 in 2020, transatlantic data flows now rest on the adequacy decision adopted by the European Commission in 2023. Keeping processing and storage inside the EU avoids most of that debate. XICflow is operated by XICTRON in Söhlde, Germany; the details are set out on the company profile page.

  • A privacy policy per domain and per language, aligned with the services that are actually embedded.
  • A legal notice under Section 5 of the German Digital Services Act with full contact details and, where applicable, register data and the competent authority.
  • A record of processing activities covering contact forms, newsletters, job applications and server logs.
  • Processor agreements with every service provider involved, including sub-processors and their locations.
  • A deletion policy with clear retention periods for form enquiries, log files and consent records.

Compliance rarely comes from adding one more dialogue. It comes from an architecture in which most of the questions that dialogue would ask do not arise in the first place.

Consent by default: how XICflow handles it

XICflow is built so that data protection requirements do not have to be retrofitted. Pages are generated from a configuration, delivered as static files and served without dependencies on outside servers; fonts, icons and images live on the same domain as the page itself. The consent dialogue is part of the system, with equally weighted buttons, individually selectable purposes and a permanent withdrawal entry point in the footer. Legal texts are generated per domain and per language and stay tied to the features that are actually switched on. The step-by-step project overview explains how that works in a real project, and the service overview sets out what is included.

Consent by default

Equally weighted rejection, individually selectable purposes and a permanent withdrawal link are part of every page instead of separate rework.

Delivery inside the EU

Hosting, domain and SSL run from locations inside the European Union, backed by a processor agreement as the legal basis.

Legal texts per domain

Legal notice and privacy policy are generated per domain and language and follow the features that are genuinely in use.

Where to start on your own website

Taking stock does not have to take weeks. In our experience a structured pass surfaces most of the open points within a few hours, because the critical cases cluster into a small number of patterns. Start with the network panel in the browser and assign a legal basis to every outgoing connection; then review the dialogue and finally the texts. Comparable review patterns show up in accessibility under the European Accessibility Act and in multilingual sites with hreflang, which is why a combined review pass usually pays off. What is included at which level is set out on the pricing page.

  1. Open the network panel in the browser and note every outgoing connection, once before and once after approval.
  2. Assign each entry to a category: strictly necessary, consent-relevant, or simply dispensable.
  3. Remove what is dispensable, serve replaceable assets from your own domain, and document the rest in the dialogue.
  4. Check the dialogue for equally weighted options, absent pre-selection, plain-language purposes and keyboard operation.
  5. Bring the privacy policy, the legal notice and the record of processing activities in line with what remains.
  6. Test the withdrawal path: change the selection, reload the page, and verify stored values and outgoing connections again.
This article is based on data from: European Data Protection Board (Cookie Banner Taskforce report 2023, Guidelines 05/2020 on consent), the German Data Protection Conference (guidance for telemedia providers), the German Federal Law Gazette (TTDSG 2021, Digital Services Act implementation 2024), the Court of Justice of the European Union (C-673/17, C-311/18), the German Federal Court of Justice (I ZR 7/16), the European Commission (adequacy decision 2023), as well as Web Almanac and HTTP Archive.