İçeriğe geç
ceaksan
gtm

GA4 E-Ticaret Etkinlikleri: dataLayer ile Eksiksiz Uygulama Rehberi

GA4 e-ticaret etkinliklerini dataLayer ile nasıl uygulayacağını, ecommerce nesnesini nasıl temizleyeceğini ve GTM yapılandırmasını adım adım öğren.

2 Nis 2019 7 dk okuma Güncellendi: 7 Nis 2026
TL;DR

GA4 e-ticaret takibi 13 standart etkinlikten oluşuyor ve her biri dataLayer.push ile tetikleniyor. Her push öncesinde ecommerce: null ile önceki veriyi temizlemek zorunlu, aksi halde GTM'in recursive merge davranışı eski ürünleri yeni etkinliklere sızdırıyor. items array'i tüm etkinliklerde ortak; item_id veya item_name zorunlu. purchase etkinliğinde transaction_id olmadan GA4 duplicate transaction'ları ayırt edemiyor. GTM tarafında Data Layer Variable Version 1 kullanmak, Version 2'nin merge sorunlarından koruyor.

GA4 e-ticaret takibi 13 standart etkinlikten oluşuyor. Her etkinlik dataLayer.push ile tetikleniyor ve items array’i ortak yapı. Her push öncesinde ecommerce: null göndermek zorunlu. Satın alma işleminde raporların sağlıklı bir şekilde çalışabilmesi için purchase etkinliğinde transaction_id kullanımı ise bir zorunluluk.

Hızlı ReferansDeğer
Toplam etkinlik sayısı13
items array limiti200 ürün/etkinlik
Zorunlu ürün alanıitem_id veya item_name
Kategori derinliği5 seviye (item_category - item_category5)
Özel item parametresiMaks. 27
info

Universal Analytics Notu

Universal Analytics (UA) 1 Temmuz 2023’te veri işlemeyi durdurdu. UA 360 mülkleri 1 Ekim 2023’te kapandı. 1 Temmuz 2024 itibarıyla tüm UA mülkleri tamamen silindi, geçmiş veriler ve API erişimi dahil. UA Enhanced Ecommerce’te kullanılan products array’i, actionField yapısı ve numaralı checkout step’leri artık geçersiz. Bu rehber yalnızca GA4 e-ticaret etkinliklerini kapsıyor.

dataLayer Ön Koşulları

dataLayer e-ticaret etkinlikleri için iki ön koşul var.

1. dataLayer initialization: GTM snippet’inden önce dataLayer array olarak tanımlanmalı.

<script>
  window.dataLayer = window.dataLayer || [];
</script>
<!-- Google Tag Manager -->

GTM snippet’i yüklendiğinde dataLayer array’ini arar. Bu satır yoksa ve ilk push çağrısı snippet’ten önce geliyorsa JavaScript hatası oluşur. dataLayer başka bir kod tarafından array olmayan bir değere atanmışsa || [] ifadesi çalışmaz, bu yaygın bir hatadır.

2. ecommerce nesnesini temizlemek: Her dataLayer.push öncesinde önceki e-ticaret verisini sıfırlamak gerekiyor.

// Önceki veriyi temizle
dataLayer.push({ ecommerce: null });

// Yeni etkinliği gönder
dataLayer.push({
  event: "view_item",
  ecommerce: {
    currency: "TRY",
    value: 299.9,
    items: [{ item_id: "SKU_001", item_name: "Ürün Adı" }],
  },
});

GTM’in Data Layer Variable mekanizması recursive merge kullanıyor. ecommerce: null olmadan, bir önceki push’taki items array’i bellekte kalıyor ve sonraki etkinliğe karışıyor. Sonuç: add_to_cart etkinliğinde aslında sepete eklenmemiş ürünler görünüyor. Özellikle SPA (Single Page Application) sitelerde bu durum daha sık yaşanıyor ve sayfa değişmediği, dataLayer resetlenmediği için her event bir önceki ecommerce verisine yeni bilgi push etmiş oluyor.

öneri

Google Tag Manager ile ilgili destek talebinde bulunabilirsin.

items Array Yapısı

GA4’te tüm e-ticaret etkinlikleri aynı items array yapısını kullanıyor1. UA’daki products, impressions gibi farklı array isimleri artık yok.

AlanTipDurumAçıklama
item_idstringBiri zorunluBenzersiz ürün ID’si (SKU)
item_namestringBiri zorunluÜrün adı
pricenumberÖnerilenBirim fiyat (tırnak içinde string değil)
quantityintegerÖnerilenAdet (tam sayı, ondalık değil)
item_brandstringOpsiyonelMarka
item_categorystringOpsiyonelAna kategori
item_category2stringOpsiyonelAlt kategori 2
item_category3stringOpsiyonelAlt kategori 3
item_category4stringOpsiyonelAlt kategori 4
item_category5stringOpsiyonelAlt kategori 5
item_variantstringOpsiyonelVaryant (renk, beden)
item_list_idstringOpsiyonelListe ID’si
item_list_namestringOpsiyonelListe adı
indexnumberOpsiyonelListedeki sıra
discountnumberOpsiyonelİndirim tutarı
couponstringOpsiyonelÜrün düzeyinde kupon
affiliationstringOpsiyonelMağaza/partner adı
location_idstringOpsiyonelGoogle Place ID
promotion_idstringOpsiyonelPromosyon ID’si
promotion_namestringOpsiyonelPromosyon adı
creative_namestringOpsiyonelBanner/görsel adı
creative_slotstringOpsiyonelGörsel konumu

Tek bir etkinlikte items array’ine maksimum 200 ürün eklenebilir. item_id veya item_name alanlarından en az biri doldurulmalı; ikisi birden kullanılması önerilir. item_name eksikse raporlarda (not set) görünür.

UA’da kategori hiyerarşisi tek bir alanda pipe ile ayrılıyordu (Erkek/Gömlekler/Spor). GA4’te her seviye ayrı bir alan: item_category ana kategori, item_category2 ile item_category5 arası alt kategoriler.

GA4 E-Ticaret Etkinlikleri

GA4 e-ticaret funnel’ı 13 etkinlikten oluşuyor2. Aşağıda funnel sırasına göre her etkinliğin yapısı ve dataLayer kodu yer alıyor.

dikkat

Bu 13 etkinlik GA4’ün önceden tanımlanmış (recommended) e-ticaret etkinlikleridir. GA4 Admin > Events bölümünden bu etkinlikleri manuel olarak oluşturmayın. dataLayer üzerinden gönderilen etkinlikler GA4 tarafından otomatik olarak tanınır. GA4 UI’dan aynı isimle event oluşturulursa duplicate veri oluşur ve e-ticaret raporları bozulur.

Keşif Aşaması

view_item_list

Kullanıcı bir ürün listesini (kategori sayfası, arama sonuçları, önerilen ürünler) görüntülediğinde tetiklenir.

dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: "view_item_list",
  ecommerce: {
    item_list_id: "kategori_erkek_gomlek",
    item_list_name: "Erkek Gömlekleri",
    items: [
      {
        item_id: "SKU_001",
        item_name: "Oxford Gömlek",
        price: 449.9,
        item_brand: "Marka A",
        item_category: "Giyim",
        item_category2: "Erkek",
        item_category3: "Gömlekler",
        item_variant: "Mavi / M",
        index: 0,
        quantity: 1,
      },
      {
        item_id: "SKU_002",
        item_name: "Keten Gömlek",
        price: 379.9,
        item_brand: "Marka B",
        item_category: "Giyim",
        item_category2: "Erkek",
        item_category3: "Gömlekler",
        item_variant: "Beyaz / L",
        index: 1,
        quantity: 1,
      },
    ],
  },
});

select_item

Kullanıcı listeden bir ürüne tıkladığında tetiklenir. Tıklanan ürünün hangi listeden geldiğini item_list_name ile ilişkilendirmek funnel analizinde kritik öneme sahip.

dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: "select_item",
  ecommerce: {
    item_list_id: "kategori_erkek_gomlek",
    item_list_name: "Erkek Gömlekleri",
    items: [
      {
        item_id: "SKU_001",
        item_name: "Oxford Gömlek",
        price: 449.9,
        item_brand: "Marka A",
        item_category: "Giyim",
        item_category2: "Erkek",
        item_category3: "Gömlekler",
        item_variant: "Mavi / M",
        index: 0,
        quantity: 1,
      },
    ],
  },
});

view_item

Kullanıcı ürün detay sayfasını görüntülediğinde tetiklenir. currency ve value alanları burada zorunlu.

dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: "view_item",
  ecommerce: {
    currency: "TRY",
    value: 449.9,
    items: [
      {
        item_id: "SKU_001",
        item_name: "Oxford Gömlek",
        price: 449.9,
        item_brand: "Marka A",
        item_category: "Giyim",
        item_category2: "Erkek",
        item_category3: "Gömlekler",
        item_variant: "Mavi / M",
        quantity: 1,
      },
    ],
  },
});

Promosyon Etkinlikleri

view_promotion

Bir promosyon banner’ı veya kampanya alanı kullanıcının görüş alanına girdiğinde tetiklenir.

dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: "view_promotion",
  ecommerce: {
    items: [
      {
        item_id: "SKU_001",
        item_name: "Oxford Gömlek",
        promotion_id: "yaz_kampanyasi_2026",
        promotion_name: "Yaz İndirimi %30",
        creative_name: "hero_banner_yaz",
        creative_slot: "anasayfa_slot_1",
        price: 449.9,
        discount: 134.97,
        quantity: 1,
      },
    ],
  },
});

select_promotion

Kullanıcı promosyon banner’ına tıkladığında tetiklenir.

dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: "select_promotion",
  ecommerce: {
    items: [
      {
        item_id: "SKU_001",
        item_name: "Oxford Gömlek",
        promotion_id: "yaz_kampanyasi_2026",
        promotion_name: "Yaz İndirimi %30",
        creative_name: "hero_banner_yaz",
        creative_slot: "anasayfa_slot_1",
        price: 449.9,
        discount: 134.97,
        quantity: 1,
      },
    ],
  },
});

Sepet Aşaması

add_to_cart

Ürün sepete eklendiğinde tetiklenir. currency ve value zorunlu.

dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: "add_to_cart",
  ecommerce: {
    currency: "TRY",
    value: 449.9,
    items: [
      {
        item_id: "SKU_001",
        item_name: "Oxford Gömlek",
        price: 449.9,
        item_brand: "Marka A",
        item_category: "Giyim",
        item_category2: "Erkek",
        item_category3: "Gömlekler",
        item_variant: "Mavi / M",
        quantity: 1,
      },
    ],
  },
});

remove_from_cart

Ürün sepetten çıkarıldığında tetiklenir.

dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: "remove_from_cart",
  ecommerce: {
    currency: "TRY",
    value: 449.9,
    items: [
      {
        item_id: "SKU_001",
        item_name: "Oxford Gömlek",
        price: 449.9,
        item_brand: "Marka A",
        item_category: "Giyim",
        item_variant: "Mavi / M",
        quantity: 1,
      },
    ],
  },
});

view_cart

Kullanıcı sepet sayfasını görüntülediğinde tetiklenir. UA’da karşılığı yoktu, GA4’e yeni eklendi.

dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: "view_cart",
  ecommerce: {
    currency: "TRY",
    value: 829.8,
    items: [
      {
        item_id: "SKU_001",
        item_name: "Oxford Gömlek",
        price: 449.9,
        quantity: 1,
      },
      {
        item_id: "SKU_002",
        item_name: "Keten Gömlek",
        price: 379.9,
        quantity: 1,
      },
    ],
  },
});

Ödeme Aşaması

UA’da ödeme süreci numaralı step’lerle takip ediliyordu (checkout_step: 1, 2, 3). GA4’te her adım ayrı bir etkinlik.

begin_checkout

Kullanıcı ödeme sürecini başlattığında tetiklenir.

dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: "begin_checkout",
  ecommerce: {
    currency: "TRY",
    value: 829.8,
    coupon: "YAZ2026",
    items: [
      {
        item_id: "SKU_001",
        item_name: "Oxford Gömlek",
        price: 449.9,
        quantity: 1,
      },
      {
        item_id: "SKU_002",
        item_name: "Keten Gömlek",
        price: 379.9,
        quantity: 1,
      },
    ],
  },
});

add_shipping_info

Kullanıcı kargo seçeneğini belirlediğinde tetiklenir. shipping_tier zorunlu.

dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: "add_shipping_info",
  ecommerce: {
    currency: "TRY",
    value: 829.8,
    coupon: "YAZ2026",
    shipping_tier: "Standart Kargo",
    items: [
      {
        item_id: "SKU_001",
        item_name: "Oxford Gömlek",
        price: 449.9,
        quantity: 1,
      },
      {
        item_id: "SKU_002",
        item_name: "Keten Gömlek",
        price: 379.9,
        quantity: 1,
      },
    ],
  },
});

add_payment_info

Kullanıcı ödeme yöntemini seçtiğinde tetiklenir.

dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: "add_payment_info",
  ecommerce: {
    currency: "TRY",
    value: 829.8,
    coupon: "YAZ2026",
    payment_type: "Kredi Kartı",
    items: [
      {
        item_id: "SKU_001",
        item_name: "Oxford Gömlek",
        price: 449.9,
        quantity: 1,
      },
      {
        item_id: "SKU_002",
        item_name: "Keten Gömlek",
        price: 379.9,
        quantity: 1,
      },
    ],
  },
});

Satış ve Satış Sonrası

purchase

Sipariş tamamlandığında tetiklenir. transaction_id, currency ve value zorunlu. transaction_id olmazsa sayfa yenilemelerinde duplicate gelir oluşur.

dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: "purchase",
  ecommerce: {
    transaction_id: "SIP-20260407-001",
    value: 829.8,
    tax: 149.36,
    shipping: 29.9,
    currency: "TRY",
    coupon: "YAZ2026",
    items: [
      {
        item_id: "SKU_001",
        item_name: "Oxford Gömlek",
        price: 449.9,
        item_brand: "Marka A",
        item_category: "Giyim",
        item_category2: "Erkek",
        item_category3: "Gömlekler",
        item_variant: "Mavi / M",
        quantity: 1,
      },
      {
        item_id: "SKU_002",
        item_name: "Keten Gömlek",
        price: 379.9,
        item_brand: "Marka B",
        item_category: "Giyim",
        item_category2: "Erkek",
        item_category3: "Gömlekler",
        item_variant: "Beyaz / L",
        quantity: 1,
      },
    ],
  },
});
dikkat

value alanının vergi ve kargo dahil mi yoksa net tutar mı olduğu konusunda tutarlı olmak gerekiyor. GA4 Monetization raporları toplam geliri `value + tax

  • shippingolarak hesaplıyor. Eğervalueiçinde vergi zaten varsa vetax` alanını da ayrıca gönderirsen, gelir çift sayılır.

refund

Tam veya kısmi iade yapıldığında tetiklenir. Tam iade için transaction_id yeterli. Kısmi iadede iade edilen ürünler items array’inde belirtilmeli.

// Tam iade
dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: "refund",
  ecommerce: {
    currency: "TRY",
    transaction_id: "SIP-20260407-001",
  },
});

// Kısmi iade
dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: "refund",
  ecommerce: {
    currency: "TRY",
    transaction_id: "SIP-20260407-001",
    value: 449.9,
    items: [
      {
        item_id: "SKU_001",
        item_name: "Oxford Gömlek",
        price: 449.9,
        quantity: 1,
      },
    ],
  },
});

Etkinlik Parametreleri Referans Tablosu

EtkinlikZorunlu ParametrelerOpsiyonel Parametreler
view_item_list-item_list_id, item_list_name
select_item-item_list_id, item_list_name
view_itemcurrency, value-
view_promotion-promotion_id, promotion_name, creative_name, creative_slot
select_promotion-promotion_id, promotion_name, creative_name, creative_slot
add_to_cartcurrency, value-
remove_from_cartcurrency, value-
view_cartcurrency, value-
begin_checkoutcurrency, valuecoupon
add_shipping_infocurrency, value, shipping_tiercoupon
add_payment_infocurrency, valuepayment_type, coupon
purchasecurrency, value, transaction_idtax, shipping, coupon, affiliation
refundcurrency, transaction_idvalue, tax, shipping, coupon

Tüm etkinliklerde items array’i gereklidir. Her item’da item_id veya item_name alanlarından en az biri doldurulmalıdır.

Event Boyut Limitleri

GA4 etkinliklerinin boyut ve parametre limitleri var. Bu limitleri aşan veriler sessizce kesilir veya düşürülür; HTTP hatası dönmez3.

LimitStandartGA4 360
Etkinlik adı uzunluğu40 karakter40 karakter
Etkinlik başına parametre25100
Parametre adı uzunluğu40 karakter40 karakter
Parametre değeri uzunluğu (string)100 karakter500 karakter
items array limiti200 öğe200 öğe
Event-scoped custom dimension50125
Item-scoped custom dimension1025
User-scoped custom dimension25100
Measurement Protocol payload130 KB130 KB

Limitler aşıldığında GA4’ün davranışı:

  • Etkinlik adı geçersiz/çok uzun: Etkinlik tamamen düşürülür, firebase_error etkinliği loglanır
  • Parametre adı geçersiz/çok uzun: Parametre firebase_error ile değiştirilir
  • Parametre değeri çok uzun: Değer sessizce kesilir (truncation), hata verilmez
  • 25’ten fazla parametre: Fazla parametreler düşürülür
  • 200’den fazla item: Array 200’e kesilir
  • 27’den fazla özel item parametresi: Fazlası düşürülür

item_name ve item_variant gibi string alanlarda 100 karakter limitine dikkat etmek gerekiyor. Uzun ürün adları sessizce kesilir ve raporlarda eksik görünür. Measurement Protocol ile gönderilen isteklerde toplam payload 130 KB’ı aşarsa istek reddedilir4.

Currency ve Raporlama

GA4’te iki farklı currency kavramı var: etkinlikle gönderilen currency parametresi ve GA4 property düzeyindeki raporlama para birimi.

Raporlama para birimi GA4 Admin > Property Settings > Currency bölümünden belirleniyor. Gönderilen currency ile raporlama currency’si farklıysa, GA4 otomatik dönüşüm yapıyor. Bu dönüşüm Google Finance kurlarına dayanıyor ve gerçek zamanlı değil, günde bir güncelleniyor.

Dikkat edilmesi gerekenler:

  • Tüm etkinliklerde aynı currency kodu göndermek tutarlılık açısından önemli. Bir etkinlikte TRY, diğerinde USD göndermek funnel raporlarında yanıltıcı sonuçlar üretir.
  • Gönderilen currency ile GA4 property raporlama currency’si eşleşmiyorsa, dönüşüm kuru kaynaklı küçük sapmalar oluşabilir.
  • currency parametresi olmadan gönderilen value değerleri Monetization raporlarında görünmez.
  • Çoklu para birimi destekleyen e-ticaret sitelerinde, her etkinlikte doğru currency kodunu göndermek ve GA4 property raporlama currency’sini ana para birimine ayarlamak en güvenli yaklaşım.

Yaygın Hatalar

1. ecommerce nesnesini temizlememek. Detay için yukarıdaki dataLayer Ön Koşulları bölümüne bakılabilir. ecommerce: null push’u atlandığında GTM’in recursive merge davranışı önceki etkinlikteki ürünleri yeni etkinliğe sızdırır1.

2. price ve value alanlarında string kullanmak. price: "449.90" veya value: "829.80 TRY" sessizce başarısız olur. GA4 bu alanları sayısal tip olarak bekler1. Doğrusu: price: 449.90 (tırnaksız) ve currency: "TRY" (ayrı alan).

3. currency alanını atlamak. Detay için yukarıdaki Currency ve Raporlama bölümüne bakılabilir. currency olmadan gönderilen value değerleri Monetization raporlarında görünmez1.

4. transaction_id eksikliği. transaction_id olmadan GA4 duplicate transaction tespiti yapamaz2. Kullanıcı teşekkür sayfasını yenilediğinde purchase etkinliği tekrar tetiklenir ve gelir verisi katlanır; gözlemlediğim aralık 2-4 kat, kullanıcının yenileme davranışına bağlı. Her siparişe benzersiz bir transaction_id atanmalı.

5. quantity alanında ondalık değer kullanmak. quantity: 1.5 GA4 Monetization raporlarında gelir hesaplamalarını bozar. quantity her zaman tam sayı (integer) olmalı1.

6. Zamanlama hatası. GTM tag’ı DOM Ready trigger’ı ile tetikleniyorsa ama e-ticaret verisi daha sonra push ediliyorsa, tag boş veri yakalar. Veri her zaman trigger tetiklenmeden önce dataLayer’da hazır olmalı.

7. GTM’de Data Layer Variable Version 2 kullanmak. Version 2 recursive merge uyguladığı için önceki push’taki items sonrakiyle birleşir. E-ticaret items array’i için Version 1 kullanılmalı. GTM Template Gallery’deki Knowit Experience DLV v1 şablonu bu sorunu otomatik çözer.

8. dataLayer’ı GTM snippet’inden önce başlatmamak. window.dataLayer = window.dataLayer || [] satırı GTM container kodundan önce <head> içinde yer almalı5. Aksi halde GTM yüklenmeden yapılan push’lar kaybolur.

9. GA4 UI’dan etkinlik oluşturmak. Bu 13 etkinlik GA4’ün recommended event’leri olduğu için dataLayer’dan gönderildiğinde otomatik tanınır2. GA4 Admin > Events bölümünden aynı isimle manuel event oluşturmak duplicate veri yaratır.

GTM Yapılandırması

GA4 e-ticaret etkinliklerini GTM üzerinden göndermek için üç bileşen gerekiyor: tag, trigger ve variable.

Tag

  • Tip: Google Analytics: GA4 Event
  • Etkinlik adı: Tam olarak GA4’ün beklediği isim (purchase, add_to_cart gibi)
  • Parametreler: Her parametre Data Layer Variable ile eşlenmeli

UA Enhanced Ecommerce’te GTM’de “Use Data Layer” checkbox’ı vardı ve ecommerce nesnesini otomatik okuyordu. GA4’te bu checkbox yok. Her parametreyi (items, currency, value, transaction_id) tag’ın parametre tablosunda manuel olarak eşlemek gerekiyor.

Trigger

  • Tip: Custom Event
  • Etkinlik adı: dataLayer push’taki event anahtarıyla birebir eşleşmeli (ör. purchase)

Variable

Her ecommerce parametresi için ayrı Data Layer Variable oluşturulmalı:

Variable AdıData Layer Variable Path
DLV - ecommerce.itemsecommerce.items
DLV - ecommerce.currencyecommerce.currency
DLV - ecommerce.valueecommerce.value
DLV - ecommerce.transaction_idecommerce.transaction_id
DLV - ecommerce.taxecommerce.tax
DLV - ecommerce.shippingecommerce.shipping
DLV - ecommerce.couponecommerce.coupon
DLV - ecommerce.shipping_tierecommerce.shipping_tier
DLV - ecommerce.payment_typeecommerce.payment_type

ecommerce.items variable’ı için Version 1 kullanılmalı. Diğer alanlar için Version 2 güvenlidir.

Debug

Etkinliklerin doğru tetiklenip tetiklenmediğini kontrol etmek için:

  • GTM Preview mode: Tag’ların hangi trigger ile tetiklendiğini, hangi variable değerlerinin gönderildiğini gösterir
  • GA4 DebugView: GA4 Admin > DebugView ile gerçek zamanlı etkinlikleri izleyebilirsin. debug_mode: true parametresini gtag config’e ekleyerek veya GTM Preview mode aktifken otomatik aktif olur
  • dataslayer eklentisi: Chrome Console üzerinden dataLayer push’larını anlık izler6

Veri Doğruluğu Beklentisi

Client-side analytics’te %100 doğruluk mümkün değil. Ad blocker’lar, tarayıcı gizlilik özellikleri ve consent rejection nedeniyle veri kaybı kaçınılmaz. Gerçek kayıp oranı siteye, coğrafyaya ve consent uygulamasına göre değişiyor. Backend sipariş verisi ile GA4 e-ticaret verisi arasındaki fark, implementasyonun doğruluğunu değerlendirmek için temel karşılaştırma noktası.

Server-side tagging (sGTM) bu kaybı azaltmak için kullanılabiliyor7. sGTM ile GA4 etkinlikleri sunucu tarafından gönderildiğinde client-side engelleyiciler devre dışı kalıyor. Ancak bu ayrı bir altyapı gerektiriyor.

GA4 E-Ticaret dataLayer Kurulumuna Destek

ecommerce: null disiplini, transaction_id, items array doğrulaması ve GTM tag/trigger/variable kurgusu. Mağazana özel implementasyon + DebugView doğrulaması ile teslim ediyorum.

İletişime Geç

Footnotes

  1. Measure ecommerce. Google Developers 2 3 4 5
  2. GA4 Recommended Events. Google Analytics Help 2 3
  3. GA4 Collection Limits. Google Analytics Help
  4. Measurement Protocol Limitations. Google Developers
  5. Set up data collection for websites. Google Developers
  6. dataslayer. Chrome Web Mağazası
  7. Server-side tagging. Google Tag Manager Help
Önemli Noktalar
  • 01 Her dataLayer.push öncesinde ecommerce: null göndermek zorunlu, GTM recursive merge nedeniyle eski veriler sızar
  • 02 items array'inde item_id veya item_name alanlarından en az biri gerekli
  • 03 purchase etkinliğinde transaction_id eksikse sayfa yenilemelerinde gelir şişer; gözlemlediğim aralık 2-4 kat
  • 04 price ve value alanları tırnak içinde string olmamalı, sayısal değer olmalı
  • 05 GTM'de GA4 ecommerce için Data Layer Variable Version 1 kullanılmalı, Version 2 merge sorunu yaratır
  • 06 currency alanı olmadan Monetization raporlarında veri görünmez
  • 07 GA4 UI'dan bu etkinlikleri manuel oluşturmayın, dataLayer'dan gelen verilerle duplicate oluşur
Sık Sorulan Sorular (FAQ)
+ GA4'te Enhanced Ecommerce hâlâ var mı?

Hayır. Universal Analytics'teki Enhanced Ecommerce ayrı bir özellikti ve etkinleştirilmesi gerekiyordu. GA4'te e-ticaret takibi standart etkinlik modelinin parçası; ayrı bir toggle yok. GA4, view_item_list'ten purchase'a kadar 13 önceden tanımlanmış etkinlik adı kullanıyor.

+ ecommerce: null neden her push öncesinde gerekli?

GTM'in Data Layer Variable mekanizması recursive merge kullanıyor. Bir önceki push'taki items array'i bellekte kalıyor ve sonraki etkinliğe karışıyor. ecommerce: null ile önceki veriyi sıfırlamak, yanlış ürün verisi raporlanmasını önlüyor.

+ transaction_id göndermesem ne olur?

GA4 duplicate transaction tespitini transaction_id üzerinden yapıyor. Bu alan eksikse, kullanıcı teşekkür sayfasını her yenilediğinde purchase etkinliği tekrar tetiklenir ve gelir şişer. Müşteri projelerinde gözlemlediğim aralık 2-4 kat, yenileme davranışına bağlı.

+ currency alanı neden zorunlu?

currency olmadan GA4 Monetization raporlarında e-ticaret verisi görünmez. value alanı ile birlikte currency her zaman gönderilmeli. ISO 4217 formatında: TRY, USD, EUR.

+ GTM'de Data Layer Variable Version 1 ile Version 2 arasındaki fark nedir?

Version 2, dataLayer push'larını recursive merge ile birleştirir; bu da önceki push'taki items array'inin sonraki push ile birleşmesine neden olur. Version 1 yalnızca en son push'u okur, bu yüzden ecommerce items için Version 1 daha güvenlidir.

+ GA4 e-ticaret etkinliklerinde kaç ürün gönderilebilir?

Tek bir etkinlikte items array'ine maksimum 200 ürün eklenebilir. Daha fazla ürün varsa birden fazla etkinlik olarak bölünmeli.

+ Gönderilen currency ile GA4 raporlama currency'si farklıysa ne olur?

GA4 raporlama para birimini GA4 Admin > Property Settings > Currency bölümünden belirliyor. Gönderilen currency farklıysa GA4 otomatik dönüşüm yapıyor. Ancak bu dönüşüm Google Finance kurlarına dayanıyor ve gerçek zamanlı değil. Tutarlılık için tüm etkinliklerde aynı currency gönderilmesi ve bu currency'nin GA4 property ayarlarıyla eşleşmesi önerilir.

+ Bu etkinlikleri GA4 UI'dan da oluşturmam gerekiyor mu?

Hayır. Bu 13 etkinlik GA4'ün önceden tanımlanmış (recommended) etkinlikleridir. dataLayer üzerinden gönderildiklerinde GA4 otomatik olarak tanır. GA4 Admin > Events bölümünden aynı isimle manuel event oluşturulursa duplicate veri oluşur ve raporlar bozulur.