In den letzten Jahren habe ich hunderte Websites auf DSGVO-Konformität geprüft – eigene Projekte, Kunden-Websites und gelegentlich auch die der Konkurrenz. Dabei zeigen sich immer wieder die gleichen Fehler. Nicht weil Entwickler*innen absichtlich gegen die DSGVO verstoßen, sondern weil die Anforderungen komplex sind und sich ständig ändern.
Dieser Artikel beschreibt die Fehler, die ich am häufigsten sehe – und wie du sie behebst. Am Ende zeige ich dir, wie du deine eigene Website in 30 Sekunden kostenlos prüfen kannst.
Fehler 1: Google Fonts vom Google-Server laden
Das ist der Klassiker. Das Urteil des LG München (2022) war ein Weckruf, aber ich sehe es immer noch ständig.
Das Problem: Wenn deine Website fonts.googleapis.com aufruft, überträgt sie die IP-Adresse des Besuchers an Google – ohne dass eine rechtliche Grundlage dafür besteht. Das ist nach aktueller Rechtslage eine Datenschutzverletzung.
Die Lösung: Fonts lokal hosten.
# Google Fonts herunterladen
# Gehe auf https://fonts.google.com, wähle deine Fonts
# Lade sie als .woff2 herunter und binde sie lokal ein
/* fonts.css */
@font-face {
font-family: "Inter";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/fonts/inter-regular.woff2") format("woff2");
}
/* Statt: @import url("https://fonts.googleapis.com/css2?family=Inter"); */
Für Next.js gibt es next/font, das Fonts automatisch lokal hosted:
// next.config.js oder direkt in der Komponente
import { Inter } from "next/font/google";
const inter = Inter({ subsets: ["latin"] });
// Next.js lädt die Fonts automatisch lokal – kein Google-Request
Fehler 2: Tracking-Scripts ohne Einwilligung laden
Google Analytics, Facebook Pixel, Hotjar, Clarity – all diese Tools sind nützlich, aber sie dürfen nicht einfach geladen werden.
Das Problem: Das Skript wird im <head> oder über ein Tag-Manager geladen, noch bevor der Besucher überhaupt etwas sieht. In dem Moment werden bereits Daten übertragen.
Die Lösung: Conditional Loading.
// Richtig: Tracking erst nach Cookie-Einwilligung laden
function loadAnalytics() {
const gtagScript = document.createElement("script");
gtagScript.async = true;
gtagScript.src = "https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX";
document.head.appendChild(gtagScript);
gtagScript.onload = () => {
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag("js", new Date());
gtag("config", "G-XXXXXXXXXX");
};
}
// Nur laden, wenn Einwilligung erteilt wurde
const consent = localStorage.getItem("cookieConsent");
if (consent === "analytics") {
loadAnalytics();
}
// Event-Listener für Consent-Banner
window.addEventListener("cookieConsentAccepted", (e) => {
if (e.detail.analytics) {
loadAnalytics();
}
});
Fehler 3: Cookie-Banner ohne Opt-in
Das Problem: Ein Banner mit "Durch die Nutzung dieser Website stimmst du den Cookies zu" reicht nicht. Die DSGVO verlangt eine freiwillige, informierte und unmissverständliche Einwilligung – also ein echtes Opt-in.
Die Lösung: Dein Cookie-Banner muss folgende Elemente haben:
- Ablehnen-Button: Mindestens genauso sichtbar wie der Akzeptieren-Button
- Kategorien: Essenziell, Analyse, Marketing – einzeln an-/abschaltbar
- Kein Pre-Ticking: Checkboxen dürfen nicht vorangekreuzt sein
- Einfacher Widerruf: User müssen die Einwilligung später einfach widerrufen können
Gute Cookie-Banner-Lösungen: Cookiebot, Usercentrics, Klaro (Open Source).
Fehler 4: Fehlendes oder unvollständiges Impressum
Das ist eigentlich kein DSGVO-Thema, sondern kommt aus dem TMG (Telemediengesetz) bzw. dem neuen DDG (Digitale-Dienste-Gesetz). Aber es gehört zum gleichen Compliance-Paket.
Pflichtangaben im Impressum:
- Vollständiger Name des Betreibers
- Anschrift (kein Postfach)
- Kontakt: E-Mail und Telefonnummer
- Umsatzsteuer-Identifikationsnummer (falls vorhanden)
- Verantwortlicher für den Inhalt (bei juristischen Personen)
- Streitschlichtungshinweis
Häufiger Fehler: Das Impressum ist verlinkt, aber der Link heißt "Legal" oder "About" statt "Impressum". Der Link muss deutlich erkennbar sein.
Fehler 5: Datenschutzerklärung als Copy-Paste ohne Bezug zur Website
Das Problem: Eine Datenschutzerklärung von einem Generator ist ein guter Start. Aber wenn dort Google Analytics aufgeführt ist, du aber gar kein Analytics nutzt – oder umgekehrt – ist die Erklärung falsch und damit rechtlich wertlos.
Die Lösung: Die Datenschutzerklärung muss die tatsächliche Datenverarbeitung auf deiner Website abbilden. Das bedeutet:
- Liste alle eingesetzten Dienste auf
- Beschreibe, welche Daten erhoben werden
- Nenne die Rechtsgrundlage (Art. 6 Abs. 1 DSGVO)
- Gib an, wie lange die Daten gespeichert werden
- Informiere über Widerspruchsrechte
Und: Wenn du einen neuen Dienst hinzufügst, musst du die Datenschutzerklärung aktualisieren.
Fehler 6: Keine Verschlüsselung oder falsche SSL-Konfiguration
Das Problem: Die Website ist über HTTP erreichbar, oder HTTPS ist zwar aktiv, aber die Konfiguration ist veraltet.
Die Lösung:
# Nginx: Redirect HTTP → HTTPS
server {
listen 80;
server_name example.de;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.de;
ssl_certificate /etc/letsencrypt/live/example.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.de/privkey.pem;
# Moderne TLS-Konfiguration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# HSTS Header
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
Fehler 7: Social-Media-Buttons als Tracking-Falle
Das Problem: Ein Facebook-Like-Button oder Twitter-Share-Button, der direkt von der Plattform eingebunden wird, lädt Scripts, die den Besucher tracken – auch wenn er gar nicht klickt.
Die Lösung: Shariff oder ähnliche Lösungen nutzen, die Buttons erst aktivieren, wenn der Nutzer darauf klickt.
<!-- Statt direktem Facebook-Button -->
<!-- Shariff: https://github.com/heiseonline/shariff -->
<div class="shariff" data-services="["facebook","twitter","linkedin"]">
</div>
<link rel="stylesheet" href="/shariff.min.css">
<script src="/shariff.min.js"></script>
Fehler 8: Formulare ohne Datenschutzhinweis
Das Problem: Kontaktformulare, Newsletter-Anmeldungen, Kommentarfelder – überall werden personenbezogene Daten erhoben. Ohne expliziten Hinweis direkt am Formular ist das eine Verletzung der Informationspflicht.
Die Lösung:
<form action="/contact" method="POST">
<input type="text" name="name" placeholder="Name" required>
<input type="email" name="email" placeholder="E-Mail" required>
<textarea name="message" placeholder="Nachricht" required></textarea>
<!-- Pflicht: Datenschutzhinweis direkt am Formular -->
<label>
<input type="checkbox" name="privacy" required>
Ich habe die <a href="/datenschutz">Datenschutzerklärung</a> gelesen
und bin mit der Verarbeitung meiner Daten einverstanden.
</label>
<button type="submit">Absenden</button>
</form>
Wie finde ich heraus, ob meine Website betroffen ist?
Die meisten dieser Fehler sind nicht offensichtlich. Du kannst nicht einfach deine eigene Website besuchen und sagen "sieht gut aus" – weil du nicht siehst, was im Hintergrund passiert.
Ich empfehle, regelmäßig einen automatisierten Scan durchzuführen. DSGVO Guard prüft kostenlos all die oben genannten Punkte und zeigt dir genau, wo die Probleme liegen.
Der Scan dauert etwa 30 Sekunden und braucht keine Registrierung.
Fazit
DSGVO-Compliance ist keine Raketenwissenschaft, aber sie erfordert Disziplin. Die meisten Fehler, die ich sehe, entstehen nicht aus böser Absicht, sondern aus Unwissenheit oder Bequemlichkeit.
Die gute Nachricht: Alle oben genannten Probleme lassen sich mit überschaubarem Aufwand beheben. Der erste Schritt ist zu wissen, dass sie überhaupt existieren.
📦 DSGVO Compliance Toolkit
Alles in einem Paket: DSGVO Scan + 50-Punkte Checkliste (PDF) + Widget Setup Guide.
→ DSGVO Compliance Toolkit (€49)
Top comments (0)