Zum Hauptinhalt springen
Die EU-Reform zu Datenschutz & Cookies: Was sich technisch ändert
#DSGVO #Datenschutz #Cookies #Analytics #Server-Side Tracking

Die EU-Reform zu Datenschutz & Cookies: Was sich technisch ändert


Browser-Signale, Server-Side Tracking und das Ende der Cookie-Banner – ein technischer Leitfaden

SerieEU-Datenschutzreform
Teil 2 von 2
18 Minuten Lesezeit

Dieser Artikel ist der technische Deep-Dive zur EU-Datenschutzreform. Wer zuerst verstehen will, worum es geht und wem die Reform wirklich nützt, startet besser hier: EU-Datenschutzreform 2025: Was sich für Websites und Shops ändert.


Die EU arbeitet am “Digitalen Omnibus”. Cookie-Banner sollen verschwinden, Browser-Signale übernehmen. Klingt nach Vereinfachung. Technisch wird es erst mal komplizierter.

Hier der Überblick für alle, die Code schreiben müssen.

TL;DR

  • Cookie-Banner werden optional – wenn Browser-Signale funktionieren (großes Wenn)
  • Server-Side Tracking wird wichtiger – Client-Side wird eingeschränkt
  • CMPs müssen umgebaut werden – GPC-Support wird Pflicht
  • Analytics ohne Consent möglich – unter Bedingungen, die kaum jemand erfüllt
  • Pseudonyme Daten fallen teilweise raus – weniger DSGVO-Scope, mehr Grauzone

1. Das Browser-Signal-Modell

Aktueller Stand: Organisiertes Chaos

Nutzer -> Website -> CMP-Popup -> TCF-String -> Vendor-Sync -> Tracking

Jede Website fragt einzeln. Consent-Strings werden zwischen Domains synchronisiert. Das TCF-Framework ist so komplex, dass die meisten Implementierungen fehlerhaft sind. Dark Patterns sind die Regel, nicht die Ausnahme.

Künftiger Stand: Zentralisierte Präferenz

Browser-Einstellung -> GPC/ADPC-Header -> Website muss akzeptieren

Global Privacy Control (GPC) ist das Signal. Ein HTTP-Header, ein JavaScript-Property. Fertig.

// So einfach könnte es sein
const gpcEnabled = navigator.globalPrivacyControl;

if (gpcEnabled) {
  disableAllTracking();
} else {
  showConsentBanner();
}

Der HTTP-Header:

Sec-GPC: 1

Das war’s. Technisch trivial. Politisch ein Minenfeld.

Das Chrome-Problem

BrowserGPC-SupportMarktanteil DE
ChromeNein~48%
SafariTeilweise~20%
FirefoxJa~6%
EdgeNein~5%
BraveJa~2%

Chrome hat keinen GPC-Support. Chrome gehört Google. Google verdient Geld mit Tracking.

Wenn die Hälfte aller Browser das Signal nicht senden, ist das Signal wertlos. Das ist kein Bug, das ist ein Feature – für Google.

Was Sie trotzdem tun sollten: GPC implementieren. Für die Nutzer, die sich bewusst für einen Browser mit Privacy-Features entschieden haben. Die haben es verdient, dass ihre Entscheidung respektiert wird.

2. Server-Side Tracking: Die Hintertür

Die Reform zielt auf Client-Side Tracking. Cookies im Browser, localStorage, Fingerprinting. Server-Side Tracking? Fällt in eine Grauzone, die groß genug ist, um einen LKW durchzufahren.

Der Unterschied

Client-Side (wird eingeschränkt):

// Im Browser des Nutzers
gtag("config", "GA_MEASUREMENT_ID");
fbq("track", "PageView");

Server-Side (bleibt weitgehend frei):

// Auf Ihrem Server
fetch("https://www.google-analytics.com/mp/collect", {
  method: "POST",
  body: JSON.stringify({
    client_id: generatePseudonymousId(),
    events: [{ name: "page_view" }]
  })
});

Gleiche Daten, anderer Weg. Der Nutzer sieht nichts davon. Der Adblocker blockiert nichts. Das Cookie-Banner? Optional.

Klartext: Server-Side Tracking ist die Methode, mit der die Industrie die neuen Regeln umgehen wird. Das ist legal. Ob es ethisch ist, steht auf einem anderen Blatt.

Eine ausführliche Einführung gibt es im Artikel Google Tag Gateway vs. Cloudflare Zaraz.

Server-Side Setup: GA4 Measurement Protocol

// server/analytics.ts
import { createHash } from "crypto";

interface TrackingEvent {
  name: string;
  params?: Record<string, unknown>;
}

export async function trackServerSide(
  event: TrackingEvent,
  userAgent: string,
  ipAddress: string
) {
  // Pseudonymisierte Client-ID
  const clientId = createHash("sha256")
    .update(ipAddress + userAgent)
    .digest("hex")
    .substring(0, 16);

  await fetch(
    `https://www.google-analytics.com/mp/collect?measurement_id=${MEASUREMENT_ID}&api_secret=${API_SECRET}`,
    {
      method: "POST",
      body: JSON.stringify({
        client_id: clientId,
        events: [event],
      }),
    }
  );
}

Was Sie bekommen:

  • Kein JavaScript im Browser
  • Adblocker-resistent
  • Mehr Kontrolle über gesendete Daten

Was Sie verlieren:

  • Einfachheit (Server-Infrastruktur nötig)
  • Cross-Device-Attribution (ohne Login unmöglich)
  • Session-Tracking (komplizierter)

GTM Server Container

# docker-compose.yml
services:
  gtm-server:
    image: gcr.io/cloud-tagging-10302018/gtm-cloud-image:stable
    environment:
      - CONTAINER_CONFIG=${GTM_SERVER_CONTAINER_CONFIG}
    ports:
      - "8080:8080"

Läuft. Aber: Sie brauchen Infrastruktur, Sie brauchen DevOps-Know-how, Sie brauchen Budget. Wer das nicht hat, verliert gegen die, die es haben.

3. CMP-Umbau: Von TCF zu GPC

Aktuell: TCF-Komplexität, die niemand versteht

// Das versteht kein normaler Mensch
window.__tcfapi("getTCData", 2, (tcData, success) => {
  if (tcData.purpose.consents[1]) {
    // Purpose 1: Store/access info on device
    enableBasicTracking();
  }
  if (tcData.purpose.consents[4]) {
    // Purpose 4: Select personalised ads
    enablePersonalizedAds();
  }
});

10 Purposes, hunderte Vendors, Consent-Strings die aussehen wie Base64-Müll. Das TCF-Framework ist ein Monument der Überregulierung, das paradoxerweise fast niemand korrekt implementiert.

Künftig: GPC-First

function initConsent() {
  // 1. Browser-Signal prüfen
  if (navigator.globalPrivacyControl) {
    return { mode: "opt-out", source: "browser" };
  }

  // 2. Gespeicherte Präferenz
  const stored = localStorage.getItem("consent");
  if (stored) {
    return JSON.parse(stored);
  }

  // 3. Fallback: Minimaler Banner
  return showMinimalConsentUI();
}

Einfacher. Klarer. Und: Browser-Signal hat Vorrang. Keine Dark Patterns, die es überschreiben.

CMP-Anbieter

AnbieterGPC-SupportMeine Einschätzung
CookiebotJaSolide, teuer
OneTrustTeilweiseEnterprise-Overkill
UsercentricsJaGut für DE-Markt
KlaroJaOpen Source, flexibel

Empfehlung: Klaro. Open Source, Sie haben die Kontrolle, keine Vendor-Lock-in-Probleme wenn sich die Regulierung ändert. Und sie ändert sich. Ständig.

Die Reform erlaubt bestimmte Analysen ohne Einwilligung. Klingt gut. Die Bedingungen sind streng.

Was erlaubt sein könnte

1. Aggregierte Reichweitenmessung

// Erlaubt: Anonyme Zähler
await redis.incr(`pageviews:${today}:${pathname}`);

// NICHT erlaubt: User-Journey
trackUserAcrossPages(visitorId); // Nein

2. Fehleranalyse ohne User-Daten

Sentry.init({
  beforeSend(event) {
    delete event.user;
    delete event.request?.cookies;
    return event;
  },
});

3. Sicherheit (Bot-Detection, Rate-Limiting)

const fingerprint = hashWithoutPII(req.headers);
await rateLimiter.check(fingerprint);

Privacy-First Analytics

Wenn Sie nur wissen wollen, wie viele Menschen Ihre Website besuchen und welche Seiten funktionieren – brauchen Sie Google Analytics nicht.

Plausible (EU-hosted):

<script defer data-domain="your-domain.com"
  src="https://plausible.io/js/script.js"></script>

Keine Cookies. Keine personenbezogenen Daten. EU-Server. Wahrscheinlich consent-frei nutzbar.

Umami (Self-hosted):

import Umami from "@umami/node";

const umami = new Umami({
  hostUrl: "https://analytics.your-domain.com",
  websiteId: "xxx",
});

await umami.track("pageview", { url: "/products" });

Komplett eigene Infrastruktur. Keine Daten verlassen Ihren Server. Sie wissen was passiert, weil Sie den Code kontrollieren.

Meine Empfehlung: Testen Sie Plausible oder Umami. Für die meisten Websites reicht das. Und Sie sparen sich den ganzen Consent-Zirkus.

5. Pseudonyme Daten: Die neue Grauzone

Aktuelle Interpretation

IP-Adresse = personenbezogen (immer)
Cookie-ID = personenbezogen (meist)
Device Fingerprint = personenbezogen (meist)
Hashed Email = personenbezogen (immer)

Künftige Interpretation

IP-Adresse (gekürzt) = vielleicht nicht personenbezogen
Aggregierte Daten = nicht personenbezogen
Pseudonyme ID (nicht rückverfolgbar) = kommt drauf an

Die Reform weicht die Definitionen auf. Was heute eindeutig personenbezogen ist, könnte morgen in einer Grauzone landen. Praktisch für die Tracking-Industrie. Weniger praktisch für Nutzer, die dachten, ihre Daten wären geschützt.

Privacy by Design: So machen Sie es richtig

/**
 * Erzeugt eine nicht-rückverfolgbare Session-ID
 * Rotiert täglich, keine Persistenz
 */
export function createEphemeralId(
  ip: string,
  userAgent: string,
  dailySalt: string
): string {
  const hash = createHash("sha256")
    .update(ip.split(".").slice(0, 2).join(".")) // Nur /16 Subnet
    .update(userAgent.substring(0, 50)) // Gekürzt
    .update(dailySalt) // Tägliche Rotation
    .digest("hex")
    .substring(0, 12);

  return hash;
}

Wichtig: Das ist eine technische Lösung, keine rechtliche Absolution. Ob es reicht, entscheiden am Ende Gerichte – nicht Entwickler.

6. KI-Training: Von Opt-in zu Opt-out

Aktuell

if (user.consent.includes("ai_training")) {
  await addToTrainingDataset(userData);
}

Künftig

if (!user.optOuts.includes("ai_training")) {
  await addToTrainingDataset(anonymizedData);
}

Der Unterschied: Heute müssen Nutzer aktiv zustimmen. Künftig müssen sie aktiv widersprechen. Wer nicht widerspricht, ist dabei.

Das ist praktisch für jeden, der KI-Modelle trainieren will. Weniger praktisch für Nutzer, die nicht wissen, dass sie widersprechen müssten.

Opt-out implementieren

export async function POST(req: Request) {
  const { userId } = await req.json();

  await db.user.update({
    where: { id: userId },
    data: { aiTrainingOptOut: true },
  });

  // Aus Datasets entfernen - wenn möglich
  await removeFromTrainingQueue(userId);

  await auditLog.create({
    action: "AI_TRAINING_OPT_OUT",
    userId,
    timestamp: new Date(),
  });

  return Response.json({ success: true });
}

Das Problem: Bei bereits trainierten Modellen ist “Entfernen” technisch kaum möglich. Machine Unlearning ist ein Forschungsgebiet, kein gelöstes Problem. Einmal drin, immer drin.

// consent-manager.ts

type ConsentLevel = "none" | "essential" | "analytics" | "marketing" | "all";

interface ConsentState {
  level: ConsentLevel;
  source: "browser" | "banner" | "default";
  timestamp: number;
}

export class ConsentManager {
  private state: ConsentState;

  constructor() {
    this.state = this.detectInitialState();
  }

  private detectInitialState(): ConsentState {
    // Browser-Signal hat Vorrang. Immer.
    if (navigator.globalPrivacyControl) {
      return {
        level: "essential",
        source: "browser",
        timestamp: Date.now(),
      };
    }

    const stored = localStorage.getItem("consent");
    if (stored) {
      return JSON.parse(stored);
    }

    return {
      level: "essential",
      source: "default",
      timestamp: Date.now(),
    };
  }

  canTrack(purpose: "analytics" | "marketing"): boolean {
    // GPC = kein Tracking. Punkt.
    if (this.state.source === "browser") {
      return false;
    }

    const levels: Record<ConsentLevel, string[]> = {
      none: [],
      essential: [],
      analytics: ["analytics"],
      marketing: ["analytics", "marketing"],
      all: ["analytics", "marketing"],
    };

    return levels[this.state.level].includes(purpose);
  }
}

Integration

const consent = new ConsentManager();

if (consent.canTrack("analytics")) {
  gtag("config", "GA_MEASUREMENT_ID");
} else {
  // Privacy-preserving Fallback
  trackServerSide({ name: "page_view" });
}

if (consent.canTrack("marketing")) {
  fbq("track", "PageView");
}

8. Was Sie jetzt tun sollten

Sofort

  1. GPC-Detection einbauen – 20 Zeilen Code, respektiert Browser-Entscheidungen
  2. Cookie-Audit – Was setzen Sie wirklich? Was brauchen Sie wirklich?
  3. CMP prüfen – Kann Ihr Tool GPC? Wenn nicht: wechseln

Bald

  1. Server-Side Analytics testen – GA4 Measurement Protocol oder Alternativen
  2. Privacy-first Tools evaluieren – Plausible, Umami, Fathom
  3. First-Party Data aufbauen – Logins, Newsletter, eigene Daten

Dokumentation

  1. Datenschutzerklärung vorbereiten – neue Rechtsgrundlagen kommen
  2. Technische Doku – was geht wohin, warum
  3. Verarbeitungsverzeichnis – aktuell halten

Was das bedeutet

Die EU-Datenschutzreform ist keine technische Revolution. Die meisten Änderungen sind evolutionär. GPC ist seit Jahren spezifiziert. Server-Side Tracking existiert längst. Privacy-first Analytics gibt es schon.

Was sich ändert: Die Pflichten. Browser-Signale müssen respektiert werden. Cookie-Banner werden in vielen Fällen optional. Server-Side wird zum Standard.

Die unbequeme Wahrheit: Wer heute schon datenschutzfreundlich arbeitet, muss wenig ändern. Wer auf Dark Patterns, Third-Party-Cookies und Client-Side-Chaos gesetzt hat, wird Arbeit haben.

Das ist keine Strafe. Das ist die Konsequenz.


Quellen

Stand: November 2025 – Der “Digitale Omnibus” ist noch in Verhandlung. Der Code hier funktioniert trotzdem.