{"id":523,"date":"2026-10-02T17:15:00","date_gmt":"2026-10-02T15:15:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/?page_id=523"},"modified":"2026-09-25T15:07:51","modified_gmt":"2026-09-25T13:07:51","slug":"cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/data-privacy-pl\/tutorials-pl-data-privacy-pl\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\/","title":{"rendered":"Cookieless Tracking Fallbacks: Syntetyczne zszywanie sesji po stronie serwera"},"content":{"rendered":"<h2>Przegl\u0105d architektury: Dylemat odrzucenia ciasteczek w analityce internetowej<\/h2>\n<p>We wsp\u00f3\u0142czesnej analityce internetowej banery zg\u00f3d (CMP) powoduj\u0105 powstawanie znacz\u0105cych luk pomiarowych. Gdy u\u017cytkownicy odrzucaj\u0105 ciasteczka \u015bledz\u0105ce lub korzystaj\u0105 z przegl\u0105darek wymuszaj\u0105cych agresywne mechanizmy Intelligent Tracking Prevention (ITP), tradycyjne identyfikatory po stronie klienta, takie jak <code>_ga<\/code>, <code>_gid<\/code> czy identyfikatory odwiedzaj\u0105cych w Matomo, s\u0105 blokowane lub usuwane. W konsekwencji ka\u017cde wy\u015bwietlenie strony przez u\u017cytkownika bez zgody jest rejestrowane jako pojedyncza, izolowana sesja, co czyni statystyczne analizy \u015bcie\u017cek konwersji, modele atrybucji oraz podr\u00f3\u017ce u\u017cytkownika ca\u0142kowicie nieprzydatnymi.<\/p>\n<p>W celu przywr\u00f3cenia ci\u0105g\u0142o\u015bci analitycznej bez naruszania przepis\u00f3w RODO, dyrektywy ePrivacy oraz regulacji krajowych, mo\u017cliwe jest wdro\u017cenie <strong>syntetycznego zszywania sesji po stronie serwera (Server-Side Synthetic Session Stitching)<\/strong>. W odr\u00f3\u017cnieniu od trwa\u0142ego \u015bledzenia cross-site lub fingerprintingu, syntetyczne zszywanie dzia\u0142a wy\u0142\u0105cznie w warstwie serwera proxy lub przetwarzania brzegowego (np. Server-Side GTM, Cloudflare Workers lub w\u0142asne punkty ko\u0144cowe PHP\/Node.js). Poprzez obliczanie ulotnego, rotowanego codziennie skr\u00f3tu kryptograficznego z nieutrwalanych atrybut\u00f3w sieciowych \u2013 takich jak skr\u00f3cona podsie\u0107 IP, User-Agent oraz generowany na serwerze dzienny salt \u2013 sesje mog\u0105 by\u0107 precyzyjnie odtwarzane dla cel\u00f3w statystycznych bez zapisywania jakichkolwiek danych na urz\u0105dzeniu ko\u0144cowym.<\/p>\n<figure class=\"lw-diagram\">\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/cookieless-syntetyczne-zszywanie-sesji-pl.png\" width=\"1120\" height=\"540\" alt=\"Tworzenie syntetycznego identyfikatora sesji ze skr\u00f3conego IP, User-Agenta, Accept-Language i codziennie rotowanej soli przez SHA-256\"><figcaption>Droga syntetycznego identyfikatora: skr\u00f3cone IP, dwa stabilne nag\u0142\u00f3wki i dzienna s\u00f3l s\u0105 haszowane do ID sesji. W przegl\u0105darce nic nie jest zapisywane \u2014 a po rotacji soli identyfikatora z poprzedniego dnia nie da si\u0119 odtworzy\u0107.<\/figcaption><\/figure>\n<h2>Instrukcja wdro\u017cenia krok po kroku<\/h2>\n<h3>Krok 1: Podstawy generowania ulotnych, zgodnych z prywatno\u015bci\u0105 skr\u00f3t\u00f3w (Hash)<\/h3>\n<p>Utworzenie zgodnego z RODO syntetycznego identyfikatora sesji wymaga zastosowania trzech fundament\u00f3w architektonicznych:<\/p>\n<ol>\n<li><strong>Skracanie podsieci IP:<\/strong> Pe\u0142ny adres IP nigdy nie mo\u017ce by\u0107 poddawany bezpo\u015bredniemu haszowaniu, gdy\u017c nadal stanowi dan\u0105 osobow\u0105. Adresy IPv4 musz\u0105 by\u0107 maskowane do podsieci <code>\/24<\/code> (np. <code>192.0.2.0<\/code>), a adresy IPv6 do podsieci <code>\/48<\/code>.<\/li>\n<li><strong>Dynamiczny dzienny Salt:<\/strong> Kryptograficzny, losowy ci\u0105g (salt) musi by\u0107 generowany po stronie serwera i automatycznie rotowany najp\u00f3\u017aniej o p\u00f3\u0142nocy (UTC). Gwarantuje to, \u017ce wszystkie skr\u00f3ty wygasaj\u0105 bezpowrotnie najp\u00f3\u017aniej po 24 godzinach, co uniemo\u017cliwia wielodniowe profilowanie u\u017cytkownik\u00f3w.<\/li>\n<li><strong>Jednokierunkowe szyfrowanie:<\/strong> Po\u0142\u0105czone atrybuty sieciowe musz\u0105 by\u0107 przetwarzane za pomoc\u0105 nieodwracalnego algorytmu haszuj\u0105cego, takiego jak SHA-256.<\/li>\n<\/ol>\n<h3>Krok 2: Projektowanie generatora skr\u00f3t\u00f3w w Edge Worker \/ Server-Side GTM<\/h3>\n<p>Poni\u017csza implementacja produkcyjna w j\u0119zyku JavaScript pokazuje, w jaki spos\u00f3b wygenerowa\u0107 zgodny z prywatno\u015bci\u0105 syntetyczny identyfikator sesji jako zmienn\u0105 niestandardow\u0105 w Server-Side GTM lub w skrypcie Cloudflare Edge Worker bez wysy\u0142ania nag\u0142\u00f3wk\u00f3w HTTP <code>Set-Cookie<\/code>:<\/p>\n<pre><code>\/**\n * Generator syntetycznych skr\u00f3t\u00f3w sesji zgodny z prywatno\u015bci\u0105\n * Cel: Server-Side GTM \/ Edge Workers\n *\/\nconst crypto = require('crypto');\n\nfunction getSyntheticSessionId(requestHeaders, clientIp, dailySalt) {\n    \/\/ 1. Anonimizacja adresu IP (skr\u00f3cenie IPv4 do \/24 lub IPv6 do \/48)\n    let maskedIp = '0.0.0.0';\n    if (clientIp.includes('.')) {\n        maskedIp = clientIp.split('.').slice(0, 3).join('.') + '.0';\n    } else if (clientIp.includes(':')) {\n        maskedIp = clientIp.split(':').slice(0, 3).join(':') + '::';\n    }\n\n    \/\/ 2. Ekstrakcja stabilnych nag\u0142\u00f3wk\u00f3w \u015brodowiska przegl\u0105darki\n    const userAgent = requestHeaders['user-agent'] || 'unknown-ua';\n    const acceptLanguage = requestHeaders['accept-language'] || 'unknown-lang';\n\n    \/\/ 3. Budowa \u0142adunku wej\u015bciowego z rotowanym codziennie saltem\n    const rawPayload = `${maskedIp}|${userAgent}|${acceptLanguage}|${dailySalt}`;\n\n    \/\/ 4. Obliczenie skr\u00f3tu SHA-256\n    const syntheticHash = crypto\n        .createHash('sha256')\n        .update(rawPayload)\n        .digest('hex');\n\n    \/\/ Zwr\u00f3cenie skr\u00f3conego, 16-znakowego ulotnego ID\n    return 'syn_' + syntheticHash.substring(0, 16);\n}<\/code><\/pre>\n<h3>Krok 3: Integracja w kolektorze PHP WordPressa (functions.php)<\/h3>\n<p>W infrastrukturach opar\u0142ych na WordPressie v7.0.2, kt\u00f3re wykorzystuj\u0105 w\u0142asne punkty ko\u0144cowe REST API do gromadzenia danych, obliczanie syntetycznej sesji da si\u0119 zintegrowa\u0107 w pliku <code>functions.php<\/code> aktywnego motywu:<\/p>\n<pre><code>\/**\n * Narz\u0119dzie generowania syntetycznych skr\u00f3t\u00f3w sesji w PHP\n * Cel: WordPress v7.0.2\n *\/\nfunction lw_generate_synthetic_session_id() {\n    $client_ip = $_SERVER['REMOTE_ADDR'] ?? '127.0.0.1';\n    \n    \/\/ Maskowanie IPv4 do \/24\n    if ( strpos( $client_ip, '.' ) !== false ) {\n        $ip_parts  = explode( '.', $client_ip );\n        $ip_parts[3] = '0';\n        $masked_ip = implode( '.', $ip_parts );\n    } else {\n        \/\/ Maskowanie IPv6 do \/48\n        $ip_parts  = explode( ':', $client_ip );\n        $masked_ip = implode( ':', array_slice( $ip_parts, 0, 3 ) ) . '::';\n    }\n\n    $user_agent      = ( $_SERVER['HTTP_USER_AGENT'] ?? '' ) ?: 'unknown-ua';\r\n    $accept_language = ( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? '' ) ?: 'unknown-lang';\n    \n    \/\/ Pobranie lub utworzenie rotowanego codziennie salta z tabeli opcji\n    $daily_salt = get_transient( 'lw_daily_privacy_salt' );\n    if ( ! $daily_salt ) {\n        $daily_salt = wp_generate_password( 32, true, true );\n        \/\/ Wyga\u015bni\u0119cie salta o p\u00f3\u0142nocy UTC (sekundy pozosta\u0142e do ko\u0144ca doby UTC)\n        set_transient( 'lw_daily_privacy_salt', $daily_salt, DAY_IN_SECONDS - ( time() % DAY_IN_SECONDS ) );\n    }\n\n    $raw_payload = $masked_ip . '|' . $user_agent . '|' . $accept_language . '|' . $daily_salt;\n    $sha256_hash = hash( 'sha256', $raw_payload );\n\n    return 'syn_' . substr( $sha256_hash, 0, 16 );\n}<\/code><\/pre>\n<h3>Krok 4: Mapowanie syntetycznych ID na platformy analityczne<\/h3>\n<p>Po wygenerowaniu, ulotny identyfikator sesji musi zosta\u0107 przekazany do docelowej platformy analitycznej zamiast brakuj\u0105cego ciasteczka:<\/p>\n<ul>\n<li><strong>Google Analytics 4 (GA4):<\/strong> Mapowanie warto\u015bci na parametr <code>client_id<\/code> w Server-Side GTM przy jednoczesnym wymuszeniu parametru <code>non_personalized_ads=1<\/code> oraz usuni\u0119ciu nag\u0142\u00f3wk\u00f3w IP.<\/li>\n<li><strong>Matomo \/ Piwik PRO:<\/strong> Przypisanie skr\u00f3tu do w\u0142a\u015bciwo\u015bci identyfikatora odwiedzaj\u0105cego po stronie serwera (<code>_id<\/code> lub <code>cid<\/code>) i w\u0142\u0105czenie trybu bezciasteczkowego (Cookieless Mode).<\/li>\n<li><strong>Eksporty surowych danych do BigQuery:<\/strong> Zapisywanie warto\u015bci w osobnej kolumnie (np. <code>synthetic_session_id<\/code>), co umo\u017cliwia modelowanie zapyta\u0144 SQL oddzielaj\u0105cych sesje ciasteczkowe od sesji zszywanych na serwerze.<\/li>\n<\/ul>\n<h3>Krok 5: Kontrola jako\u015bci i audyt zgodno\u015bci<\/h3>\n<p>W celu weryfikacji poprawno\u015bci i pe\u0142nej zgodno\u015bci prawnej mechanizmu syntetycznego zszywania sesji, nale\u017cy przeprowadzi\u0107 trzystopniow\u0105 procedur\u0119 testow\u0105:<\/p>\n<ol>\n<li><strong>Weryfikacja nag\u0142\u00f3wk\u00f3w sieciowych:<\/strong> Kontrola odpowiedzi serwera w narz\u0119dziach deweloperskich przegl\u0105darki (F12) potwierdzaj\u0105ca, \u017ce przy braku zgody nie s\u0105 wysy\u0142ane \u017cadne nag\u0142\u00f3wki HTTP <code>Set-Cookie<\/code>.<\/li>\n<li><strong>Testy stabilno\u015bci i kolizji:<\/strong> Symulacja zapyta\u0144 z identycznych zakres\u00f3w podsieci i potwierdzenie, \u017ce r\u00f3\u017cne nag\u0142\u00f3wki User-Agent generuj\u0105 osobne skr\u00f3ty, natomiast kolejne wy\u015bwietlenia z tej samej przegl\u0105darki zachowuj\u0105 ten sam identyfikator sesji.<\/li>\n<li><strong>Audyt wygasania salta o p\u00f3\u0142nocy:<\/strong> Wymuszenie wyga\u015bni\u0119cia dziennego salta i weryfikacja, czy wszystkie nowo generowane identyfikatory natychmiast ulegaj\u0105 zmianie, co dowodzi braku mo\u017cliwo\u015bci wielodniowego \u015bledzenia.<\/li>\n<\/ol>\n<h2>Podsumowanie i mierzalna warto\u015b\u0107 dodana<\/h2>\n<p><strong>Co da si\u0119 osi\u0105gn\u0105\u0107 dzi\u0119ki instrukcji:<\/strong> Ca\u0142kowite zast\u0105pienie pofragmentowanych, pojedynczych ods\u0142on w ruchu bez zgody na ciasteczka przez ulotny, serwerowy model rekonstrukcji sesji, dzia\u0142aj\u0105cy bez zapisywania ciasteczek i bez przetwarzania pe\u0142nych adres\u00f3w IP.<\/p>\n<p><strong>Wynikaj\u0105ca z tego warto\u015b\u0107 dodana:<\/strong><\/p>\n<ul>\n<li><strong>Przywr\u00f3cenie analityki \u015bcie\u017cek konwersji i lejk\u00f3w:<\/strong> Statystyczne wsp\u00f3\u0142czynniki konwersji, wska\u017aniki odrzuce\u0144 oraz wielokrokowe \u015bcie\u017cki nawigacji pozostaj\u0105 w przybli\u017ceniu mierzalne tak\u017ce dla wizyt bez zgody na ciasteczka.<\/li>\n<li><strong>Mniejsza ingerencja ni\u017c \u015bledzenie ciasteczkami, ale bez zwolnienia z RODO:<\/strong> Na urz\u0105dzeniu u\u017cytkownika nic nie jest zapisywane. Skr\u00f3t z podsieci i nag\u0142\u00f3wk\u00f3w przegl\u0105darki pozostaje jednak mimo dziennego salta dan\u0105 pseudonimizowan\u0105, a wi\u0119c nadal osobow\u0105 (motyw 26 RODO); jej przetwarzanie wymaga podstawy prawnej, a dopuszczalno\u015b\u0107 bez zgody wymaga oceny w ka\u017cdym przypadku z osobna.<\/li>\n<li><strong>Brak kontaminacji profili reklamowych:<\/strong> Dzi\u0119ki codziennemu wygasaniu identyfikator\u00f3w statystyczna dok\u0142adno\u015b\u0107 raport\u00f3w jest utrzymana bez wspierania inwazyjnego retargetingu i profilowania u\u017cytkownik\u00f3w.<\/li>\n<\/ul>\n<div class=\"lw-faq\">\n<h2>Pytania i odpowiedzi<\/h2>\n<h3>Na ile niezawodnie skr\u00f3t rozr\u00f3\u017cnia odwiedzaj\u0105cych, kt\u00f3rzy dziel\u0105 jedn\u0105 sie\u0107?<\/h3>\n<p>Tylko na tyle, na ile r\u00f3\u017cni\u0105 si\u0119 dane wej\u015bciowe. Skr\u00f3t \u0142\u0105czy wszystkie \u017c\u0105dania pochodz\u0105ce z tej samej podsieci \/24 i nios\u0105ce ten sam nag\u0142\u00f3wek User-Agent, a tak\u017ce ten sam Accept-Language. W sieci firmowej, w hotelowym Wi-Fi albo za NAT-em operatora kom\u00f3rkowego (carrier-grade NAT) wiele os\u00f3b dzieli jeden adres, a popularne urz\u0105dzenia z aktualn\u0105 przegl\u0105dark\u0105 cz\u0119sto wysy\u0142aj\u0105 identyczne ci\u0105gi User-Agent. Takie wizyty zlewaj\u0105 si\u0119 w jedn\u0105 syntetyczn\u0105 sesj\u0119. Chromium dodatkowo skr\u00f3ci\u0142 ci\u0105g User-Agent, wi\u0119c rozr\u00f3\u017cnia on mniej ni\u017c dawniej.<\/p>\n<p>Z kolei pojedyncza wizyta rozpada si\u0119, gdy dane wej\u015bciowe zmieniaj\u0105 si\u0119 po drodze: telefon przechodz\u0105cy z Wi-Fi do sieci kom\u00f3rkowej dostaje inn\u0105 podsie\u0107, a aktualizacja przegl\u0105darki zmienia User-Agent. W obu przypadkach w \u015brodku wizyty powstaje nowy identyfikator.<\/p>\n<p>Odtworzone sesje s\u0105 wi\u0119c oszacowaniem obarczonym b\u0142\u0119dami w obu kierunkach. Osobna kolumna w BigQuery, proponowana w artykule, pozwala analizowa\u0107 ten udzia\u0142 oddzielnie, na przyk\u0142ad zestawia\u0107 wsp\u00f3\u0142czynniki konwersji sesji z ciasteczkiem i bez niego, zamiast je miesza\u0107.<\/p>\n<h3>Dlaczego dziennego salta nie nale\u017cy zapisywa\u0107 ani umieszcza\u0107 w kopiach zapasowych?<\/h3>\n<p>Bo tylko on chroni skr\u00f3ty przed odwr\u00f3ceniem. Przestrze\u0144 mo\u017cliwych danych wej\u015bciowych jest ma\u0142a: istnieje zaledwie oko\u0142o 16,8 miliona podsieci IPv4 o rozmiarze \/24, a popularne ci\u0105gi User-Agent da si\u0119 wyliczy\u0107, wi\u0119c przy znanym salcie ka\u017cdy identyfikator z danego dnia da si\u0119 przypisa\u0107 do podsieci i przegl\u0105darki przez sprawdzanie kolejnych kombinacji. W przyk\u0142adzie w PHP salt le\u017cy w bazie danych jako transient, a je\u015bli nie dzia\u0142a trwa\u0142a pami\u0119\u0107 podr\u0119czna obiekt\u00f3w, w tabeli opcji, a wi\u0119c w ka\u017cdej kopii zapasowej bazy, gdzie przetrwa d\u0142u\u017cej ni\u017c sw\u00f3j dzie\u0144.<\/p>\n<\/div>\n<div class=\"lw-quellen\">\n<h2>\u0179r\u00f3d\u0142a<\/h2>\n<ul>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/server-side\" target=\"_blank\" rel=\"noopener noreferrer\">Server-side tagging overview<\/a><\/li>\n<li><a href=\"https:\/\/eur-lex.europa.eu\/eli\/reg\/2016\/679\/oj\" target=\"_blank\" rel=\"noopener noreferrer\">Regulation (EU) 2016\/679 (GDPR)<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Techniczny przewodnik po wdro\u017ceniu zgodnego z prywatno\u015bci\u0105 syntetycznego zszywania sesji w WordPressie v7.0.2 i Server-Side GTM bez ciasteczek i narusze\u0144 RODO.<\/p>\n","protected":false},"author":1,"featured_media":14075,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[124],"tags":[92166,92151,92247,92133,92136,92044],"class_list":["post-523","post","type-post","status-publish","format-standard","hentry","category-tutorials-pl-data-privacy-pl","tag-cookies-pl","tag-prywatnosc-danych-pl-pl","tag-gdpr-pl","tag-google-tag-manager-pl","tag-server-side-gtm-pl","tag-tracking-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Cookieless Tracking Fallbacks: Syntetyczne zszywanie sesji po stronie serwera | Lukas Wojcik<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/data-privacy-pl\/tutorials-pl-data-privacy-pl\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cookieless Tracking Fallbacks: Syntetyczne zszywanie sesji po stronie serwera | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Techniczny przewodnik po wdro\u017ceniu zgodnego z prywatno\u015bci\u0105 syntetycznego zszywania sesji w WordPressie v7.0.2 i Server-Side GTM bez ciasteczek i narusze\u0144 RODO.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/data-privacy-pl\/tutorials-pl-data-privacy-pl\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-02T15:15:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-523-cookieless-tracking-fallbacks-syntet-g.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/data-privacy-pl\\\/tutorials-pl-data-privacy-pl\\\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/data-privacy-pl\\\/tutorials-pl-data-privacy-pl\\\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Cookieless Tracking Fallbacks: Syntetyczne zszywanie sesji po stronie serwera\",\"datePublished\":\"2026-10-02T15:15:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/data-privacy-pl\\\/tutorials-pl-data-privacy-pl\\\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\\\/\"},\"wordCount\":1188,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/data-privacy-pl\\\/tutorials-pl-data-privacy-pl\\\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-523-cookieless-tracking-fallbacks-syntet-g.png\",\"keywords\":[\"Cookies\",\"Data Privacy\",\"GDPR\",\"Google Tag Manager\",\"Server-Side GTM\",\"Tracking\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/data-privacy-pl\\\/tutorials-pl-data-privacy-pl\\\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/data-privacy-pl\\\/tutorials-pl-data-privacy-pl\\\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/data-privacy-pl\\\/tutorials-pl-data-privacy-pl\\\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\\\/\",\"name\":\"Cookieless Tracking Fallbacks: Syntetyczne zszywanie sesji po stronie serwera | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/data-privacy-pl\\\/tutorials-pl-data-privacy-pl\\\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/data-privacy-pl\\\/tutorials-pl-data-privacy-pl\\\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-523-cookieless-tracking-fallbacks-syntet-g.png\",\"datePublished\":\"2026-10-02T15:15:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/data-privacy-pl\\\/tutorials-pl-data-privacy-pl\\\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/data-privacy-pl\\\/tutorials-pl-data-privacy-pl\\\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/data-privacy-pl\\\/tutorials-pl-data-privacy-pl\\\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-523-cookieless-tracking-fallbacks-syntet-g.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-523-cookieless-tracking-fallbacks-syntet-g.png\",\"width\":1200,\"height\":630,\"caption\":\"Cookieless Tracking Fallbacks: Syntetyczne zszywanie sesji po stronie serwera\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/data-privacy-pl\\\/tutorials-pl-data-privacy-pl\\\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cookieless Tracking Fallbacks: Syntetyczne zszywanie sesji po stronie serwera\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cookieless Tracking Fallbacks: Syntetyczne zszywanie sesji po stronie serwera | Lukas Wojcik","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/pl\/data-privacy-pl\/tutorials-pl-data-privacy-pl\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\/","og_locale":"en_US","og_type":"article","og_title":"Cookieless Tracking Fallbacks: Syntetyczne zszywanie sesji po stronie serwera | Lukas Wojcik","og_description":"Techniczny przewodnik po wdro\u017ceniu zgodnego z prywatno\u015bci\u0105 syntetycznego zszywania sesji w WordPressie v7.0.2 i Server-Side GTM bez ciasteczek i narusze\u0144 RODO.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/data-privacy-pl\/tutorials-pl-data-privacy-pl\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-10-02T15:15:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-523-cookieless-tracking-fallbacks-syntet-g.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/data-privacy-pl\/tutorials-pl-data-privacy-pl\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/data-privacy-pl\/tutorials-pl-data-privacy-pl\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Cookieless Tracking Fallbacks: Syntetyczne zszywanie sesji po stronie serwera","datePublished":"2026-10-02T15:15:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/data-privacy-pl\/tutorials-pl-data-privacy-pl\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\/"},"wordCount":1188,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/data-privacy-pl\/tutorials-pl-data-privacy-pl\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-523-cookieless-tracking-fallbacks-syntet-g.png","keywords":["Cookies","Data Privacy","GDPR","Google Tag Manager","Server-Side GTM","Tracking"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/data-privacy-pl\/tutorials-pl-data-privacy-pl\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/data-privacy-pl\/tutorials-pl-data-privacy-pl\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/data-privacy-pl\/tutorials-pl-data-privacy-pl\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\/","name":"Cookieless Tracking Fallbacks: Syntetyczne zszywanie sesji po stronie serwera | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/data-privacy-pl\/tutorials-pl-data-privacy-pl\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/data-privacy-pl\/tutorials-pl-data-privacy-pl\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-523-cookieless-tracking-fallbacks-syntet-g.png","datePublished":"2026-10-02T15:15:00+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/data-privacy-pl\/tutorials-pl-data-privacy-pl\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/data-privacy-pl\/tutorials-pl-data-privacy-pl\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/data-privacy-pl\/tutorials-pl-data-privacy-pl\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-523-cookieless-tracking-fallbacks-syntet-g.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-523-cookieless-tracking-fallbacks-syntet-g.png","width":1200,"height":630,"caption":"Cookieless Tracking Fallbacks: Syntetyczne zszywanie sesji po stronie serwera"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/data-privacy-pl\/tutorials-pl-data-privacy-pl\/cookieless-tracking-fallbacks-syntetyczne-zszywanie-sesji-po-stronie\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Cookieless Tracking Fallbacks: Syntetyczne zszywanie sesji po stronie serwera"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/523","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=523"}],"version-history":[{"count":5,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/523\/revisions"}],"predecessor-version":[{"id":21028,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/523\/revisions\/21028"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/14075"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=523"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=523"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=523"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}