Event görünüyor ama parametreler boş geliyorsa sorun çoğu zaman etikette değil, data layer tarafındadır. GTM’de sağlam ölçüm kurmak istiyorsanız, veri akışını DOM’dan çekmek yerine yapılandırılmış bir katmandan beslemeniz gerekir.
2026’da doğru yaklaşım daha net: sayfa veriyi üretir, data layer taşır, GTM okur, GA4’e gönderir. Bu yapı hem hata ayıklamayı hızlandırır hem de consent, e-ticaret ve server-side senaryolarında işi temiz tutar.
Data layer ne yapar, GTM ile nasıl konuşur?
Data layer, sayfadaki verileri anahtar-değer mantığıyla GTM’e ileten JavaScript dizisidir. Sayfa veya uygulama bir olay üretir, siz de bunu dataLayer.push() ile itersiniz. GTM bu veriyi üç parçayla işler: değişken değeri okur, tetikleyici olayı dinler, etiket veriyi GA4’e yollar.

Kurulumun temel kuralı basit: window.dataLayer GTM yüklenmeden önce tanımlanmalı. Google’ın data layer dokümantasyonu da bunu açık söylüyor. Aynı dokümanda bir uyarı daha var, window.dataLayer değişkenini sonradan sıfırlamayın.
window.dataLayer = [];yazmak, daha önce biriken veriyi silebilir. Güvenli kalıpwindow.dataLayer = window.dataLayer || [];olmalı.
Aşağıdaki ilişkiyi net kurduğunuzda GTM tarafı kolaylaşır:
| Katman | Ne yapar? | GTM’deki karşılığı |
|---|---|---|
| Data layer | Veriyi taşır | Kaynak |
| Variable | Anahtarı okur | ecommerce.value, user_id |
| Trigger | Olayı dinler | add_to_cart, purchase |
| Tag | Veriyi yollar | GA4 Event |
Kısa özet şu: data layer olmadan da bazı takipler yapılır, ama ölçekli ve güvenilir kurulum için bu yol zayıf kalır. Form başarı durumu, giriş bilgisi, ürün verisi, sepet değeri gibi alanlarda düzenli bir veri katmanı şarttır.
Google Tag Manager data layer kurulumu adım adım
İlk adım, sayfada GTM kodundan önce şu kalıbı çalıştırmaktır: window.dataLayer = window.dataLayer || [];. Sonra sayfanın ilk bağlamını itersiniz. Örneğin ürün detay sayfasında page_type, user_login_state veya item_id gibi alanlar ilk yüklemede gönderilebilir.
GTM tarafında önce bir GA4 Configuration etiketi kurun ve tüm sayfalarda çalıştırın. Sonra data layer anahtarlarını okuyacak Data Layer Variable’ları açın. İç içe yapılar için nokta yolu kullanın, mesela ecommerce.value, ecommerce.currency, ecommerce.items.
GTM değişken, tetikleyici ve etiket eşlemesi
Kurulum sırası pratikte şöyle ilerler:
- Sayfaya veri itilir, örnek olay adı
add_to_cart. - GTM’de bir Custom Event trigger açılır ve event adı
add_to_cartolur. - Data Layer Variable’lar ilgili alanları okur.
- GA4 Event etiketi aynı event adıyla çalışır.
- Parametreler, data layer değişkenlerinden eşlenir.
Örnek bir eşleme şöyle görünür: event adı add_to_cart, parametre currency için ecommerce.currency, parametre value için ecommerce.value, parametre items için ecommerce.items. GA4’te önerilen event adlarını korumak önemli, çünkü raporlar ve e-ticaret kartları bu standarda göre daha temiz çalışır. Event adları için GA4 etkinlik oluşturma rehberi iyi bir referanstır.
Bu aşamada ileride sunucu tarafına geçmeyi planlıyorsanız, veri isimlerini baştan düzenli tutun. Çünkü Server-side tagging GTM kurulumu sırasında da aynı veri sözlüğü işinizi kolaylaştırır.
JavaScript ile dataLayer.push örnekleri
Teori burada bitiyor, işin kritik kısmı uygulama. İlk örnek, ürün görüntüleme olayıdır: dataLayer.push({event:"view_item", ecommerce:{currency:"TRY", value:1299, items:[{item_id:"SKU_123", item_name:"Koşu Ayakkabısı", price:1299, quantity:1}]}});

Sepete ekleme için mantık aynıdır, sadece event adı değişir: dataLayer.push({event:"add_to_cart", ecommerce:{currency:"TRY", value:1299, items:[{item_id:"SKU_123", item_name:"Koşu Ayakkabısı", price:1299, quantity:1}]}}); GTM’de Custom Event trigger add_to_cart olur. GA4 Event etiketi de add_to_cart adıyla gönderilir. items parametresi dizi olmalı, tek nesne göndermeyin.
Sipariş tamamlandığında daha zengin veri gerekir: dataLayer.push({event:"purchase", ecommerce:{transaction_id:"T2026_001", currency:"TRY", value:2598, tax:200, shipping:0, items:[{item_id:"SKU_123", item_name:"Koşu Ayakkabısı", price:1299, quantity:2}]}}); Burada GA4 eşlemesi doğrudandır. transaction_id, value, currency ve items aynı isimlerle etikete bağlanır.
E-ticaret dışı örnek de sık kullanılır. Başarılı form gönderiminde dataLayer.push({event:"generate_lead", form_name:"teklif_formu", form_id:"quote_01"}); gönderebilirsiniz. Sonra GTM’de form_name ve form_id için değişken açar, GA4 Event etiketine parametre olarak eklersiniz. Benzer bir kurgu için Türkçe bir GA4 e-ticaret data layer örneği de faydalı olabilir.
Kurulum sonrası test ve sık yapılan hatalar
Preview açmadan yayınlamak, karanlıkta iş yapmaktır. Önce GTM Preview ile siteyi Tag Assistant’a bağlayın. Sonra ilgili aksiyonu yapın ve soldaki event akışında doğru olayın düştüğünü görün. Event’e tıklayın, “Variables” sekmesinde değerlerin dolu geldiğini kontrol edin. Burada boşsa sorun GTM’de değil, veri kaynağındadır.

Tarayıcı konsolunda window.dataLayer veya dataLayer[dataLayer.length-1] ile son push’u görün. Son aşamada GA4 DebugView’da event ve parametreleri doğrulayın. Bu akışı daha ayrıntılı görmek isterseniz Tag Assistant ile GA4 testleri iyi bir başvuru sayfasıdır.
En sık kırılan noktalar
- Yanlış anahtar adları kullanılır.
item_idyerineidgönderirseniz GA4 raporu bozulabilir. - Push zamanlaması hatalı olur. Event, kullanıcı aksiyonundan önce ya da sayfa kapanırken kaybolur.
- Veri tipleri karışır.
valuesayı olmalı,"1299"gibi string olmamalı. - Yinelenen event’ler oluşur. Aynı tıklamada hem tema kodu hem özel script push atabilir.
undefineddeğerler taşınır. GTM değişkeni boş kalır, GA4’e eksik parametre gider.- Consent engelleri atlanır. Consent Mode V2 yoksa event Preview’da görünür, fakat GA4 isteği gitmeyebilir.
Sonuç
Sağlam bir Google Tag Manager data layer kurulumu, GTM’de daha az tahmin ve daha çok kontrol demektir. Değişken, tetikleyici ve etiket zinciri net olduğunda GA4 event’leri tutarlı çalışır.
İyi kurulumun ölçüsü basittir: aynı event’i Preview, konsol ve DebugView’da aynı veriyle görürsünüz. İlk doğru event’i kurduğunuzda, kalan takipler çok daha hızlı ilerler.