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

Spis treści
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
_gaoraz_ga_XXXXXXXXXXw 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-Cookieprzez serwer działający w obrębie tej samej domeny głównej e-commerce (np. poprzez ścieżki Cloudflare Workers, takie jakwww.example.com/edge-cookie) są klasyfikowane jako pełnoprawne dane serwerowe First-Party i pozostają zwolnione z restrykcji czasowych ITP.
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:
- 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.
- 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*). - 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łówekSet-Cookiez atrybutamiSecure,SameSite=Laxoraz 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:
- 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-enrichmentz uwzględnieniem poświadczeń (credentials: 'include'). - Zablokowanie nadpisywania plików cookie: W tagu konfiguracyjnym GA4 (lub w Google Tag) należy ustawić parametr
cookie_updatena wartośćfalse. Zapobiega to zastępowaniu dwuletniego nagłówka serwerowego przez 7-dniowy znacznik czasu wygenerowany w przeglądarce. - 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.