Eine DSGVO-konforme Website entsteht nicht durch einen Cookie-Banner oder einen Generator-Text, sondern durch eine Inventur: Welche personenbezogenen Daten fließen beim Seitenaufruf, beim Formular und bei eingebetteten Diensten an wen, auf welcher Grundlage, und steht genau das in der Datenschutzerklärung? Wer diese Liste technisch prüft und mit Rechtsberatung oder Aufsichtsbehörden-Hinweisen abgleicht, hat eine belastbare Grundlage. Ein Siegel ohne diese Liste ist Dekoration.
Was „DSGVO-konform“ bei einer Website praktisch heißt
Der Begriff klingt nach einem Zustand, den man einmal erreicht und abhakt. In der Praxis ist er eine Kette aus Einzelfragen, und jede Website beantwortet sie anders. Ich beschreibe hier, was ich als Entwickler technisch prüfe und dokumentiere. Ob ein konkreter Aufbau rechtlich trägt, beurteilt eine Datenschutzberatung oder Anwaltskanzlei, nicht dieser Artikel.
Zwei Regelwerke stehen im Zentrum, und sie greifen an unterschiedlichen Stellen.
DSGVO: Rechtsgrundlage und Information
Personenbezogene Daten sind alle Informationen, die sich auf eine identifizierbare Person beziehen; bei Websites ist das schon die IP-Adresse im Server-Log oder die E-Mail im Kontaktformular. Art. 6 DSGVO („Rechtmäßigkeit der Verarbeitung“) listet die möglichen Rechtsgrundlagen, darunter Einwilligung, Vertragsanbahnung und berechtigte Interessen. Art. 13 DSGVO regelt, welche Informationen der Verantwortliche „zum Zeitpunkt der Erhebung“ mitteilt, etwa Zwecke, Rechtsgrundlage, Empfänger und eine geplante Übermittlung in Drittländer. Das ist der Kern dessen, was später in der Datenschutzerklärung steht.
Für Einwilligungen enthält Art. 7 Abs. 3 DSGVO einen Satz, der direkt in die Oberfläche hineinwirkt: „Der Widerruf der Einwilligung muss so einfach wie die Erteilung der Einwilligung sein.“ Ein Banner mit großem „Alle akzeptieren“ und einem Widerruf, der nur über eine versteckte Fußzeile erreichbar ist, ist deshalb eine UX-Frage mit rechtlicher Dimension.
TDDDG § 25: Zugriff auf das Endgerät
Das Telekommunikation-Digitale-Dienste-Datenschutz-Gesetz (TDDDG) regelt in § 25 den „Schutz der Privatsphäre bei Endeinrichtungen“. Die Norm spricht nicht von Cookies, sondern allgemein vom Speichern von Informationen im Endgerät und vom Zugriff darauf. Das schließt nach dem Wortlaut auch localStorage, sessionStorage und ähnliche Techniken ein. Grundsätzlich setzt das eine Einwilligung auf Basis klarer und umfassender Informationen voraus; § 25 Abs. 2 nennt Ausnahmen, unter anderem wenn der Zugriff „unbedingt erforderlich“ ist, damit ein ausdrücklich gewünschter digitaler Dienst bereitgestellt werden kann.
Für die Technik bedeutet das: Die Frage ist nicht „Cookie ja oder nein“, sondern „Was schreibt oder liest dieser Code im Browser, und wäre die Seite ohne ihn für den Nutzer unbrauchbar?“ Wo die Grenze von „unbedingt erforderlich“ im Einzelfall verläuft, gehört in die rechtliche Prüfung.
Welche Datenflüsse löst eine typische Firmen-Website aus?
Die meisten Probleme, die ich bei Bestandsseiten finde, stecken nicht in eigenem Code, sondern in Bausteinen, die irgendwann per Plugin, Snippet oder Theme hinzugekommen sind. Diese Tabelle ist mein Startpunkt für jede Inventur.
| Baustein | Was technisch passiert | Was zu klären ist | Typischer Umsetzungsfehler |
|---|---|---|---|
| Hosting und Server-Logs | IP, Zeitstempel, User-Agent landen im Log | Speicherdauer, Hosting-Standort, Vertrag mit dem Hoster | Logs ohne Rotation, niemand kennt die Aufbewahrungsdauer |
| Webfonts vom Drittserver | Browser lädt Schrift von fremder Domain, IP wird übermittelt | Ist der Drittabruf nötig, oder geht es lokal? | Theme lädt Fonts extern, obwohl lokale Dateien vorhanden sind |
| Kontaktformular | Name, E-Mail, Freitext an Server oder Mail-Dienst | Zweck, Pflichtfelder, Speicherort, Löschung | Formular fragt Telefonnummer und Anschrift ab, die niemand braucht |
| Web-Analytics | Skript setzt Kennungen, sendet Nutzungsdaten | Einwilligung, Anbieter, Drittlandbezug | Skript lädt vor der Entscheidung im Banner |
| Eingebettete Videos | Player lädt Ressourcen und ggf. Kennungen des Plattformanbieters | Einwilligung vor dem Laden | Datensparsamer Modus aktiviert, Thumbnails kommen trotzdem extern |
| Eingebettete Karten | Kartenkacheln und Skripte von fremder Domain | Einwilligung oder statische Alternative | Karte im Footer jeder Seite, also auf jedem Seitenaufruf |
| Social Plugins / Feeds | Abruf beim Anbieter, oft mit Kennungen | Einwilligung, gemeinsame Verantwortung | Instagram-Feed-Plugin ruft Daten serverseitig und clientseitig ab |
| Newsletter-Anmeldung | E-Mail an Versanddienst, Bestätigungsmail | Nachweis der Einwilligung, Auftragsverarbeitung | Kein Double-Opt-in-Protokoll exportierbar |
| Chat- oder KI-Widget | Eingaben gehen an externen Dienst | Welche Daten gehen wohin, Speicherdauer beim Anbieter | Widget lädt beim Seitenaufruf, nicht erst beim Öffnen |
| Consent-Tool selbst | Lädt Skript, speichert Entscheidung im Browser | Wo liegt das Skript, was protokolliert der Anbieter? | Banner-Skript vom Anbieter-CDN, Einstellungen nur im Kundenkonto dokumentiert |
Die Spalte „Typischer Umsetzungsfehler“ ist die wichtigste. Fast keiner dieser Fehler ist eine bewusste Entscheidung. Es sind Voreinstellungen, die niemand angesehen hat.
Wie prüfe ich meine Website in 30 Minuten selbst?
Online-Scanner liefern eine erste Liste, sehen aber oft nur die Startseite und keinen Zustand nach Klicks. Ein Browser mit DevTools reicht für einen ehrlicheren Blick. Ich teste in vier Zuständen.
Vorbereitung: sauberer Browser
Öffnen Sie ein privates Fenster oder ein frisches Browser-Profil ohne Erweiterungen. Werbeblocker verfälschen das Ergebnis, weil sie genau die Anfragen unterdrücken, die Sie finden wollen. Öffnen Sie die DevTools (F12), Tab „Netzwerk“, Haken bei „Cache deaktivieren“ und „Log beibehalten“.
Zustand 1: Erstaufruf, Banner noch offen
Laden Sie die Startseite und klicken Sie nichts an. Sortieren Sie die Netzwerkliste nach Domain. Jede Domain, die nicht Ihre eigene ist, kommt auf einen Zettel. Danach im Tab „Anwendung“ (Chrome) bzw. „Speicher“ (Firefox) nachsehen: Was steht in Cookies, localStorage und sessionStorage? Alles, was hier vor einer Entscheidung auftaucht, braucht eine Begründung.
Zustand 2 und 3: nach „Ablehnen“ und nach „Zustimmen“
Speicher löschen, neu laden, diesmal „Ablehnen“ oder „Nur notwendige“ wählen und drei Unterseiten aufrufen, darunter eine mit Video oder Karte. Dann dasselbe mit „Alle akzeptieren“. Der Unterschied zwischen beiden Netzwerklisten zeigt, was Ihr Consent-Tool tatsächlich steuert. Ist die Liste nach „Ablehnen“ genauso lang wie nach „Zustimmen“, blockiert das Tool nichts.
Zustand 4: Widerruf
Suchen Sie den Weg zurück zu den Einstellungen, ohne vorher zu wissen, wo er ist. Zählen Sie die Klicks. Widerrufen Sie und prüfen Sie, ob die Skripte beim nächsten Seitenaufruf verschwinden. Bleiben die Kennungen im Speicher stehen, notieren Sie auch das.
Am Ende haben Sie eine Liste mit Domains und Speichereinträgen pro Zustand. Diese Liste ist mehr wert als jeder Score eines Scanners, weil Sie sie Zeile für Zeile mit Ihrer Datenschutzerklärung abgleichen können.
Fiktives Beispiel: Praxis-Website mit elf Fremdanfragen
Das folgende Beispiel ist erfunden, setzt sich aber aus Mustern zusammen, die bei Bestandsseiten von Praxen und kleinen Unternehmen häufig vorkommen.
Eine Physiotherapie-Praxis betreibt eine Website auf einem Baukasten-Theme. Beim Erstaufruf, Banner noch offen, zeigt der Netzwerk-Tab 11 Anfragen an 6 fremde Domains: 2 für Webfonts, 3 für ein eingebettetes Vorstellungsvideo, 2 für eine Anfahrtskarte im Footer, 2 für ein Analytics-Skript, 1 für das Consent-Tool vom Anbieter-CDN und 1 für ein Bewertungs-Widget. Der Banner selbst funktioniert, aber das Analytics-Skript ist fest im Theme-Header eingebaut und läuft am Tool vorbei.
Mein Planungsmodell für den Umbau sieht so aus. Die Stunden sind eigene Erfahrungswerte für diese Art Seite, keine Zusage für ein anderes Projekt:
| Maßnahme | Planwert |
|---|---|
| Webfonts lokal einbinden, externe Einbindung im Theme entfernen | 1 h |
| Video als Vorschaubild mit Zwei-Klick-Lösung, Player lädt erst nach Klick | 3 h |
| Karte im Footer durch statisches Bild mit Link zum Kartendienst ersetzen | 2 h |
| Analytics aus dem Header entfernen und über das Consent-Tool laden | 3 h |
| Bewertungs-Widget durch statisch gepflegte Zitate ersetzen | 1 h |
| Datenschutzerklärung mit der neuen Inventarliste abgleichen (Entwurf für die Beratung) | 2 h |
| Retest in allen vier Zuständen, Ergebnis dokumentieren | 1 h |
| Summe | 13 h |
Nach dem Umbau bleibt beim Erstaufruf eine einzige fremde Domain übrig: das Consent-Tool. Wer auch die verschwinden lassen will, hostet das Banner-Skript selbst, sofern der Anbieter das zulässt. Die Entscheidung über die Rechtsgrundlagen für Analytics und Video hat die Praxis mit ihrer Datenschutzberatung getroffen; meine Aufgabe war, dass die Technik genau das tut, was dort beschlossen wurde.
Der Satz, den ich aus solchen Projekten mitnehme: Die Datenschutzerklärung beschreibt eine Website, und wenn niemand prüft, welche Website sie beschreibt, beschreibt sie meistens die vom letzten Jahr.
Datenschutzerklärung: Muster, Generator oder selbst schreiben?
Hier landen die meisten Suchenden, und die Frage ist berechtigt. Alle drei Wege funktionieren nur so gut wie die Inventarliste, die hineingeht.
| Weg | Passt, wenn … | Risiko in der Praxis |
|---|---|---|
| Muster einer Aufsichtsbehörde | die Website einfach ist: Hosting, Kontaktformular, kaum Drittdienste | Muster deckt eingebettete Dienste und Tracking oft bewusst nicht ab |
| Generator (kostenlos oder kostenpflichtig) | die Drittdienste bekannt und im Generator auswählbar sind | Abschnitte für Tools, die gar nicht eingebunden sind, und fehlende Abschnitte für solche, die per Plugin kamen |
| Individuell durch Beratung oder Kanzlei | Formulare mit sensiblen Daten, Shop, Nutzerkonten, Gesundheitskontext | Kostet mehr, veraltet aber genauso, wenn die Technik sich ändert |
Einige Landesdatenschutzbehörden stellen Muster für einfache Websites bereit; welches für Sie gilt, richtet sich nach dem Sitz des Unternehmens. Prüfen Sie beim Generator vor allem, ob jeder Abschnitt einem Eintrag Ihrer Netzwerkliste entspricht. Ein Abschnitt über ein Tool, das Sie nicht nutzen, ist harmlos wirkender Ballast; ein fehlender Abschnitt über ein Tool, das Sie nutzen, ist eine echte Lücke.
Welche technischen Entscheidungen bei der Umsetzung den Unterschied machen
Bei neuen Projekten lege ich diese Punkte fest, bevor das erste Template entsteht. Nachträglich kosten sie ein Vielfaches.
Ressourcen lokal ausliefern
Schriften, Icons und JavaScript-Bibliotheken lassen sich in fast jedem Stack selbst ausliefern. In Next.js lädt next/font/google die Schriftdateien beim Build herunter und liefert sie von der eigenen Domain aus, der Browser fragt also nicht bei Google an. Bei WordPress-Themes lohnt ein Blick in den Quelltext: Viele laden Fonts extern, obwohl eine lokale Option im Customizer existiert.
Einbettungen erst nach Klick laden
Videos, Karten und Social-Feeds bekommen einen Platzhalter mit Vorschaubild, das vom eigenen Server kommt, und einen kurzen Hinweis, welcher Anbieter nach dem Klick geladen wird. Das ist wenig Code und sauberer als ein globaler Banner, der alles auf einmal freischaltet.
Formulare auf den Zweck zuschneiden
Jedes Feld, das nicht für die Antwort gebraucht wird, ist ein Datum, das gespeichert, geschützt und irgendwann gelöscht werden will. Ich definiere im Backend eine Löschfrist für Formulareingänge, statt sie unbegrenzt im Postfach oder in der Datenbank liegen zu lassen. Bei Supabase und PostgreSQL wähle ich die Region beim Anlegen des Projekts; eine EU-Region ist dort auswählbar, ein späterer Umzug ist dagegen eine Migration.
Verträge mit Dienstleistern sammeln
Art. 28 DSGVO befasst sich mit Auftragsverarbeitern, also Dienstleistern, die Daten im Auftrag verarbeiten: Hoster, Newsletter-Versand, Formular-Backend. Technisch ist das nicht mein Thema, organisatorisch schon: Zur dokumentierten Übergabe gehört bei mir eine Liste aller Dienste mit Link zum jeweiligen Vertragsdokument des Anbieters. Wie sich der Aufwand für Datenschutz in stärker regulierten Umgebungen verändert, zeigt der Vergleich Aufwand DSGVO und PSD2 Banking im Vergleich: Anforderungen und Überschneidungen.
Für die Auslegung einzelner Fragen sind die Leitlinien der europäischen Aufsichtsbehörden die Primärquelle. Die Leitlinien-Übersicht des Europäischen Datenschutzausschusses (EDPB) enthält unter anderem die Empfehlungen 2/2025 zur Rechtsgrundlage, wenn E-Commerce-Websites das Anlegen eines Nutzerkontos verlangen. Für Shop-Betreiber ist das eine konkrete Lektüre vor dem nächsten Checkout-Umbau.
10-Punkte-Prüfliste für die DSGVO-konforme Website
Die Liste sortiert nach Art der Aufgabe, damit klar ist, wer sie erledigt.
- Technik: Netzwerkliste in vier Zuständen erstellt und abgelegt.
- Technik: Kein Drittanbieter-Skript lädt vor der Banner-Entscheidung, außer den bewusst als notwendig eingestuften.
- Technik: „Ablehnen“ erzeugt messbar weniger Anfragen als „Zustimmen“.
- Technik: Widerruf ist von jeder Seite mit wenigen Klicks erreichbar und entfernt die Skripte beim nächsten Aufruf.
- Technik: Fonts, Icons und Bibliotheken kommen von der eigenen Domain.
- Technik: Formulare enthalten nur Felder mit klarem Zweck, Eingänge haben eine definierte Löschfrist.
- Redaktion: Jeder Dienst der Netzwerkliste hat einen Abschnitt in der Datenschutzerklärung, und umgekehrt.
- Redaktion: Datenschutzerklärung und Impressum sind von jeder Seite aus verlinkt, auch aus dem Banner heraus.
- Vertrag: Für jeden Dienstleister mit Datenzugriff liegt das Vertragsdokument in der Projektablage.
- Vertrag: Eine Person ist benannt, die bei neuen Plugins oder Tools die Liste aktualisiert.
Punkt 10 ist der, der am häufigsten fehlt. Ohne ihn ist die Liste nach dem nächsten Marketing-Tool veraltet.
Warum Dezember und Januar ein guter Zeitpunkt für die Prüfung sind
Rund um Black Friday und das Weihnachtsgeschäft kommen auf vielen Websites kurzfristig Tracking-Pixel, Pop-ups und Gutschein-Widgets dazu. Im Januar sind die Kampagnen vorbei, die Snippets aber oft noch im Header. Gleichzeitig verlängern sich viele Tool-Abos zum Jahreswechsel, und das ist der Moment, Dienste zu kündigen, die niemand mehr nutzt, statt sie ein weiteres Jahr in der Datenschutzerklärung mitzuschleppen.
Praktisch heißt das: Netzwerkliste in der ruhigen Zeit zwischen den Jahren erstellen, Kampagnen-Reste entfernen, Abo-Liste gegen die Inventarliste halten und die Datenschutzerklärung im Januar mit der Beratung abgleichen. Planen Sie Freigaben ein: Wenn Datenschutzberatung, Geschäftsführung und Entwickler im Dezember unterschiedlich Urlaub haben, wird aus einer Woche Arbeit schnell ein Monat Wartezeit.
Häufige Fragen
Brauche ich einen Cookie-Banner, wenn meine Website keine Cookies setzt?
§ 25 TDDDG spricht vom Speichern und Auslesen von Informationen im Endgerät allgemein, nicht nur von Cookies. Entscheidend ist daher, was Ihr Code im Browser speichert oder ausliest und ob einer der Ausnahmetatbestände greift. Wenn die Netzwerkliste und der Speicher-Tab beim Erstaufruf nur eigene, für den Betrieb erforderliche Einträge zeigen, ist das eine gute Ausgangslage für die Klärung mit Ihrer Beratung.
Macht ein Consent-Tool meine Website automatisch DSGVO-konform?
Nein, ein Consent-Tool ist ein Schalter, und er schaltet nur die Skripte, die über ihn eingebunden sind. Der häufigste Fehler ist ein fest im Theme verbautes Skript, das am Tool vorbei lädt. Der Vergleich der Netzwerklisten nach „Ablehnen“ und nach „Zustimmen“ zeigt das in wenigen Minuten.
Reicht ein kostenloser Datenschutz-Generator?
Für einfache Seiten kann ein Generator ein brauchbarer Ausgangspunkt sein, wenn die Auswahl im Generator exakt Ihrer Netzwerkliste entspricht. Bei Shops, Nutzerkonten oder Formularen mit Gesundheitsbezug sollten Sie den Text individuell prüfen lassen. Ein Generator kennt nur die Dienste, die Sie ihm nennen.
Was sollte ich vom Entwickler bei der Übergabe bekommen?
Eine Inventarliste aller eingebundenen Dienste mit Domain, Zweck, Ladebedingung (sofort oder nach Einwilligung) und Link zum Vertragsdokument des Anbieters, dazu die Netzwerklisten des letzten Tests. Damit kann Ihre Datenschutzberatung prüfen, statt zu raten, und der nächste Entwickler sieht, was er nicht kaputt machen darf.