LW IT Solutions
« Blog Overview /Digital Analytics/Tutorials / Wzbogacanie plików cookie First-Party za pomocą Cloudflare...
This post in other languages:

Wzbogacanie plików cookie First-Party za pomocą Cloudflare Workers

Wzbogacanie plików cookie First-Party za pomocą Cloudflare Workers
Spis treści
  1. 1. Mechanika działania mechanizmów Safari ITP oraz Firefox ETP
  2. 2. Konfiguracja pośrednika Cloudflare Worker krok po kroku
  3. 3. Integracja z Google Analytics 4 oraz GTM krok po kroku
  4. 4. Podsumowanie i wartość architektoniczna
  5. Źródła

Nowoczesne mechanizmy ochrony prywatności w przeglądarkach internetowych, w szczególności Apple Safari Intelligent Tracking Prevention (ITP) oraz Mozilla Firefox Enhanced Tracking Protection (ETP), narzucają rygorystyczne limity czasowe dla trwałości danych przechowywanych po stronie klienta. Każdy plik cookie HTTP utworzony za pomocą kodu JavaScript z wykorzystaniem interfejsu document.cookie jest automatycznie ograniczany do maksymalnego okresu ważności wynoszącego 7 dni – lub redukowany do zaledwie 24 godzin, jeśli ruch pochodzi ze znanych parametrów reklamowych lub domen przekierowujących.

Ograniczenie to drastycznie obniża skuteczność modeli atrybucji wielokanałowej, analityki wartości klienta w czasie (LTV) oraz rozpoznawania powracających użytkowników w Google Analytics 4 (GA4). Wdrożenie serwera pośredniczącego First-Party Cookie Enrichment za pomocą usługi Cloudflare Workers działającej na głównej domenie pozwala na przekształcenie identyfikatorów przeglądarkowych w bezpieczne nagłówki HTTP ustawiane przez serwer, co wydłuża czas życia plików cookie aż do dwóch pełnych lat (730 dni).

1. Mechanika działania mechanizmów Safari ITP oraz Firefox ETP

Ominięcie restrykcji czasowych przeglądarek bez naruszania zasad pierwszej strony (First-Party) wymaga wykorzystania nagłówków odpowiedzi HTTP emitowanych bezpośrednio przez autorytatywną domenę główną. System restrykcji opiera się na trzech zasadniczych regułach:

  • Limit po stronie klienta (7 dni / 24 godziny): Pliki cookie tworzone przez skrypty JavaScript (takie jak ciasteczka _ga oraz _ga_XXXXXXXXXX w GA4) są bezwzględnie skracane przez silnik WebKit.
  • Wykrywanie maskowania CNAME (CNAME Cloaking): Zewnętrzne punkty końcowe śledzenia mapowane za pomocą prostych rekordów DNS CNAME na subdomeny są identyfikowane przez heurystykę przeglądarek i objęte identycznym 7-dniowym limitem usuwania.
  • Wyłączenie dla krawędzi domeny (Same-Site Edge): Pliki cookie generowane za pomocą nagłówka HTTP Set-Cookie przez serwer działający w obrębie tej samej domeny głównej e-commerce (np. poprzez ścieżki Cloudflare Workers, takie jak www.example.com/edge-cookie) są klasyfikowane jako pełnoprawne dane serwerowe First-Party i pozostają zwolnione z restrykcji czasowych ITP.
Trzy warstwy od przeglądarki przez brzeg Cloudflare do origin, z różnicą między cookie ustawionym po stronie klienta a na brzegu
Decyduje warstwa, a nie domena: to samo cookie dostaje od przeglądarki siedem dni, a od brzegu pełny czas życia, bo Worker ustawia je w odpowiedzi HTTP.

2. Konfiguracja pośrednika Cloudflare Worker krok po kroku

Wdrożenie systemu enrichmentu na krawędzi sieci wymaga uruchomienia bezserwerowego skryptu, który przechwytuje żądania przeglądarki, odczytuje istniejące identyfikatory analityczne i odświeża je za pomocą nagłówków HTTP:

  1. Inicjalizacja projektu Wrangler i Worker: Utworzenie nowego skryptu Worker przy użyciu interfejsu wiersza poleceń Cloudflare Wrangler lub utworzenie puste usługi bezpośrednio w panelu administracyjnym Cloudflare Workers & Pages.
  2. Przypisanie trasy niestandardowej (Custom Route): Zdefiniowanie trasy w podkatalogu domeny głównej, pod którą wykonywany będzie skrypt (np. https://www.example.com/fp-cookie-enrichment*).
  3. Ekstrakcja ciasteczek i wstrzykiwanie nagłówka: Zaprogramowanie skryptu Worker tak, aby analizował nagłówki przychodzących żądań HTTP pod kątem obecności ciasteczek _ga, aktualizował ich datę wygaśnięcia i zwracał nagłówek Set-Cookie z atrybutami Secure, SameSite=Lax oraz instrukcją Max-Age=63072000 (dwa lata).

Produkcyjny skrypt w języku TypeScript dla Cloudflare Workers

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

    // Przetwarzanie wyłącznie żądań skierowanych do dedykowanego punktu końcowego
    if (url.pathname !== '/fp-cookie-enrichment') {
      return fetch(request);
    }

    const cookieHeader = request.headers.get('Cookie') || '';
    const gaCookieMatch = cookieHeader.match(/(?:^|;\s*)_ga=([^;]*)/);
    
    // Ekstrakcja obecnego identyfikatora klienta GA4 lub wygenerowanie wartości zastępczej
    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'
      }
    });

    // Ustawienie nagłówka First-Party HTTP z dwuletnim okresem ważności (730 dni = 63072000 sekund)
    response.headers.append(
      'Set-Cookie',
      `_ga=${gaClientId}; Max-Age=63072000; Path=/; Domain=${url.hostname}; Secure; SameSite=Lax`
    );

    return response;
  }
};

3. Integracja z Google Analytics 4 oraz GTM krok po kroku

Aby zagwarantować, że Google Tag Manager (GTM) korzysta z identyfikatora odświeżonego przez serwer, bez nadpisywania go przez skrypty JavaScript po stronie klienta, należy zaktualizować konfigurację kontenera śledzącego:

  1. Wywołanie asynchroniczne punktu końcowego: W kodzie aplikacji frontendowej lub za pomocą tagu Custom HTML w GTM uruchamianego przy inicjalizacji, należy wywołać asynchroniczne zapytanie fetch() do ścieżki /fp-cookie-enrichment z uwzględnieniem poświadczeń (credentials: 'include').
  2. Zablokowanie nadpisywania plików cookie: W tagu konfiguracyjnym GA4 (lub w Google Tag) należy ustawić parametr cookie_update na wartość false. Zapobiega to zastępowaniu dwuletniego nagłówka serwerowego przez 7-dniowy znacznik czasu wygenerowany w przeglądarce.
  3. Przekierowanie do Server-Side GTM: W przypadku korzystania z kontenera Server-Side GTM (ssGTM), podpięcie niestandardowej nazwy hosta pod tę samą strefę Cloudflare sprawia, że przychodzące zdarzenia automatycznie dziedziczą odświeżony, dwuletni plik cookie First-Party.

4. Podsumowanie i wartość architektoniczna

Co da się osiągnąć dzięki temu poradnikowi: Wdrożenie bezserwerowego punktu pośredniczącego w usłudze Cloudflare Workers działającego w domenie głównej, który przechwytuje, modyfikuje i wydłuża ważność plików cookie Google Analytics 4 oraz systemów marketingowych za pomocą serwerowych nagłówków HTTP.

Wynikająca z tego wartość: System analityczny staje się całkowicie odporny na 7-dniowe oraz 24-godzinne limity usuwania ciasteczek narzucane przez mechanizmy Safari ITP oraz Firefox ETP. Ciągłość sesji oraz identyfikacja powracających użytkowników są utrzymywane przez okres do dwóch lat, co radykalnie poprawia dokładność długoterminowych analiz ścieżek zakupowych, wielokanałowych modeli atrybucji i obliczeń ROAS – bez konieczności stosowania inwazyjnego fingerprintingu.

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.

Napisanie komentarza

Adres e-mail nie jest publikowany. Pola obowiązkowe oznaczono gwiazdką.

ALL ARTICLES & CATEGORIES

CCTV

Śledź tę kategorię przez RSS

Cloud & AI

Śledź tę kategorię przez RSS

Data Privacy

Wszystkie artykuły w tej kategorii (12) Śledź tę kategorię przez RSS

Digital Analytics

Wszystkie artykuły w tej kategorii (45) Śledź tę kategorię przez RSS

Digital Marketing

Wszystkie artykuły w tej kategorii (25) Śledź tę kategorię przez RSS

IT & Networks

Wszystkie artykuły w tej kategorii (15) Śledź tę kategorię przez RSS

Raspberry Pi

Śledź tę kategorię przez RSS

Smart Home

Wszystkie artykuły w tej kategorii (13) Śledź tę kategorię przez RSS

Tworzenie stron internetowych

Śledź tę kategorię przez RSS

Wtyczki i triki WordPress

Śledź tę kategorię przez RSS