Kısa cevap: Consent Mode v2 kurulumunu doğrulamanın en güvenilir yolu dört aracı birlikte kullanmaktır: Google Tag Assistant (sinyal zaman çizelgesi), GTM Preview (etiket sıralaması), DevTools Network sekmesi (gcs ve gcd parametreleri) ve GA4 DebugView (olay akışı). Ağ isteklerindeki gcs parametresi "G1" ile başlar ve iki hane taşır: ilk hane ad_storage, ikinci hane analytics_storage durumudur (1 = granted, 0 = denied; örneğin G111 her ikisi granted, G100 her ikisi denied). Sorunların büyük bölümü iki kök nedene iner: default komutunun Google etiketlerinden sonra çalışması ve banner seçiminden sonra update komutunun hiç tetiklenmemesi. Rıza reddinden sonra GA4 kullanıcı sayısının düşmesi ise çoğu zaman bir hata değil, tasarlanmış davranıştır.
Bu yazı kurulum değil, doğrulama ve hata ayıklama rehberidir. Sıfırdan kurulum için Consent Mode v2 kurulum rehberimize, kavramsal çerçeve ve sinyal tanımları için Google Consent Mode regülasyon sayfamıza bakabilirsiniz. Aşağıdaki 12 sorun, gerçek kurulumlarda en sık karşılaşılan belirtilere göre sıralandı: önce araç setini kurun, sonra belirtinize uyan soruna gidin.
Doğrulama araç seti: Tag Assistant, GTM Preview, DevTools, GA4 DebugView
Tek araca güvenmeyin. Her araç farklı bir katmanı gösterir ve sorunların çoğu ancak iki katmanı yan yana koyunca görünür hale gelir.
| Araç | Ne gösterir | Ne zaman kullanın |
|---|---|---|
| Tag Assistant | Consent sekmesinde default ve update sinyallerinin zaman çizelgesi, hangi olayda hangi durum geçerliydi | İlk doğrulama ve "update geliyor mu?" sorusu |
| GTM Preview | Etiketlerin tetiklenme sırası, Consent sekmesi, hangi etiketin hangi rıza türünü beklediği | Etiket sıralaması ve tetikleyici hataları |
| DevTools Network | /g/collect ve reklam isteklerindeki gcs, gcd parametreleri, çerez yazma davranışı |
Sinyalin gerçekten Google sunucusuna gidip gitmediği |
| GA4 DebugView | Olay akışı, parametreler, rıza sonrası oturum davranışı | Veri katmanındaki olayların GA4 tarafında görünürlüğü |
Pratik rutin: Gizli pencere açın, siteyi yükleyin, banner görünmeden önce Network sekmesinde collect filtresiyle istekleri izleyin. Sonra sırasıyla kabul, reddet ve kısmi onay senaryolarını ayrı ayrı test edin. Her senaryoda gcs değerinin beklediğiniz değere döndüğünü kontrol edin.
gcs ve gcd parametrelerini okuma
DevTools Network sekmesinde google-analytics.com/g/collect veya Google reklam alan adlarına giden istekleri açın ve sorgu parametrelerine bakın.
gcs parametresi iki temel sinyalin anlık durumunu kodlar. Biçim "G1" öneki artı iki hanedir: ilk hane ad_storage, ikinci hane analytics_storage (1 = granted, 0 = denied).
| gcs değeri | ad_storage | analytics_storage | Tipik anlamı |
|---|---|---|---|
| G100 | denied | denied | Kullanıcı reddetti veya henüz seçim yapmadı |
| G101 | denied | granted | Yalnızca analitik onayı |
| G110 | granted | denied | Yalnızca reklam onayı (nadir bir kombinasyon) |
| G111 | granted | granted | Tam onay |
gcd parametresi ise daha ayrıntılıdır: v2 ile gelen ad_user_data ve ad_personalization dahil dört sinyalin her biri için "default ayarlandı mı, update geldi mi, değerler ne" bilgisini harf kodlarıyla taşır. Harf tablosunu ezberlemeye çalışmak yerine iki pratik kural yeterlidir:
- İstekte gcd hiç yoksa veya sinyaller "ayarlanmamış" görünüyorsa, o sayfada Consent Mode default komutu çalışmamıştır.
- Kullanıcı banner'da seçim yaptıktan sonra atılan yeni isteklerde gcd değeri değişmiyorsa, update komutu Google etiketlerine ulaşmıyordur.
Harf harf çözümleme gerekiyorsa Tag Assistant'ın Consent sekmesi aynı bilgiyi okunur biçimde gösterir; ham parametreyi elle yorumlamaktan daha güvenlidir.
Sorun 1-4: Default geç yükleme, dataLayer senkronu, region hataları, update tetiklenmiyor
Sorun 1: Default komutu Google etiketlerinden sonra çalışıyor
Belirti: İlk sayfa yüklemesindeki collect isteklerinde gcs parametresi yok veya banner görünmeden _ga gibi çerezler yazılıyor.
Neden: gtag('consent', 'default', ...) komutu, gtag.js veya GTM container yüklendikten sonra çalışıyor. Google etiketleri ilk çalıştıklarında geçerli bir default bulamazsa rıza sinyali olmadan davranır.
Çözüm: Default bloğunu <head> içinde, tüm Google script'lerinden önce inline olarak yerleştirin. GTM kullanıyorsanız CMP etiketini Consent Initialization - All Pages tetikleyicisine bağlayın. wait_for_update: 500 parametresi, banner cevabı gecikirse Google etiketlerinin kısa süre beklemesini sağlar.
Sorun 2: dataLayer senkronizasyon hatası
Belirti: Konsolda dataLayer doluyor ama Tag Assistant hiçbir consent sinyali görmüyor.
Neden: Consent komutları sıradan bir dataLayer.push({event: ...}) nesnesi olarak değil, resmî gtag() fonksiyonunun ürettiği arguments yapısıyla iletilmelidir. Elle yazılmış hatalı bir gtag taklidi veya dataLayer yerine farklı bir katman adı (örneğin dataLayer2) kullanmak sinyali görünmez yapar.
Çözüm: Resmî snippet'i kullanın: function gtag(){dataLayer.push(arguments);}. GTM container'ınız özel bir dataLayer adı kullanıyorsa consent komutlarının da aynı ada push edildiğinden emin olun.
Sorun 3: Region (bölge) tanım hataları
Belirti: Bazı ülkelerden gelen ziyaretçilerde default hiç uygulanmıyor veya yanlış default uygulanıyor.
Neden: region: ['TR'] gibi bölgesel default'lar tanımlanmış ama bölge dışı kullanıcılar için genel bir default bırakılmamış; ya da çakışan bölge tanımları var (daha spesifik bölge tanımı geçerli olur).
Çözüm: Önce bölgesiz bir genel default tanımlayın, ardından istisna bölgeleri ayrı bir default komutuyla ekleyin. Bölge kodlarının ISO ülke ve alt bölge biçiminde olduğunu kontrol edin. Türkiye trafiği için KVKK'nın açık rıza yaklaşımı gereği default'un denied başlaması güvenli tercihtir; ayrıntı için KVKK regülasyon sayfamıza bakın.
Sorun 4: Update hiç tetiklenmiyor
Belirti: Tag Assistant'ta default görünüyor ama kullanıcı kabul ettikten sonra bile gcs hep G100 kalıyor.
Neden: Banner'ın "kabul" olayına gtag('consent', 'update', ...) çağrısı bağlanmamış. Bazı elle yazılmış banner'lar seçimi yalnızca kendi çerezine kaydeder, Google'a hiç iletmez.
Çözüm: CMP'nizin onay callback'inde update komutunun dört v2 sinyalini de (ad_storage, analytics_storage, ad_user_data, ad_personalization) gönderdiğini doğrulayın. Testin kesin yolu: banner'da seçim yapın ve hemen ardından Network sekmesinde yeni isteklerin gcs değerinin değiştiğini görün.
Sorun 5-8: GA4 veri düşüşü, Ads dönüşüm kaybı, Consent Initialization, gtag + GTM çakışması
Sorun 5: GA4 verileri düştü, panik gerekli mi?
Belirti: Consent Mode devreye alındıktan sonra GA4 kullanıcı ve oturum sayıları belirgin azaldı.
Neden: Bu çoğunlukla hata değildir. Rıza vermeyen kullanıcılar için Advanced modda çerezsiz ping atılır ama bu kullanıcılar standart raporlarda tekil kullanıcı olarak görünmez. Basic modda ise rıza gelmeden hiçbir veri gitmez. Yani düşüş, daha önce rızasız topladığınız verinin artık toplanmadığının göstergesidir.
Çözüm: Önce kabul oranınızı ölçün: veri düşüş oranı ile red oranı tutarlıysa kurulum doğru çalışıyordur. Google'ın davranışsal modellemesi belirli veri hacmi koşulları sağlandığında devreye girer ve boşluğun bir kısmını istatistiksel olarak doldurur; düşük trafikli sitelerde modellenmiş veri hiç görünmeyebilir. Kabul oranını artırmanın meşru yolu banner metni ve tasarımını iyileştirmektir, default'u granted yapmak değildir.
Sorun 6: Google Ads dönüşümleri kayboldu
Belirti: Ads panelinde dönüşüm sayısı düştü veya "consent ayarları etkin değil" benzeri uyarı görünüyor.
Neden: Ads dönüşüm etiketi update sinyalini almadan tetikleniyor, dönüşüm sayfalarında Consent Mode hiç kurulmamış ya da AB trafiğinde sinyal gözlemlenmiyor olabilir.
Çözüm: Dönüşüm gerçekleşen sayfalarda da (teşekkür sayfası, ödeme sonrası sayfa) default ve update akışının çalıştığını Tag Assistant ile doğrulayın. Çerez yazılamadığında reklam tıklama bilgisini URL üzerinden taşıyan url_passthrough: true ayarını değerlendirin; ad_storage denied iken reklam tanımlayıcılarını temizleyen ads_data_redaction: true ayarıyla birlikte test edin. Uyarının kaybolması için panelin yeterli sinyalli trafik görmesi gerektiğinden değişiklik sonrası birkaç gün bekleyip yeniden kontrol edin.
Sorun 7: Consent Initialization sıralaması yanlış
Belirti: GTM Preview'da CMP etiketi, GA4 config etiketiyle aynı anda veya ondan sonra tetikleniyor.
Neden: CMP veya default consent etiketi standart Page View tetikleyicisine bağlanmış. GTM'in Consent Initialization tetikleyicisi tam bu iş için vardır ve container'daki diğer tüm tetikleyicilerden önce çalışır.
Çözüm: Default'u ayarlayan etiketi Consent Initialization - All Pages tetikleyicisine taşıyın; GA4, Ads ve diğer ölçüm etiketlerini Initialization veya All Pages'te bırakın. Preview'da olay sırasının "Consent Initialization → Initialization → Page View" şeklinde aktığını doğrulayın.
Sorun 8: Elle eklenmiş gtag ile GTM çakışıyor
Belirti: Aynı sayfa görüntülemesi için iki ayrı collect isteği, tutarsız gcs değerleri veya çift sayılan olaylar.
Neden: Sayfada hem hard-coded gtag.js snippet'i hem GTM üzerinden GA4 etiketi var. Default komutu bir kanalda tanımlıyken diğeri sinyalsiz çalışıyor; iki farklı default farklı değerlerle yarışıyor olabilir.
Çözüm: Tek ölçüm kanalı seçin. GTM'e geçtiyseniz sayfadaki eski gtag config satırlarını kaldırın. Default consent bloğu tek yerde, tüm kanallardan önce tanımlı kalsın.
Sorun 9-12: SPA geçişleri, iframe ve 3. taraf, server-side tagging, çift CMP
Sorun 9: SPA (tek sayfa uygulama) geçişlerinde sinyal kayboluyor
React, Vue veya Next.js gibi SPA mimarilerinde iki tuzak vardır. Birincisi: default komutu uygulamanın bootstrap aşamasında bir kez çalışmalıdır; route değişiminde tekrar default göndermek durumu sıfırlayabilir. İkincisi: sanal pageview olayları, CMP asenkron yüklenirken update'ten önce ateşlenebilir. GTM Preview'da history change olaylarını izleyin ve her sanal pageview isteğinde gcs değerinin güncel rıza durumunu taşıdığını doğrulayın. SSR kullanıyorsanız snippet'in hydration sırasında ikinci kez enjekte edilmediğini kontrol edin.
Sorun 10: iframe ve 3. taraf gömülüler rızayı görmüyor
Consent Mode sinyali ana sayfadaki Google etiketlerini yönetir; iframe içindeki 3. taraf içerikler bu sinyali otomatik devralmaz. YouTube, harita veya sosyal medya embed'leri kendi çerezlerini yazabilir. Çözüm: embed'leri rıza durumuna bağlı yükleyin (script ve iframe engelleme), video için gizlilik dostu embed alan adlarını tercih edin. Sitenizde hangi 3. taraf çerezlerinin hangi kaynaklardan yazıldığını görmek için ücretsiz çerez tarayıcı ile bir tarama çalıştırıp embed kaynaklı çerezleri listeleyebilirsiniz.
Sorun 11: Server-side tagging sinyali iletmiyor
Server-side GTM kullanıyorsanız tarayıcı, gcs ve gcd parametrelerini server container'a iletir; sunucudaki etiketlerin bu sinyale göre davranması gerekir. Yanlış yapılandırmada server container, rıza vermeyen kullanıcı için de vendor'lara istek atmaya devam edebilir. Doğrulama iki adımlıdır: server container'ın Preview modunda gelen isteklerin consent parametrelerini taşıdığını görün, ardından denied senaryosunda sunucudan çıkan isteklerin buna uygun şekilde kısıtlandığını kontrol edin.
Sorun 12: Çift CMP veya artık kalmış eski banner
Belirti: İki banner üst üste görünüyor ya da tek banner görünse de sinyaller rastgele değişiyor.
Neden: Eski bir WordPress eklentisi, tema içine gömülü bir banner veya önceki CMP script'i hâlâ sayfada. İki CMP de consent komutu gönderdiğinde son yazan kazanır ve sonuç öngörülemez olur.
Çözüm: Sayfa kaynağında ve GTM container'da consent komutu gönderen tüm bileşenleri listeleyin, tek CMP bırakın. Eski eklentiyi pasifleştirmek yetmez; script'in yüklenmediğini Network sekmesinden doğrulayın.
Yayın öncesi 10 maddelik kontrol listesi
- Default consent bloğu
<head>içinde, tüm Google etiketlerinden önce çalışıyor - Dört v2 sinyali de (ad_storage, analytics_storage, ad_user_data, ad_personalization) default'ta tanımlı
wait_for_updatemakul bir değerde (örneğin 500 ms)- Kabul, red ve kısmi onay senaryolarının üçünde de gcs beklenen değeri gösteriyor
- Update sonrası atılan yeni isteklerde gcd değeri değişiyor
- GTM'de CMP etiketi Consent Initialization tetikleyicisinde, ölçüm etiketleri ondan sonra
- Tek ölçüm kanalı var: çift gtag, çift default, çift CMP yok
- SPA route geçişlerinde sanal pageview'lar güncel rıza durumunu taşıyor
- Google Ads panelindeki Consent Mode durumu onaylı görünüyor
- Gizli pencere ve farklı bölge senaryolarıyla regresyon testi yapıldı; her banner değişikliğinde tekrarlanacak şekilde takvime bağlandı
Bu listeyi sürüm çıkışlarınızın standart bir adımı yapın: Consent Mode bir kez kurulan değil, her etiket değişikliğinde yeniden doğrulanan bir katmandır.
cerez.io SDK: otomatik sinyal eşleme ve hazır GTM akışı
Bu yazıdaki sorunların önemli bölümü, banner ile Google katmanı arasındaki elle yazılmış köprü kodundan kaynaklanır. cerez.io Cookie Consent bu köprüyü otomatikleştirir: SDK sayfaya eklendiğinde default sinyalleri denied başlatır, ziyaretçi banner'da seçim yaptığı anda dört v2 sinyalini kapsayan update çağrısını kendisi gönderir. Kategori bazlı script engelleme, Google dışındaki etiketleri (piksel, ısı haritası, embed) rıza durumuna bağlar; kurulum sayfasındaki GTM kılavuzu Consent Initialization sıralamasını adım adım gösterir. Banner değişikliklerini canlı siteye yansıtmadan önce önizleme modu ile test edebilirsiniz. Bu araçlar doğru sinyal akışını kurmanıza, ölçmenize ve belgelemenize yardımcı olur; hukuki uyumluluğun kendisi banner metinleriniz, aydınlatma süreçleriniz ve veri işleme pratiklerinizle birlikte değerlendirilmelidir.
Sıkça Sorulan Sorular
Consent Mode kurulu ama Google Ads "etkin değil" uyarısı veriyor, neden?
Kısa cevap: En sık üç neden: dönüşüm sayfalarında update sinyali gönderilmiyor (yalnızca ana sayfada test edilmiş), panelin değerlendirdiği trafikte yeterli sinyalli istek henüz birikmedi veya update dört v2 sinyalinin tamamını taşımıyor. Tag Assistant ile dönüşüm sayfasında default ve update akışını doğrulayın, eksikse düzeltin ve panelin güncellenmesi için birkaç gün bekleyin.
gcs=G100 ne anlama gelir?
Kısa cevap: "G1" önekinden sonraki ilk hane ad_storage, ikinci hane analytics_storage durumudur; G100 her iki sinyalin de denied olduğunu gösterir. Sayfa ilk açıldığında G100 görmek doğrudur (default denied çalışıyor demektir). Sorun, kullanıcı kabul ettikten sonra da değerin G100 kalmasıdır; bu, update komutunun tetiklenmediğini gösterir.
Ziyaretçi reddedince GA4'te hiç veri görünmemesi normal mi?
Kısa cevap: Basic modda evet: rıza gelmeden hiçbir veri gönderilmez. Advanced modda çerezsiz ping atılır ama bu ziyaretçiler standart raporlarda tekil kullanıcı olarak görünmez; katkıları ancak Google'ın veri hacmi koşulları sağlandığında modellenmiş veri olarak raporlara yansıyabilir. Yani red sonrası veri azalması kurulum hatası değil, beklenen davranıştır.
Doğrulamayı ne sıklıkla tekrarlamalıyım?
Kısa cevap: Üç tetikleyicide mutlaka: banner veya CMP ayarı değiştiğinde, GTM container'a yeni etiket eklendiğinde ve site altyapısında sürüm değişikliği olduğunda. Bunun dışında ayda bir hızlı kontrol (gizli pencerede üç rıza senaryosu ve gcs kontrolü) çoğu site için yeterlidir; pazarlama ekibinin GTM'e sık müdahale ettiği sitelerde sıklığı artırın.
Kaynaklar
Bu yazı teknik bilgilendirme amaçlıdır ve hukuki tavsiye değildir. KVKK ve diğer mevzuata ilişkin kararlarınız için bir hukuk danışmanına başvurun.
Sinyal akışını elle kurmak yerine otomatikleştirin. Ücretsiz başla: cerez.io SDK'yı tek satırla ekleyin, Consent Mode v2 default ve update sinyalleri otomatik eşlensin. Plan seçenekleri için fiyatlandırma sayfasına göz atın.