LW IT Solutions
« Blog Overview /Digital Analytics/Tutorials / First-Party Cookie Enrichment via Cloudflare Workers
This post in other languages:

First-Party Cookie Enrichment via Cloudflare Workers

First-Party Cookie Enrichment via Cloudflare Workers
Inhalt
  1. 1. Architektonische Mechanik von Safari ITP und Firefox ETP
  2. 2. Schritt-für-Schritt-Konfiguration des Cloudflare Worker Edge Proxys
  3. 3. Schritt-für-Schritt-Integration mit Google Analytics 4 & GTM
  4. 4. Zusammenfassung & Mehrwert
  5. Quellen

Moderne Datenschutzmechanismen in Webbrowsern, insbesondere Apple Safari Intelligent Tracking Prevention (ITP) und Mozilla Firefox Enhanced Tracking Protection (ETP), erzwingen strikte Laufzeitbegrenzungen für clientseitig gespeicherte Identifikatoren. Jeder HTTP-Cookie, der per JavaScript über document.cookie erzeugt wird, wird automatisch auf eine maximale Lebensdauer von 7 Tagen beschränkt – oder auf nur 24 Stunden verkürzt, sofern der Nutzerverkehr über bekannte Werbeklick-Parameter oder Weiterleitungsdomains eintrifft. Diese Einschränkung beeinträchtigt Multi-Touch-Attributionsmodelle, Customer-Lifetime-Value-Berechnungen (LTV) und die Wiedererkennung bestehender Nutzer in Google Analytics 4 (GA4) erheblich. Der Betrieb eines First-Party Cookie Enrichment Proxys über Cloudflare Workers auf der primären Domain-Infrastruktur wandelt clientseitige Identifikatoren in sichere, serverseitige HTTP-only-Header um, wodurch die Lebensdauer der Cookies auf bis zu zwei volle Jahre (730 Tage) verlängert wird.

1. Architektonische Mechanik von Safari ITP und Firefox ETP

Um clientseitige Löschfristen ohne Verletzung von Domain-Grenzen zu umgehen, müssen Tracking-Architekturen HTTP-Response-Header nutzen, die vom autoritativen First-Party-Hostname gesendet werden. Das Restriktionsmodell der Browser operiert nach drei klaren Regeln:

  • Clientseitiges Limit (7 Tage / 24 Stunden): Cookies, die über browserseitiges JavaScript gesetzt werden (wie GA4 _ga– und _ga_XXXXXXXXXX-Cookies), werden durch WebKit-Speicherrichtlinien rigoros gekürzt.
  • CNAME-Cloaking-Erkennung: Tracking-Endpunkte von Drittanbietern, die per einfachem CNAME-DNS-Eintrag auf Subdomains gemappt sind, werden von Browser-Heuristiken erkannt und unterliegen ebenfalls der 7-Tage-Löschung.
  • Same-Site-Edge-Ausnahme: Cookies, die über einen HTTP-Set-Cookie-Header von einem Server ausgegeben werden, der direkt auf dem primären E-Commerce-Hostname läuft (z. B. über Cloudflare-Worker-Routen wie www.example.com/edge-cookie), gelten als echte serverseitige First-Party-Speicherung und sind von ITP-Löschfristen ausgenommen.
Drei Schichten vom Browser über die Cloudflare-Edge bis zum Origin, mit dem Unterschied zwischen clientseitig und an der Edge gesetztem Cookie
Die Schicht entscheidet, nicht die Domain: Dasselbe Cookie bekommt vom Browser sieben Tage und von der Edge seine volle Lebensdauer, weil der Worker es in der HTTP-Antwort setzt.

2. Schritt-für-Schritt-Konfiguration des Cloudflare Worker Edge Proxys

Die Implementierung eines Edge-Enrichment-Proxys erfordert das Bereitstellen eines serverseitigen Skripts, das eingehende Browser-Anfragen abfängt, vorhandene Analytics-IDs ausliest und diese über HTTP-Header erneuert:

  1. Initialisierung des Wrangler- & Worker-Projekts: Erstellung eines neuen Worker-Skripts über das Cloudflare Wrangler CLI oder Eröffnung eines leeren Services im Cloudflare Workers & Pages Dashboard.
  2. Zuweisung der Custom Route: Konfiguration einer First-Party-Route auf dem primären Hostnamen, unter welcher der Worker ausgeführt wird (z. B. https://www.example.com/fp-cookie-enrichment*).
  3. Cookie-Extraktion & Header-Injektion: Programmierung des Workers, um eingehende HTTP-Request-Header auf bestehende _ga– und Marketing-Identifikatoren zu analysieren, deren Gültigkeit zu erneuern und einen Set-Cookie-Header mit den Attributen Secure, SameSite=Lax und Max-Age=63072000 (zwei Jahre) zurückzusenden.

Produktionsreifes TypeScript-Worker-Skript

export default {
  async fetch(request: Request): Promise<Response> {
    const url = new URL(request.url);

    // Nur Anfragen verarbeiten, die an den dedizierten Enrichment-Endpunkt gerichtet sind
    if (url.pathname !== '/fp-cookie-enrichment') {
      return fetch(request);
    }

    const cookieHeader = request.headers.get('Cookie') || '';
    const gaCookieMatch = cookieHeader.match(/(?:^|;\s*)_ga=([^;]*)/);
    
    // Bestehende GA4 Client-ID extrahieren oder eine Ersatz-ID generieren
    const gaClientId = gaCookieMatch ? gaCookieMatch[1] : 'GA1.1.' + Math.floor(Math.random() * 1e9) + '.' + Math.floor(Date.now() / 1000);

    const response = new Response(JSON.stringify({ status: 'enriched', clientId: gaClientId }), {
      status: 200,
      headers: {
        'Content-Type': 'application/json',
        'Access-Control-Allow-Origin': 'https://' + url.hostname,
        'Access-Control-Allow-Credentials': 'true'
      }
    });

    // Setzen des First-Party HTTP-Headers mit 2 Jahren Lebensdauer (730 Tage = 63072000 Sekunden)
    response.headers.append(
      'Set-Cookie',
      `_ga=${gaClientId}; Max-Age=63072000; Path=/; Domain=${url.hostname}; Secure; SameSite=Lax`
    );

    return response;
  }
};

3. Schritt-für-Schritt-Integration mit Google Analytics 4 & GTM

Um sicherzustellen, dass der Google Tag Manager (GTM) den vom Server erneuerten Identifikator verwendet, ohne ihn durch clientseitiges JavaScript zu überschreiben, muss die Konfiguration des Tracking-Containers angepasst werden:

  1. Asynchroner Endpunkt-Aufruf: Innerhalb des Frontend-Applikationscodes oder über ein Custom-HTML-Tag im GTM bei Initialisierung wird ein asynchroner fetch()-Aufruf an /fp-cookie-enrichment mit aktivierten Credentials (credentials: 'include') ausgeführt.
  2. Deaktivierung der Cookie-Überschreibung: Im GA4-Konfigurations-Tag (oder Google Tag) wird der Parameter cookie_update auf false gesetzt. Dies verhindert, dass das clientseitige Browser-Skript den serverseitigen Zeitstempel durch ein 7-Tage-Ablaufdatum überschreibt.
  3. Serverseitige GTM-Weiterleitung: Bei Verwendung eines Server-Side GTM (ssGTM) Containers wird der Custom-Hostname in dieselbe Cloudflare-Zone gemappt, sodass eingehende Event-Payloads das angereicherte Zwei-Jahres-Cookie automatisch erben.

4. Zusammenfassung & Mehrwert

Was sich damit erreichen lässt: Die erfolgreiche Implementierung eines serverlosen Cloudflare-Worker-Proxys auf dem primären Hostnamen, welcher Google-Analytics-4- und Marketing-Cookies abfängt, umschreibt und per serverseitigem HTTP-Header verlängert.

Resultierender Mehrwert: Das Tracking wird unempfindlich gegenüber den 7-tägigen und 24-stündigen Löschfristen von Safari ITP und Firefox ETP. Die Sitzungskontinuität und die Wiedererkennung von Nutzern bleiben über einen Zeitraum von bis zu zwei Jahren erhalten. Dadurch wird die Präzision langfristiger Customer-Journey-Analysen, von Multi-Touch-Attributionsmodellen und ROAS-Berechnungen drastisch erhöht – vollständig ohne den Einsatz invasiver Drittanbieter-Fingerprinting-Methoden.

Lukas Wojcik

Lukas Wojcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Get in Touch

Briefly describe your project or inquiry for a tailored response. This site is protected by reCAPTCHA.

Kommentar schreiben

Die E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind mit einem Stern versehen.

ALL ARTICLES & CATEGORIES

CCTV

Diese Rubrik per RSS verfolgen

Cloud & AI

Diese Rubrik per RSS verfolgen

Data Privacy

Alle 12 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Digital Analytics

Alle 45 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Digital Marketing

Alle 25 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

IT & Networks

Alle 15 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Raspberry Pi

Diese Rubrik per RSS verfolgen

Smart Home

Alle 13 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Web Entwicklung

Diese Rubrik per RSS verfolgen

WordPress-Plugins & Tricks

Diese Rubrik per RSS verfolgen