Kişisel veri, bir ölçüm sisteminde tek bir yerde durmaz. Client-side event parametrelerinde dolaşır, sGTM üzerinden server-side’a geçer, BigQuery export’unda kalıcı hale gelir, webhook payload’larıyla dış sistemlere akar, newsletter listelerinde ayrı bir amaç kapsamında saklanır. Consent Mode v2 dört sinyal taşır (ad_storage, analytics_storage, ad_user_data, ad_personalization); ancak sinyallerin gate’lediği veri ile sızdıran veri aynı değildir. Bu yazıda veri tipi bazında envanter çıkarılıp her tip için consent eşlemesi ve pratik sızıntı önleme noktaları ele alınıyor.
Consent Mode v2 kurulum mekaniği için Google Consent Mode v2 Kurulumu rehberi ayrı bir yazıda anlatıldı. Buradaki odak veri envanteri ve sızıntı yüzeyleri.
Kişisel Veride Üç Form
Ölçümde kişisel veri üç farklı formda taşınır:
1. Raw PII. Email, telefon, ad-soyad, adres bilgisi açık metin halinde. Form submission, login, abonelik payload’larında doğal olarak oluşur. Ölçüm platformlarına doğrudan gitmemelidir.
2. Hashed PII. Normalize edilmiş (lowercase, trim) email veya phone’un sha256 hash’i. Enhanced Conversions, Meta CAPI user_data, LinkedIn Insight Tag CAPI benzeri server-side match pattern’larında kullanılır. Platforma sunulan yapı bağlamında raw, hashlenmiş veya her ikisi birlikte gider, platform kendi tarafında match için kullanır.
3. Pseudonymized ID. GA4 client_id (_ga cookie), Meta _fbp ve _fbc, Google Ads gclid, gbraid, wbraid. Kullanıcıyı direkt tanımlamaz ama tutarlı bir pseudonymous identifier sağlar. Consent Mode v2 analytics_storage veya ad_storage denied olduğunda cookie oluşturulmaz, kullanıcı her event’te yeni random ID ile gelir (GA4 transient token).
IP ve User-Agent ayrı bir kategori; cihaz ve ağ seviyesinde toplanan bilgiler. Consent Mode v2 doğrudan bunları gate’lemez; kullanım analytics_storage veya ad_storage state’ine göre platform tarafında sınırlandırılır.
GA4 Tarafında PII Sızıntı Noktaları
GA4 kendisi PII beklemez, ama default event parametreleri içinde PII sızabilir. En yaygın üç yüzey:
page_location query string. Site içi arama veya form submission URL’lerinde email/phone parametresi kalırsa event olarak GA4’e düz gider. Örnek: /search?q=user@example.com. GTM seviyesinde page location’u işleyen bir variable ile PII pattern’ı redaction yapılmalı, temizlenmiş URL event’te kullanılmalı. Simo Ahava’nın yayınladığı Custom Task pattern’ı GTM’de bu iş için yaygın kullanılan çözüm1. GA4 property seviyesinde ise Admin > Data Collection and Modification > Data Redaction altında email pattern redaction toggle’ı açılabilir (2023 sonrası native özellik); Google tarafındaki regex [A-Z0-9.*%+-]+@[A-Z0-9.-]+\.[A-Z]{2,} (case-insensitive) ve temel tarama yüzeyleri: page_location, page_referrer, page_path, link_url, video_url, form_destination2. Özel event yapılandırmalarında kontrollerin ilgili parametreler üzerinden de yapılması gerekir.
Site arama (search event) parametresi. Kullanıcı email’i arama kutusuna yazarsa GA4 search_term parametresine düşer. Aynı redaction mantığı burada da geçerli. Ayrıca enhanced measurement otomatik site search tracking’i GA4 property ayarlarından kapatılıp custom event’le ikame edilebilir.
User property ve custom dimension. Geliştirici veya GTM tag’i user_properties veya custom event parameter olarak email/phone gönderirse GA4 bunu kullanıcı profiline ekler. GA4 UI tarafı bazı PII alanlarını reject eder ama otomatik denetim sınırlı; naming convention (customer_email yerine customer_hash) ve code review gerekli.
Property seviyesinde bir güvenlik katmanı: GA4 Data Redaction Settings (Admin > Data Collection and Modification > Data Redaction). Email pattern redaction burada açılabilir; event’lere yazılan URL ve parameter’lar property düzeyinde çıkışta filtrelenir. Bu son savunma; idealde veri GA4’e bile gelmeden temizlenmeli.
Enhanced Conversions ve Meta CAPI: Hashed PII Sorumluluğu
Enhanced Conversions (Google Ads) ve Meta CAPI, conversion match quality’yi artırmak için hashlenmiş user data kabul eder.
Enhanced Conversions iki modda kurulur:
- Auto-collect (Google Tag): Google Tag sayfadaki form alanlarını otomatik okur, hash’ler ve gönderir. Hashleme sorumluluğu Google tarafında. Kalan görev, raw PII’nin Google’a gitmemesi için form alanlarının doğru attribute’larla işaretlenmesi ve Google’ın bu alanları tanıyabilmesidir.
- Manual veya sGTM: Custom kod veya GTM tag’iyle
user_dataobjesi oluşturuluyorsa hash’leme uygulayıcı tarafında kalır. Format: sha256, lowercase ve trim edilmiş değer üzerinden. Email içinnormalize: email.trim().toLowerCase()ardından sha256. Phone için E.164 format ardından sha256. Google Enhanced Conversions HTTPS üzerinden gönderildiğinde hashlenmemiş değer de kabul eder ve kendi tarafında normalize edip hash’ler3; ancak best practice client/sGTM katmanında pre-hash: browser console log’unda veya ağ inspector’da raw PII görünmez, compliance argümanı netleşir. Meta CAPI ise yalnızca hashlenmişem/phkabul eder, raw göndermek payload’ı red ettirir.
Meta CAPI user_data: Aynı hash’leme kuralları. em (email sha256), ph (phone sha256), fn/ln (isim sha256), db (doğum tarihi sha256), ge (cinsiyet tek harf sha256). Ek olarak client_ip_address ve client_user_agent raw olarak gönderilir; match quality için gerekli. event_id üzerinden Meta Pixel ile deduplication yapılır.
sGTM kurulumunda user_data payload’ını server tarafında oluşturmak yaygın pattern. Avantajı: hash’leme server’da standardize edilir, hashlenmemiş veri browser’dan sızmaz. Consent Mode v2 ad_user_data: denied ise hash’lenmiş PII bile payload’dan çıkarılmalı; sGTM custom template içinde bu kontrol yazılmalı. Meta’nın resmi sGTM CAPI Tag Template’i bu davranışı içerir.
Newsletter Abonelik: Amaç Kapsamı Genişletme
Newsletter formunda toplanan email, abonelik amacıyla işlenir. KVKK ve GDPR kapsamında bu tek bir amaç. Aynı email’i:
- Google Customer Match audience’a eklemek
- Meta Custom Audience’a yüklemek
- Lookalike/Similar audience kaynağı olarak kullanmak
ayrı birer marketing amacıdır ve abonelik consent’i bunları kapsamaz. Compliance açısından newsletter formunda:
- Abonelik için ayrı checkbox (zorunlu değilse opt-in)
- Marketing iletişimi için ayrı checkbox (opt-in, newsletter’dan bağımsız)
- Third-party audience sync için ayrı checkbox (opt-in, ayrı)
Pratikte çoğu e-ticaret platformu (Klaviyo, Omnisend) consent kategori yönetimini form seviyesinde destekler. Listmonk self-hosted tarafında ise List > Privacy ayarları ve çoklu kategori alanları (tags) ile yönetilir. Her kategoriye karşılık gelen opt-in ayrı timestamp ile saklanmalı; kanıt denetimi için kritik.
Abonelik listesi üzerinden remarketing yapılacaksa suppressed/unsubscribed email’lerin Customer Match / Custom Audience’dan anında çıkarılması için pipeline kurulmalı. Scout veya benzer custom routing platform’ları bu job’ı otomatize eder.
Webhook: Raw Data Transit Yüzeyi
Form submission, checkout event’i, user registration gibi trigger’larda webhook payload’ında raw email, phone ve diğer PII açık metin taşınır. Webhook alıcısı (CRM, ESP, custom endpoint) PII’yi storage’a alırken:
- TLS 1.2+ zorunlu (transit encryption)
- Storage’da column-level encryption (at-rest)
- Payload log’unda PII mask’i (log aggregation servisleri PII’yi canlı saklamamalı)
- PII’yi 3rd party destination’a forward ediyorsa hash’leme katmanı eklemeli
Shopify, WooCommerce, Paddle webhook’ları bu kategoride; checkout completed event’inde customer email raw gelir. Consent Mode v2 doğrudan webhook trafiğini etkilemez, ama webhook’tan türetilen data (örn. email → Customer Match) ad_user_data ve ad_personalization consent gate’ine tabi.
Webhook’tan Scout tipi pipeline’a forward edildiğinde PII Consent Mode v2 sinyalleriyle birlikte payload’a eklenmeli; destination’larda (Klaviyo, Meta CAPI, Google Customer Match) consent state’ine göre koşullu fire edilmeli.
IP Anonimizasyonu ve Trimming
IP adresi pseudonymized identifier sayılır (GDPR Recital 26); tek başına PII değil ama diğer veriyle kombine edilince kullanıcıyı tanımlayabilir.
GA4: IP adresini saklamaz ve raporlamaz. Eski UA’daki IP Anonymization (AIP) ayarı GA4’te default davranışa dönüştü. BigQuery export’unda da IP kolonu yoktur; sadece türetilen coğrafi bilgiler (country, city) bulunur.
Meta CAPI: client_ip_address parametresinde full IP bekler; match quality için gerekli. KVKK kapsamında IP’yi ham göndermek istenmiyorsa sGTM’de veya reverse proxy’de (Cloudflare Worker, Caddy) son oktet trim edilmiş form gönderilebilir (192.168.1.42 → 192.168.1.0). Match quality hafifçe düşer ama compliance lehine.
Enhanced Conversions: Google Ads tarafında IP zorunlu değil, hash’lenmiş user_data yeterli match sağlar.
sGTM custom Transformation: Tüm outbound event’lere uygulanan IP trim veya mask kuralı bir Transformation ile yazılır. Meta’nın resmi Tag Template IP’yi olduğu gibi gönderir; Transformation katmanı bu varsayılan davranışı override eder. Stape’in Anonymizer power-up’ı veya topluluk IP Transformer / Anonymizer template’i bu iş için hazır çözümler sunar45.
GPC, TCF ve Uluslararası Sinyaller
Consent Mode v2’nin dört sinyali Google ekosistemi için; ancak tarayıcılar ve regülasyonlar ek sinyal katmanları ekliyor.
Global Privacy Control (GPC). 1 Ocak 2026’dan itibaren CA, CO, CT başta olmak üzere 12 ABD eyaletinde yasal binding opt-out sinyali. Firefox, Brave, DuckDuckGo tarafından header seviyesinde (Sec-GPC: 1) gönderilir. Banner üzerinden kullanıcı “accept all” dese bile GPC detect edildiğinde ad_storage, ad_user_data, ad_personalization sinyalleri otomatik denied olur, Shopify Customer Privacy API’de sale_of_data otomatik false olur6. Tractor Supply 2025’te GPC sinyalini yok saydığı için CA AG tarafından $1.35M ceza aldı. CMP tarafında GPC detection varsayılan olarak açık olmalı.
TCF 2.2 ve Google Additional Consent (AC string). IAB Europe’un TCF 2.2 framework’ü yayıncı/programmatic tarafta yaygın. Google IAB GVL’de olmayan kendi ad-tech partner’ları (ATPs) için ek addtl_consent string’i kullanır. Publisher site’larında GAM/AdSense kullanılıyorsa TCF + AC string’i birlikte iletmek zorunlu; aksi halde Google eligibility düşer7. E-ticaret storefront’larında genelde gerekmez.
Hashed PII: Anonymization Değil, Pseudonymization
GDPR Recital 26 ve EDPB guidance’ı net: sha256 hash’lenmiş email “anonymous” değil, pseudonymous bir veridir. Hash tersinmez olsa da aynı email her zaman aynı hash’e dönüşür; dictionary attack, brute-force (email rainbow table) veya cross-reference ile re-identification teorik ve pratik olarak mümkün8.
Operasyonel sonuçlar:
- Hashed PII hâlâ consent gerektirir;
ad_user_data: deniediken hashed email’i Meta CAPI’ye göndermek ihlaldir. - Hashed PII hâlâ DSAR (subject access request) kapsamındadır; kullanıcı “veri silme” talep ettiğinde hashed kolon da silinmeli.
- Hashed PII’yi “anonim veri” olarak ajans raporunda pazarlamamak gerek. Regülatör bunu kabul etmiyor.
Offline Conversion Uploads
CRM veya call center verisinden Google Ads’e conversion upload’u (ConversionUploadService) da kişisel veri transfer noktası. Per-conversion max 5 user_identifiers (hashed email, hashed phone, mailing address) gönderilir9. Web/tag akışından farklı olduğu için Consent Mode v2 matrisinde genelde gözden kaçar; ancak aynı consent principle geçerli: ilgili kullanıcının ad_user_data consent’i olmalı, aksi halde upload edilmemeli. Pipeline tarafında consent state’i CRM’de saklanmalı ve upload sırasında filter olarak kullanılmalı.
Consent Sinyali ile Veri Tipi Eşleme Matrisi
| Veri | Primary Consent Sinyali | Transit | Notlar |
|---|---|---|---|
| Raw email (form) | yok (consent gate API seviyesinde) | Client or server | GA4’e gitmemeli; Meta/Google’a hash’lenmiş gider |
Hashed email (CAPI em) | ad_user_data | sGTM veya client | Normalize + sha256; denied ise payload’dan çıkar |
Hashed phone (ph) | ad_user_data | sGTM veya client | E.164 + sha256 |
GA4 client_id (_ga cookie) | analytics_storage | Client cookie | Denied: transient token |
Meta _fbp / _fbc | ad_storage | Client cookie | Denied: cookieless |
gclid / gbraid / wbraid | ad_storage | URL → cookie | Denied: url_passthrough ile aktarılabilir, cookie yok |
| Newsletter subscriber email | First-party (amaç: abonelik) | Server | Remarketing için ayrı opt-in |
| Webhook payload email | First-party (amaç: işlem) | Server-to-server | 3rd-party forward için consent gate |
| IP (GA4) | analytics_storage (default masked) | Client → Google edge | Sadece coğrafi türetme |
IP (Meta CAPI, client_ip_address) | ad_storage | sGTM → Meta | Bilerek raw; sGTM/proxy’de trim opsiyonel |
| User-Agent (Meta CAPI) | ad_storage | sGTM → Meta | Bilerek raw; match quality için gerekli |
GA4 user_property custom | analytics_storage | Client → GA4 | PII yazmamak naming convention |
GA4 page_location | analytics_storage | Client → GA4 | Query PII redaction şart |
| Offline conversion upload | ad_user_data | Server → Google API | CRM’de consent state saklanmalı, upload’da filter |
| GPC sinyali | override: ad_* = denied | Browser header | CMP banner kararını geçersiz kılar |
İlgili Yazılar
- Google Consent Mode v2 Kurulumu
- Consent Banner Koydunuz, Trafiğiniz %30 Düştü
- Consent Sınırları İçinde Reklam Ölçümü
- GA4 ve Google Ads Veri Kontrolleri Birleşiyor
- Enhanced Conversions Rehberi
- Ajanslar için Marketing Stack 2026
Footnotes
- Remove PII from Google Analytics hits. Simo Ahava ↩
- Data redaction. Google Analytics Help ↩
- Set up Enhanced Conversions. Google Ads Help ↩
- Anonymizer power-up. Stape ↩
- Using the IP Transformer / Anonymizer server-side GTM template. dumbdata ↩
- Global Privacy Control 2026. Clym ↩
- About Additional Consent Mode. Google Ad Manager Help ↩
- GDPR alert: Are your Enhanced Conversions legal? Optimize Smart ↩
- Upload offline conversions. Google Ads API ↩
- 01 Kişisel veri, ölçümde üç formda taşınır: raw (email, phone), hashed (sha256 PII for Enhanced Conversions/CAPI) ve pseudonymized ID (client_id, fbp, gclid). Her formun consent gereksinimi farklı.
- 02 GA4'te en sık PII sızıntısı
page_locationve site arama parametresinde olur. Query string'de email veya phone olan URL'ler GA4'e düz gider; event scrub script'i zorunlu. - 03 Enhanced Conversions ve Meta CAPI user_data'nın hash'leme sorumluluğu client veya sGTM tarafında; hashlenmemiş PII gönderimi GDPR/KVKK ihlali.
- 04 Newsletter abonelik email'ini remarketing audience'ına eklemek opt-in kapsam genişletmesi; consent base'i ayrıca kurulmalı (double opt-in marketing amacı).
- 05 IP, GA4 tarafında default masklı; Meta CAPI ve server-to-server çağrılarda ise full IP gider, sGTM veya reverse proxy katmanında trim opsiyonel.
+ Consent Mode v2'nin dört sinyali hangi veri tiplerini kapsıyor?
ad_storage reklam çerezlerini (_fbc, _fbp, _gcl), analytics_storage GA4 birinci taraf çerezlerini (_ga), ad_user_data hashlenmiş email/phone'un Google'a/Meta'ya iletimini, ad_personalization remarketing audience'larına eklenmeyi kontrol eder. IP ve pseudonymized ID'ler bu sinyallere düşmez; ayrı bir layer.
+ GA4 page_location'da email varsa ne yapmalı?
Event scrub: GTM variable ile page_location'dan hashlenebilir PII pattern (email, phone regex) çıkarılıp temizlenmiş URL gönderilir. Alternatif olarak GA4 Data Redaction Settings üzerinden property bazında email pattern redaction açılabilir (Admin > Data Collection > Redact Data).
+ Enhanced Conversions için email'i kim hash'liyor?
Client-side Enhanced Conversions auto-collect açıksa Google Tag form alanından yakalayıp kendisi hash'ler. Manual veya sGTM üzerinden kuruluyorsa hash'leme sorumluluğu uygulayıcıdadır; sha256 normalize edilmiş formda (lowercase, trim) gönderilir. Hashlenmemiş PII gönderimi compliance ihlali.
+ Newsletter abonelik email'i remarketing için kullanılabilir mi?
Abonelik kapsam consent'i newsletter içerik alımıyla sınırlıdır. Google Customer Match veya Meta Custom Audience'a aynı email'i eklemek ayrı bir marketing amacıdır ve consent base'i ayrıca kurulmalıdır. Abonelik formunda 'marketing iletişimi için kullanılabilir' checkbox'ı ayrı tutulmalı.
+ sGTM IP anonimizasyonu nasıl yapılır?
sGTM container içinde custom Transformation veya variable ile IP son oktet maskelenebilir (örn. 192.168.1.42 → 192.168.1.0). Transformation tüm outbound event'lere uygulanabilir; böylece CAPI, Enhanced Conversions ve diğer destinations tutarlı bir IP davranışı taşır.