Giriş
GA4 raporlarında 7 gün önce gelen kullanıcı “yeni kullanıcı” olarak görünüyor. Shopify checkout’tan dönen kullanıcının oturumu kopuyor. Facebook attribution penceresi her geçen yıl daralıyor.
Bu sorunların ortak noktası tarayıcı depolama mimarisi. Cookie’lerin nasıl çalıştığını, hangi kısıtlamalara tabi olduğunu ve alternatif depolama mekanizmalarını anlamadan, ölçüm kayıplarının kaynağını teşhis etmek mümkün değil.
Bu yazı, client-side tracking sorunlarının ve analitik platformları arasındaki veri farklılıklarının teknik altyapısını açıklıyor.
Tarayıcı Depolama Mekanizmaları
Tarayıcılar veriyi dört farklı mekanizma ile saklar. Her birinin kapasitesi, ömrü, erişim biçimi ve sunucu ile ilişkisi farklı.
| Mekanizma | Kapasite | Ömür | Sunucuya Gider mi? | API Tipi | Tracking Kullanımı |
|---|---|---|---|---|---|
| Cookie | ~4 KB | Ayarlanabilir (maks. 400 gün1) | Evet, her HTTP isteğinde | Senkron | GA4 _ga, FB _fbp/_fbc, session ID |
| localStorage | ~5 MB | Kalıcı (kod veya kullanıcı silene kadar) | Hayır | Senkron | Conversion Linker ad click, cross-tab state |
| sessionStorage | ~5 MB | Sekme kapanınca silinir | Hayır | Senkron | Tek oturum verileri, geçici form state |
| IndexedDB | Yüzlerce MB - GB | Kalıcı | Hayır | Asenkron | Offline veri, büyük veri setleri, service worker cache |
Cookie: Sunucu ile Konuşan Tek Mekanizma
Cookie’nin diğer mekanizmalardan temel farkı: her HTTP isteğinde Cookie header’ı ile sunucuya otomatik olarak gönderilmesi. Bu özellik cookie’yi tracking için vazgeçilmez kılıyor, çünkü sunucu tarafında kullanıcıyı tanımlamak için tarayıcıdan gelen bir tanımlayıcıya ihtiyaç var.
Cookie’nin ikinci avantajı cross-subdomain desteği: de.example.com’da yazılan cookie, domain=.example.com attribute’ü ile fr.example.com’dan okunabilir. localStorage ve sessionStorage origin’e bağlıdır, subdomain’ler arası paylaşılamaz. Multi-market Shopify kurulumlarında veya subdomain bazlı dil yapılarında cookie bu nedenle tercih ediliyor2.
Peki, bu avantajlar aynı zamanda cookie’nin en büyük kısıtlamasının da kaynağı. Her istekte sunucuya gitmesi, tarayıcı ve regülatörlerin cookie’yi gizlilik riski olarak sınıflandırmasının birincil nedeni. localStorage’a cookie gibi 7 gün ömür kısıtlaması uygulanmıyor, çünkü localStorage sunucuya gitmiyor. Ancak Safari, ITP tarafından sınıflandırılmış domainlerde 7 gün etkileşim olmazsa localStorage dahil tüm script-writable storage’ı siliyor3.
localStorage: Cookie’nin Tamamlayıcısı
localStorage sunucuya gitmez ama tarayıcıda kalıcı veri saklar. Bu iki özellik birleşince tracking ekosisteminde tamamlayıcı bir rol üstleniyor.
Google bunu Kasım 2024’te resmi olarak benimsedi: Conversion Linker artık reklam tıklaması bilgisini cookie’ye ek olarak localStorage’a da yazıyor4. Nedeni basit: Safari ITP reklam tıklaması cookie’lerini 24 saate kısıtlıyor, ama localStorage’a cookie gibi süre sınırı getirmiyor. localStorage’daki veri, cookie süresi dolsa bile attribution penceresini genişletebiliyor.
sessionStorage: Tek Sekme, Tek Oturum
sessionStorage, sekme kapandığında silinen geçici bir depolama. Tracking açısından doğrudan kullanımı sınırlı ama checkout akışları, form wizard’ları ve tek oturumluk state yönetimi için kullanılıyor. Shopify checkout sandbox’ının cookie erişimini kısıtladığı ortamlarda5, sessionStorage alternatif bir veri taşıma mekanizması olarak devreye girebiliyor.
IndexedDB: Büyük Veri ve Offline
IndexedDB asenkron, yapısal veri saklayabilen (object, blob) ve yüzlerce MB kapasiteli bir veritabanı. Tracking için doğrudan kullanımı yaygın değil ama service worker’lar IndexedDB üzerinden çalışıyor. Google Tag’in Mart 2025’ten itibaren service worker kullanması6, IndexedDB’yi dolaylı olarak tracking altyapısının bir parçası hâline getirdi.
Cookie Attribute’leri: Tracking İçin Önemli Olanlar
Bir cookie oluşturulurken belirlenen attribute’ler, o cookie’nin hangi bağlamda okunabileceğini, ne kadar yaşayacağını ve hangi güvenlik kurallarına tabi olacağını belirler.
SameSite
SameSite attribute’ü, cookie’nin cross-site isteklerde gönderilip gönderilmeyeceğini kontrol eder.
| Değer | Davranış | Tracking Etkisi |
|---|---|---|
Strict | Yalnızca aynı site isteklerinde gönderilir | Cross-site attribution kırılır |
Lax (varsayılan) | Top-level navigasyonlarda gönderilir, cross-site POST/iframe’lerde gönderilmez | Çoğu tracking senaryosu için yeterli |
None | Tüm isteklerde gönderilir (Secure zorunlu) | Cross-site tracking mümkün ama tarayıcı kısıtlamalarına tabi |
Chrome, SameSite belirtilmemiş cookie’leri 2020’den beri varsayılan olarak Lax kabul ediyor. Bu değişiklik, SameSite=None ile açıkça işaretlenmemiş üçüncü taraf cookie’lerin çoğunu sessizce kırdı7.
Secure ve HttpOnly
| Attribute | Ne Yapar | Neden Önemli |
|---|---|---|
Secure | Cookie yalnızca HTTPS üzerinden gönderilir | SameSite=None için zorunlu. Güvenli iletim garantisi |
HttpOnly | JavaScript (document.cookie) ile erişilemez | XSS saldırılarına karşı koruma. Server-side cookie’ler için standart |
Server-side tracking kurulumlarında (sGTM) oluşturulan cookie’ler genellikle HttpOnly + Secure + SameSite=Lax kombinasyonuyla set edilir. Bu üçlü, hem güvenlik hem de ITP uyumluluğu açısından en iyi pratiği oluşturur.
Partitioned (CHIPS)
CHIPS (Cookies Having Independent Partitioned State), üçüncü taraf cookie’ler için yeni bir izolasyon modeli. Partitioned attribute’ü ile işaretlenen cookie’ler, top-level site bazında ayrı bir cookie jar’da saklanır8.
Set-Cookie: __Host-tracker=abc123; Secure; Path=/; SameSite=None; Partitioned
Bu cookie, siteA.com üzerinden set edildiğinde yalnızca siteA.com bağlamında okunabilir. Aynı üçüncü taraf servisi siteB.com’da da kullanılsa, oradaki cookie farklı bir değere sahip olur. Cross-site tracking engellenir ama aynı site içindeki işlevsellik korunur.
Tarayıcı desteği (2026 itibarıyla): Chrome 114+, Edge 114+, Opera 100+. Firefox ETP Strict modunda zaten tüm üçüncü taraf cookie’leri partition’lıyor. Safari de opt-in modeline ilgi gösteriyor8.
Birinci Taraf vs Üçüncü Taraf: Teknik Gerçek
Aynı cookie, farklı bağlamda farklı sınıflandırılır. doubleclick.net tarafından set edilen bir cookie, doubleclick.net ziyaret edildiğinde birinci taraf, ornek-magaza.com üzerindeki bir reklam iframe’inde okunduğunda üçüncü taraftır. Cookie’nin içeriği veya adı değişmez, değişen bağlam.
Tracking Araçlarının Cookie Kullanımı
| Araç | Cookie Adı | Tür | Varsayılan Ömür | ITP Etkisi |
|---|---|---|---|---|
| GA4 | _ga | Birinci taraf | 2 yıl | JS ile set: 7 gün |
| GA4 | _ga_<ID> | Birinci taraf | 2 yıl | JS ile set: 7 gün |
_fbp | Birinci taraf | 90 gün | JS ile set: 7 gün | |
_fbc | Birinci taraf | 90 gün | Tıklama parametresi: 24 saat | |
| Google Ads | _gcl_aw | Birinci taraf | 90 gün | Tıklama parametresi: 24 saat |
| Google Ads | Conversion Linker | Birinci taraf + localStorage | 90 gün | Cookie: 24 saat, localStorage: kısıtlama yok |
Tablodaki “ITP Etkisi” sütunu kritik: GA4 _ga cookie’si normalde 2 yıl yaşar, ama Safari’de JavaScript ile oluşturulduğu için 7 güne düşer. Kullanıcı 8. gün geldiğinde GA4 onu “yeni kullanıcı” olarak sayar9.
GTM Built-in Variable’lar: Cookie Parsing Dönemi Kapandı
Aralık 2025’e kadar GA4 Client ID’ye erişmek için _ga cookie’sini regex ile parse etmek gerekiyordu:
// Eski yöntem (kırılgan, format değişikliğine açık)
function getClientId() {
var match = document.cookie.match(/_ga=GA\d+\.\d+\.(.+)/);
return match ? match[1] : undefined;
}
Artık buna gerek yok. GTM, Aralık 2025 güncellemesiyle üç yeni built-in variable sunuyor10:
- Analytics Client ID: GA4 client kimliği
- Analytics Session ID: Aktif oturum kimliği
- Analytics Session Number: Kullanıcının kaçıncı oturumunda olduğu
Etkinleştirmek için: GTM > Variables > Configure Built-in Variables > Utilities kategorisi.
Peki, custom template geliştiriyorsanız, Ağustos 2025’te eklenen readAnalyticsStorage sandbox API’si var11. Bu API, cookie format değişikliklerine karşı future-proof bir okuma yöntemi sunuyor. Daha önce cookie formatını reverse-engineer ederek okuyan custom template’ler, Google Analytics cookie formatını güncellediğinde kırılıyordu.
Ayrıca yeni bir Analytics Storage user-defined variable tipi de eklendi. Bu, belirli bir Measurement ID veya custom cookie prefix ile çalışan multi-property kurulumlar için tasarlanmış. Consent Mode v2’deki analytics_storage ile karıştırılmamalı, bu tamamen farklı bir mekanizma10.
Tarayıcı Kısıtlamaları
Safari ITP (Intelligent Tracking Prevention)
Safari, tracking kısıtlamalarında en agresif tarayıcı. ITP’nin güncel kuralları9:
| Kural | Kısıtlama | Tracking Etkisi |
|---|---|---|
| JavaScript cookie (document.cookie) | Maks. 7 gün | GA4 kullanıcı tanıma penceresi 7 güne düşer |
| Reklam tıklaması cookie’si (gclid, fbclid, vb.) | Maks. 24 saat | Google Ads ve Meta attribution penceresi 24 saate düşer |
| Server-side cookie (Set-Cookie header) | Maks. 400 gün (IP eşleşirse) | sGTM ile ITP bypass mümkün |
| Server-side cookie (IP eşleşmezse) | Maks. 7 gün | Cloud-hosted sGTM + farklı IP = bypass başarısız |
| localStorage / IndexedDB | 7 gün etkileşim olmazsa silinir | Script-writable storage da ITP kapsamında |
| 30 gün etkileşimsizlik | Tüm site verisi silinir | Cookie, localStorage, IndexedDB dahil her şey |
| Üçüncü taraf cookie | Tamamen engelli | Cross-site tracking mümkün değil |
IP eşleşme detayı: Safari 16.4’ten itibaren, server-set cookie’lerin 400 gün yaşaması için sunucu IP adresinin ilk yarısının site IP’si ile eşleşmesi gerekiyor. Cloud-hosted sGTM genellikle farklı IP bloğunda çalıştığı için bu koşul sağlanamayabiliyor. Custom domain ile aynı CDN/altyapı üzerinden proxy yapmak bu sorunu çözüyor12.
Firefox ETP (Enhanced Tracking Protection)
Firefox, bilinen tracker’ların cookie’lerini üçüncü taraf bağlamda engelliyor. ETP Strict modunda tüm üçüncü taraf cookie’ler partition’lanıyor. Birinci taraf cookie’lere dokunmuyor ancak cross-site tracking için kullanılan mekanizmaları aktif olarak tespit edip engelliyor13.
Brave
Brave, tüm tracker’ları ve üçüncü taraf cookie’leri varsayılan olarak engelliyor. GA4, GTM, Facebook Pixel dahil tüm tracking script’lerini blokluyor. Brave kullanıcıları client-side tracking için tamamen görünmez13.
Chrome: Üçüncü Taraf Cookie Durumu (2026)
Chrome, beklenen üçüncü taraf cookie kaldırma planını terk etti. Temmuz 2024’te “user choice” modeline geçeceğini duyurdu. Privacy Sandbox API’lerinden Topics API, Protected Audience API ve Attribution Reporting API Ekim 2025’te kullanımdan kaldırıldı14. CHIPS ve FedCM (Federated Credential Management) ise cross-browser destek gördüğü için devam ediyor.
2026 itibarıyla Chrome, üçüncü taraf cookie’leri varsayılan olarak engellemiyor. Kullanıcıya tercih sunuyor.
Server-Side Cookie Oluşturma
Client-side cookie’lerin ITP kısıtlamalarına tabi olması, server-side cookie oluşturmayı tracking altyapısının kritik bir bileşeni haline getirdi. İki ana yaklaşım var: sGTM ve Google Tag Gateway.
sGTM ile Server-Side Cookie
sGTM (server-side Google Tag Manager), tarayıcıdan gelen isteği kendi sunucu container’ında işler ve yanıtta Set-Cookie header’ı ile cookie oluşturur. Bu cookie HTTP response’unun parçası olduğu için tarayıcı onu server-set olarak kabul eder.
Temel prensipler:
-
Custom domain zorunlu: sGTM container’ı
gtm.orneksite.comgibi sitenin alt alan adında çalışmalı. Bu sayede cookie birinci taraf olarak sınıflandırılır. -
Attribute’ler:
HttpOnly+Secure+SameSite=Laxkombinasyonu.HttpOnlyJavaScript erişimini engeller (XSS koruması),Secureyalnızca HTTPS,SameSite=Laxcross-site kısıtlaması. -
Cookie ömrü: Server-side set edilen cookie’ye 2 yıla kadar ömür verilebilir. Safari’de IP eşleşmesi varsa 400 güne kadar yaşar (client-side 7 gün iken).
sGTM’de cookie oluşturma senaryoları:
- GA4
_gaoverride: sGTM, GA4’ün client-side oluşturduğu_gacookie’sini server-side olarak yeniden set edebilir. Client ID aynı kalır ama cookie ömrü uzar. - Custom cookie:
user_id,session_id, attribution parametreleri (UTM, gclid, fbclid) gibi değerler server-side cookie olarak saklanabilir. - First-party data enrichment: CRM veya veritabanından gelen kullanıcı segmenti, server-side cookie ile tarayıcıya yazılabilir.
Detay: sGTM ile Custom Domain Kurulumu
Google Tag Gateway (Eski First-Party Mode)
Google Tag Gateway, Mayıs 2025’te “first-party mode”dan yeniden adlandırıldı. CDN (Cloudflare, Akamai) veya GCP Load Balancer üzerinden Google tag isteklerini first-party context’e taşıyan bir çözüm15.
| Özellik | sGTM | Google Tag Gateway |
|---|---|---|
| Kapsam | Tüm platformlar (Meta, TikTok, LinkedIn, vb.) | Yalnızca Google ekosistemi (GA4, Ads, Floodlight) |
| Kurulum | Sunucu container, custom domain, hosting | CDN entegrasyonu, “one-click” seçenekler |
| Veri kontrolü | Tam (filtre, dönüştür, zenginleştir) | Sınırlı (pass-through) |
| Cookie oluşturma | Tam kontrol (custom cookie, override) | Google tag’in kendi cookie yönetimi |
| Maliyet | Hosting maliyeti (GCP, Stape, vb.) | CDN maliyeti (genellikle mevcut altyapı) |
| Ad blocker bypass | Yüksek (custom domain) | Orta (CDN proxy) |
| Reported uplift | Değişken (kuruluma bağlı) | Ortalama %11+ conversion artışı15 |
Hangisi ne zaman?
- Yalnızca Google ekosistemi kullanılıyorsa ve hızlı kurulum öncelikse: Google Tag Gateway
- Çoklu platform (Meta CAPI, TikTok Events API, vb.) ve veri kontrolü gerekiyorsa: sGTM
- İkisi birlikte de kullanılabilir: Gateway Google trafiği için, sGTM diğer platformlar için
Cloudflare Zaraz
Cloudflare Zaraz, CDN edge’inde çalışan bir tracking proxy. Mantık olarak Google Tag Gateway’e benzer ama platform bağımsız. Cloudflare DNS kullanıyorsanız ek kurulum gerektirmez. Engagement time ve auto event sınırlamaları var16.
Service Worker ve Veri İletimi
Google Tag, Mart 2025’ten itibaren veri iletiminde service worker kullanıyor6. Service worker, tarayıcıda arka planda çalışan bir script. Sayfa kapansa bile ağ isteklerini tamamlayabiliyor.
Tracking için anlamı: kullanıcı sayfayı hızlıca terk ettiğinde (bounce), geleneksel JavaScript tabanlı iletim kesintiye uğrayabilir. Service worker bu isteği arka planda tamamlayarak veri kaybını azaltır.
Bu gelişme, navigator.sendBeacon() API’sine ek bir güvenilirlik katmanı ekliyor. sendBeacon zaten sayfa kapanırken veri göndermek için tasarlanmıştı, service worker ise bunu daha geniş bir kapsamda yapabiliyor.
Özet: Neyi, Ne İçin Kullanmalı?
| Senaryo | Mekanizma | Neden |
|---|---|---|
| Kullanıcı tanımlama (GA4, FB) | Cookie (server-side tercih) | Sunucuya otomatik gider, server-side ile ITP bypass |
| Attribution parametresi saklama | Cookie + localStorage | Cookie ITP’ye tabi, localStorage yedek |
| Checkout/form geçici state | sessionStorage | Sekme bazlı, otomatik temizlenir |
| Offline veri, büyük veri seti | IndexedDB | Asenkron, yüksek kapasite |
| GA4 ID erişimi (GTM’de) | Built-in variable | Cookie parsing yerine resmi yöntem |
| ITP bypass | sGTM server-side cookie | HTTP Set-Cookie header, 400 güne kadar |
| Google-only first-party | Google Tag Gateway | Kolay kurulum, CDN entegrasyonu |
| Multi-platform first-party | sGTM | Tam kontrol, tüm platformlar |
Tarayıcı depolama mimarisini anlamak, client-side tracking sorunlarının neden oluştuğunu ve analitik platformları arasındaki veri farklılıklarının teknik kökenini kavramak için gerekli altyapıyı sağlıyor. Ölçüm kaybının kaynağını teşhis etmeden çözüm üretmek mümkün değil.
Footnotes
- RFC 6265bis: HTTP State Management Mechanism. IETF Cookie maks. ömrü 400 gün olarak standardize edildi. ↩
- Shopify Markets Cookie Bridge Cross-subdomain cookie kullanımı ve pixel sandbox storage mekanizmaları. ↩
- Storage quotas and eviction criteria. MDN Web Docs ↩
- Google Tag Manager Release Notes, November 7, 2024. Google “Conversion Linker now stores ad click information in Browser Local Storage in addition to first-party cookies.” ↩
- Shopify Analytics vs GA4 Shopify checkout sandbox’ının cookie erişim kısıtlamaları. ↩
- Google Tag Manager Release Notes, March 4, 2025. Google “Google tag now uses service workers, when available, to send data to server-side Tag Manager.” ↩ ↩2
- SameSite cookies explained. web.dev ↩
- Cookies Having Independent Partitioned State (CHIPS). Privacy Sandbox ↩ ↩2
- Safari ITP. Stape ve cookiestatus.com/safari Safari ITP kısıtlamalarının güncel durumu. ↩ ↩2
- Google Tag Manager Release Notes, December 11, 2025. Google Built-in variables: Client ID, Session ID, Session Number ve Analytics Storage variable tipi. ↩ ↩2
- Google Tag Manager Release Notes, August 1, 2025. Google readAnalyticsStorage sandbox API. ↩
- Server-Side Cookie Setting in 2026. Seresa Safari 16.4 IP matching kuralı. ↩
- Enhanced Tracking Protection in Firefox. Mozilla Support ve Brave Shields. Brave ↩ ↩2
- Update on Plans for Privacy Sandbox Technologies. Google Topics API, Protected Audience API ve Attribution Reporting API retire kararı. ↩
- Set up Google tag gateway for advertisers. Google Developers ve sGTM vs Google Tag Gateway. Five Nine Strategy ↩ ↩2
- Cloudflare Analytics vs GA4 Zaraz entegrasyonu sınırlamaları. ↩
- 01 Cookie tek depolama mekanizması değil; localStorage, sessionStorage ve IndexedDB farklı amaçlara hizmet ediyor
- 02 Safari ITP, JavaScript cookie'lerini 7 güne, reklam tıklaması cookie'lerini 24 saate kısıtlıyor
- 03 Server-side cookie (HTTP Set-Cookie header) ile ITP 7 gün kısıtlaması aşılabilir, cookie 400 güne kadar yaşar
- 04 Google Tag Gateway (eski first-party mode) yalnızca Google ekosistemi için çalışır; sGTM platform bağımsız
- 05 GTM artık GA4 Client ID, Session ID ve Session Number'ı doğrudan built-in variable olarak sunuyor, cookie parsing gerekmiyor
+ Cookie ile localStorage arasındaki fark nedir?
Cookie her HTTP isteğiyle sunucuya gönderilir (maks. 4 KB), sunucu tarafından Set-Cookie header ile oluşturulabilir ve süre sınırı verilebilir. localStorage yalnızca tarayıcıda kalır (5 MB), sunucuya gitmez, kullanıcı veya kod silene kadar kalıcıdır. Tracking açısından cookie sunucu iletişimi için, localStorage client-side veri saklama için kullanılır.
+ Safari ITP cookie'leri nasıl kısıtlıyor?
JavaScript ile oluşturulan cookie'ler 7 güne, reklam tıklaması parametresi (gclid, fbclid) içeren URL'lerden gelen cookie'ler 24 saate kısıtlanır. Server-side Set-Cookie header ile oluşturulan cookie'ler 400 güne kadar yaşar, ancak sunucu IP'si ile site IP'si eşleşmezse bu da 7 güne düşer.
+ sGTM ile Google Tag Gateway arasındaki fark nedir?
Google Tag Gateway (eski first-party mode) yalnızca Google ekosistemine (GA4, Google Ads, Floodlight) hizmet eden lightweight bir çözüm. sGTM ise platform bağımsız, Meta CAPI, TikTok Events API, LinkedIn dahil tüm platformlara veri gönderebilen esnek bir sunucu container'ı. Gateway kolay kurulum, sGTM tam kontrol sunar.
+ GTM'de GA4 cookie'lerini parse etmem gerekiyor mu?
Hayır. Aralık 2025 itibarıyla GTM, Client ID, Session ID ve Session Number için built-in variable sunuyor. Ağustos 2025'te eklenen readAnalyticsStorage API'si de custom template'ler için resmi çözüm. _ga cookie'sini regex ile parse etme dönemi kapandı.