dataLayer İleri
1. dataLayer Nedir?
dataLayer, GTM'nin web sayfasından veri almasını sağlayan bir JavaScript nesne dizisidir (array of objects). Sayfa ile GTM arasındaki yapılandırılmış iletişim katmanıdır.
a) Teknik Yapı
dataLayer aslında basit bir JavaScript array'idir:
window.dataLayer = window.dataLayer || [];
dataLayer.push({
'event': 'page_view',
'page_type': 'product',
'user_status': 'logged_in'
});
Yukarıdaki kodu satır satır okuyalım:
window.dataLayer = window.dataLayer || [];→ "dataLayer zaten varsa onu kullan, yoksa boş bir liste oluştur." Bu satır güvenlik amaçlıdır — sayfada birden fazla script olabilir.dataLayer.push({...})→ "Bu listeye yeni bir bilgi paketi ekle."'event': 'page_view'→ "Bu bir sayfa görüntüleme olayıdır." GTM bu satırı görünce tetikleyici (trigger) devreye girer.'page_type': 'product'→ "Sayfa türü: ürün sayfası." Bu ek bilgidir, GTM isterse kullanır.'user_status': 'logged_in'→ "Kullanıcı giriş yapmış." Yine ek bilgi.
b) dataLayer.push() Mekanizması
Her dataLayer.push() çağrısı GTM'ye bir mesaj gönderir. Eğer push içinde 'event' anahtarı varsa, GTM bu event'i bir trigger olarak değerlendirir.
❌ Yanlış: "dataLayer sadece geliştiricilerin işi"
✅ Doğru: dataLayer tasarımı pazarlamacı ve geliştiricinin ortak sorumluluğudur. Pazarlamacı hangi verilerin toplanması gerektiğini (ürün adı, fiyat, kategori, kullanıcı durumu) belirler, geliştirici ise bu verileri dataLayer'a teknik olarak ekler. Pazarlamacının dataLayer yapısını anlaması, doğru veri talep etmesi ve Preview Mode'da verilerin geldiğini doğrulayabilmesi gerekir. "Ben pazarlamacıyım, kod beni ilgilendirmez" tutumu eksik veri toplamaya yol açar.
2. Data Layer Variable (Veri Katmanı Değişkeni)
GTM'de dataLayer'dan veri okumak için "Data Layer Variable" türünde değişken oluşturulur.
a) Basit Değişken
dataLayer'daki bir anahtarın değerini okur:
- Variable Name:
page_type - Okuyacağı değer:
dataLayer.push({'page_type': 'product'})→ "product"
b) İç İçe (Nested) Değişken
Nokta notasyonu ile derinlerdeki değerleri okur:
- Variable Name:
ecommerce.items.0.item_name - Bu, ecommerce nesnesinin içindeki items dizisinin ilk elemanının item_name'ini okur.
3. Zamanlama: GTM Snippet Öncesi vs Sonrası
dataLayer push'larının GTM snippet'ine göre zamanlaması kritik öneme sahiptir.
a) GTM Snippet Öncesi (Önerilen)
<!-- Sayfa yüklenirken mevcut olan veriler -->
<script>
window.dataLayer = window.dataLayer || [];
dataLayer.push({
'page_type': 'product',
'product_id': '12345',
'product_price': 299.90
});
</script>
<!-- GTM Snippet -->
<script>(function(w,d,s,l,i){...})(window,document,'script','dataLayer','GTM-XXXXX');</script>
GTM yüklendiğinde veriler zaten hazırdır. Page View trigger'ı ile birlikte kullanılabilir.
b) GTM Snippet Sonrası (Dinamik Event'ler)
Aşağıdaki kod, kullanıcı "sepete ekle" butonuna tıkladığında çalışır:
document.getElementById('add-to-cart')→ Sayfadaki "add-to-cart" ID'li butonu bul..addEventListener('click', function() {...})→ Bu butona tıklanınca şunu yap:dataLayer.push({...})→ GTM'ye bir bilgi paketi gönder.'event': 'add_to_cart'→ "Sepete ekleme olayı gerçekleşti" — GTM bu event'i tetikleyici olarak kullanır.'ecommerce': { 'items': [...] }→ Ürün detayları: ID, isim, fiyat ve miktar.
<!-- Kullanıcı etkileşimi sonrası -->
<script>
document.getElementById('add-to-cart').addEventListener('click', function() {
dataLayer.push({
'event': 'add_to_cart',
'ecommerce': {
'items': [{
'item_id': 'SKU-12345',
'item_name': 'Nike Air Max 90',
'price': 1299.00,
'quantity': 1
}]
}
});
});
</script>
'event' anahtarı kullanmayın — çünkü GTM henüz yüklenmemiştir ve event tetiklenemez. Snippet öncesi push'lar yalnızca veri taşımalıdır.
4. E-ticaret dataLayer Uygulaması
GA4 e-ticaret takibi için belirli event'lerin standart formatta dataLayer'a push'lanması gerekir.
a) view_item Örneği
dataLayer.push({ ecommerce: null })→ Önce eski e-ticaret verisini temizle (önceki sayfadan kalıntı olmasın).'event': 'view_item'→ "Kullanıcı bir ürün detay sayfasını görüntüledi."'currency': 'TRY'→ Para birimi: Türk Lirası.'value': 1299.00→ Ürünün değeri.'items': [...]→ Ürün bilgileri listesi — her ürün için ID, isim, marka, kategori, fiyat ve miktar.
dataLayer.push({ ecommerce: null }); // Önceki ecommerce verisini temizle
dataLayer.push({
'event': 'view_item',
'ecommerce': {
'currency': 'TRY',
'value': 1299.00,
'items': [{
'item_id': 'SKU-12345',
'item_name': 'Nike Air Max 90',
'item_brand': 'Nike',
'item_category': 'Ayakkabi',
'item_category2': 'Spor',
'price': 1299.00,
'quantity': 1
}]
}
});
b) add_to_cart Örneği
dataLayer.push({ ecommerce: null });
dataLayer.push({
'event': 'add_to_cart',
'ecommerce': {
'currency': 'TRY',
'value': 1299.00,
'items': [{
'item_id': 'SKU-12345',
'item_name': 'Nike Air Max 90',
'price': 1299.00,
'quantity': 1
}]
}
});
c) purchase Örneği
dataLayer.push({ ecommerce: null });
dataLayer.push({
'event': 'purchase',
'ecommerce': {
'transaction_id': 'T-98765',
'value': 2598.00,
'tax': 467.64,
'shipping': 29.90,
'currency': 'TRY',
'items': [{
'item_id': 'SKU-12345',
'item_name': 'Nike Air Max 90',
'price': 1299.00,
'quantity': 2,
'item_brand': 'Nike',
'item_category': 'Ayakkabi'
}]
}
});
dataLayer.push({ ecommerce: null }) satırını ekleyin. Bu, önceki event'ten kalan ecommerce verisinin yeni event'e karışmasını önler. GA4'ün resmi belgelerinde de bu yöntem önerilir.
- dataLayer.push() mekanizmasını anlayıp event anahtarıyla GTM trigger'larını tetikleyebilirsin.
- E-ticaret, form ve dinamik içerik verilerini dataLayer üzerinden yapılandırılmış biçimde GTM'ye aktarabilirsin.
- dataLayer değişkenlerini GTM'de tanımlayıp tag parametrelerine bağlayabilirsin.
- Geliştirici ekibe doğru dataLayer spesifikasyonu yazarak ihtiyacın olan veriyi isteyebilirsin.
