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ı Referans | Değer |
|---|---|
| Toplam etkinlik sayısı | 13 |
| items array limiti | 200 ürün/etkinlik |
| Zorunlu ürün alanı | item_id veya item_name |
| Kategori derinliği | 5 seviye (item_category - item_category5) |
| Özel item parametresi | Maks. 27 |
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.
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.
| Alan | Tip | Durum | Açıklama |
|---|---|---|---|
item_id | string | Biri zorunlu | Benzersiz ürün ID’si (SKU) |
item_name | string | Biri zorunlu | Ürün adı |
price | number | Önerilen | Birim fiyat (tırnak içinde string değil) |
quantity | integer | Önerilen | Adet (tam sayı, ondalık değil) |
item_brand | string | Opsiyonel | Marka |
item_category | string | Opsiyonel | Ana kategori |
item_category2 | string | Opsiyonel | Alt kategori 2 |
item_category3 | string | Opsiyonel | Alt kategori 3 |
item_category4 | string | Opsiyonel | Alt kategori 4 |
item_category5 | string | Opsiyonel | Alt kategori 5 |
item_variant | string | Opsiyonel | Varyant (renk, beden) |
item_list_id | string | Opsiyonel | Liste ID’si |
item_list_name | string | Opsiyonel | Liste adı |
index | number | Opsiyonel | Listedeki sıra |
discount | number | Opsiyonel | İndirim tutarı |
coupon | string | Opsiyonel | Ürün düzeyinde kupon |
affiliation | string | Opsiyonel | Mağaza/partner adı |
location_id | string | Opsiyonel | Google Place ID |
promotion_id | string | Opsiyonel | Promosyon ID’si |
promotion_name | string | Opsiyonel | Promosyon adı |
creative_name | string | Opsiyonel | Banner/görsel adı |
creative_slot | string | Opsiyonel | Gö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.
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,
},
],
},
});
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
- shipping
olarak 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
| Etkinlik | Zorunlu Parametreler | Opsiyonel Parametreler |
|---|---|---|
view_item_list | - | item_list_id, item_list_name |
select_item | - | item_list_id, item_list_name |
view_item | currency, value | - |
view_promotion | - | promotion_id, promotion_name, creative_name, creative_slot |
select_promotion | - | promotion_id, promotion_name, creative_name, creative_slot |
add_to_cart | currency, value | - |
remove_from_cart | currency, value | - |
view_cart | currency, value | - |
begin_checkout | currency, value | coupon |
add_shipping_info | currency, value, shipping_tier | coupon |
add_payment_info | currency, value | payment_type, coupon |
purchase | currency, value, transaction_id | tax, shipping, coupon, affiliation |
refund | currency, transaction_id | value, 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.
| Limit | Standart | GA4 360 |
|---|---|---|
| Etkinlik adı uzunluğu | 40 karakter | 40 karakter |
| Etkinlik başına parametre | 25 | 100 |
| Parametre adı uzunluğu | 40 karakter | 40 karakter |
| Parametre değeri uzunluğu (string) | 100 karakter | 500 karakter |
| items array limiti | 200 öğe | 200 öğe |
| Event-scoped custom dimension | 50 | 125 |
| Item-scoped custom dimension | 10 | 25 |
| User-scoped custom dimension | 25 | 100 |
| Measurement Protocol payload | 130 KB | 130 KB |
Limitler aşıldığında GA4’ün davranışı:
- Etkinlik adı geçersiz/çok uzun: Etkinlik tamamen düşürülür,
firebase_erroretkinliği loglanır - Parametre adı geçersiz/çok uzun: Parametre
firebase_errorile 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ı
currencykodu göndermek tutarlılık açısından önemli. Bir etkinlikteTRY, diğerindeUSDgöndermek funnel raporlarında yanıltıcı sonuçlar üretir. - Gönderilen
currencyile GA4 property raporlama currency’si eşleşmiyorsa, dönüşüm kuru kaynaklı küçük sapmalar oluşabilir. currencyparametresi olmadan gönderilenvaluedeğerleri Monetization raporlarında görünmez.- Çoklu para birimi destekleyen e-ticaret sitelerinde, her etkinlikte doğru
currencykodunu 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_cartgibi) - 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
eventanahtarı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.items | ecommerce.items |
| DLV - ecommerce.currency | ecommerce.currency |
| DLV - ecommerce.value | ecommerce.value |
| DLV - ecommerce.transaction_id | ecommerce.transaction_id |
| DLV - ecommerce.tax | ecommerce.tax |
| DLV - ecommerce.shipping | ecommerce.shipping |
| DLV - ecommerce.coupon | ecommerce.coupon |
| DLV - ecommerce.shipping_tier | ecommerce.shipping_tier |
| DLV - ecommerce.payment_type | ecommerce.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: trueparametresini 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.
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
- Measure ecommerce. Google Developers ↩ ↩2 ↩3 ↩4 ↩5
- GA4 Recommended Events. Google Analytics Help ↩ ↩2 ↩3
- GA4 Collection Limits. Google Analytics Help ↩
- Measurement Protocol Limitations. Google Developers ↩
- Set up data collection for websites. Google Developers ↩
- dataslayer. Chrome Web Mağazası ↩
- Server-side tagging. Google Tag Manager Help ↩
- 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
+ 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.