Ana Sayfa / Seviye 3 / GTM / dataLayer İleri

dataLayer İleri

📚 Seviye 3 — Uzmanlaşma ⏱ ~15 dakika

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'
});

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.

graph LR WEB["🌐 Web Sayfası"] -->|"dataLayer.push()"| DL["📦 dataLayer\n(JS Array)"] DL -->|"Event tetiklenir"| GTM["🏷 GTM Container"] GTM -->|"Trigger eşleşirse"| TAGS["📊 Tag'ler Ateşlenir\n(GA4, Meta, vb.)"] style WEB fill:#E8F6FC,stroke:#29ABE2 style DL fill:#DCFCE7,stroke:#22C55E style GTM fill:#FEF3C7,stroke:#F59E0B
🎯 Benzetme: dataLayer bir posta kutusu gibidir. Web sitesi (gönderici) mektupları (verileri) posta kutusuna bırakır. GTM (postacı) kutuyu kontrol eder ve mektupları doğru alıcılara (tag'lere) iletir.

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:

b) İç İçe (Nested) Değişken

Nokta notasyonu ile derinlerdeki değerleri 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)

<!-- 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>
⚠️ Uyarı: GTM snippet'inden önce yapılan push'larda '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.

graph LR FLOW["🛒 E-ticaret Akışı"] --> VI["view_item\nÜrün detay sayfası"] VI --> ATC["add_to_cart\nSepete ekleme"] ATC --> BC["begin_checkout\nÖdeme başlatma"] BC --> AP["add_payment_info\nÖdeme bilgisi"] AP --> PUR["purchase\nSatın alma"] style VI fill:#E8F6FC,stroke:#29ABE2 style ATC fill:#DCFCE7,stroke:#22C55E style PUR fill:#FEF3C7,stroke:#F59E0B

a) view_item Örneği

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'
    }]
  }
});
💡 İpucu: Her e-ticaret push'undan önce 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.
sequenceDiagram participant P as Sayfa participant DL as dataLayer participant GTM as GTM participant GA4 as GA4 P->>DL: push({ecommerce: null}) P->>DL: push({event: 'purchase', ecommerce: {...}}) DL->>GTM: Custom Event: purchase GTM->>GTM: Trigger eşleşir GTM->>GA4: purchase event + items gönder

📝 Quiz — Bilgini Test Et

← Önceki Ders Sonraki Ders →