Google Tag Manager dataLayer ve E-Ticaret Etkinlikleri

Google Analytics E-Ticaret Raporları ve Etkinlik Kurulumları başlıklı yazıda Google Analytics e-ticaret etkinliklerinin nasıl kurulması gerektiğinden ve ilgili parametrelerin hangi raporlar ile ilişkili olduğundan bahsetmiştim.

AA

Bu yazıda ise e-ticaret etkinliklerini Google Tag Manager vasıtasıyla kullanabileceğimizden ve gtag karşılıklarından bahsedeceğim.

Öncelikle dataLayer konusunu tekrar hatırlayalım.

dataLayer

dataLayer, müşteri deneyimi ile ilgili verilerin web veya diğer dijital kaynaklarda JavaScript Nesnesi (JavaScript Object) olarak tutulmasını, dijital analiz ve raporlama sunucularına iletilmesini sağlayan, pek çok organizasyon tarafından da (Google, Adobe, Yandex, vb.) bir methodu ifade etmektedir. dataLayer bu nesnenin sıklıkla kullanılan bir adı olsa da farklı tanımlar altında da aynı işlem gerçekleştirilebilmektedir. Örneğin, Customer Experience Digital Data Layer 1.01 içerisinde yapı digitalData olarak adlandırılmaktadır.

Google Tag Manager ve Global Site Etiketi kodları içerisindeki tanımlama dataLayer olduğu için ben de örneklerde bu şekilde ilerleyeceğim. Bu tanımı değiştirmek istediğiniz ya da web sitenizde veya uygulamanızda var olan bir JavaScript nesnesi ile bu kondu ilişkilendirmek istediğinizde kurulum kodlarındaki ilgili alanları güncellemeniz gerekir2.

// Google Tag Manager (gtm)
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-TRGXFL');

// Global Site Tag (gtag)
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-59809868-2');

Bu konu ile ilgili olarak daha önce yayınladığım Data Layer (dataLayer) Nedir? Nasıl Kullanılır? başlıklı yazıya göz atabilirsiniz.

Google Tag Manager ve dataLayer

dataLayer'ın bir JavaScript nesnesi olduğundan bahsettik. Dolayısıyla, internet tarayıcısının console alanını kullanarak bu nesnenin içeriğini dataLayer veya window.dataLayer yazarak görüntüleyebiliriz. Bu nesne bir global değişken olarak tanımlanmaktadır. JavaScript global nesneleri internet tarayıcısı tarafında window Node.js global olarak ifade edilir3. Biz elbette internet tarayıcısı ile açıklamalarımıza devam edeceğiz. Ancak burada bir not eklemekte fayda var. Bu veri katmanı tanımı (dataLayer) Google Tag Manager kapsayıcı snippet'in üzerinde tanımlanmalıdır. Aksi durumda, Google Tag Manager tarafından da yürütülen veri katmanı içeriğine ekleme yapılmamış, içerik değiştirilmiş olur.

Bir deneme yapalım ve console alanına dataLayer yazalım. Alacağımız dönüş 0: Object { "gtm.start": 1602931942224, event: "gtm.js" } olacaktır. Şimdi aşağıdaki kod parçacağını Google Tag Manager kapsayıcı snippet'i öncesinde konumlandıralım ve sayfayı yeniledikten sonra yine console üzerinden dataLayer içeriğini döndürelim.

  dataLayer = [{
    'pageCategory': 'signup',
    'visitorType': 'high-value'
  }];

Görüldüğü üzere dataLayer içerisinde yeni değişkenlerimiz yer almakta.

0: Object { pageCategory: "signup", visitorType: "high-value" }
1: Object { "gtm.start": 1602932141963, event: "gtm.js" }

Şimdi, bu değişkenleri Google Tag Manager kapsayıcı snippet'i sonrasında konumlandırıp tekrar console üzerinden içeriği görüntüleyelim. Alacağımız dönüş ilkinden farklı olacaktır.

0: Object { pageCategory: "signup", visitorType: "high-value" }

Görüldüğü üzere artık gtm.start tanımlı değil. Yeni tanımlarımız önceki tanımların kaybına neden oldu. Peki, bu durumun bir çözümü yok mu? Var elbette. dataLayer bir JavaScript nesnesi olduğuna göre bu nesneye yine JavaScript ile müdahale edebiliriz. push() metotu da kullanabileceğimiz seçeneklerden biri. Bu metot sayesinde bu nesneyi değiştirmek yerine nesne içerisine eklemeler yapabiliriz.

dataLayer.push({'degiskenAdi': 'degiskenDegeri'});

Yukarıdaki işlemi Google Tag Manager kapsayıcı snippet'i öncesinde kullanmak istediğimizde öncesinde dataLayer objesi oluşturulmadığı için Uncaught ReferenceError: dataLayer is not defined hatasını alırız. Değişken tanımı Google Tag Manager kapsayıcı snippet'i içerisinde bulunduğu için push() metotunu snippet sonrasında hatasız bir şekilde kullanabiliriz. Peki, daha genel bir çözümümüz yok mu?

Var elbette, değişkeni kontrol edip eğer tanımlı değilse tanımlayabiliriz.

window.dataLayer = window.dataLayer || [];
dataLayer.push({'degiskenAdi': 'degiskenDegeri'});
// veya
window.dataLayer.push({'degiskenAdi': 'degiskenDegeri'});

Yukarıdaki kodu Google Tag Manager kapsayıcı snippet'i öncesinde veya sonrasında kullanabiliriz. Artık bir hiyerarşi takip etmek durumunda değiliz.

0: Object { degiskenAdi: "degiskenDegeri" }
1: Object { "gtm.start": 1602932828874, event: "gtm.js" }

Bu bilgiyi bir kenara not edin. Çünkü, e-ticaret etkinlikleri çerçevesinde verinin kontrolü için sıklıkla console üzerinden kontroller gerçekleştireceğiz. Elbette console dışında da kontroller yapmamız gerekiyor. Örneğin, gerçekleştirilen bir işlemin eğer Google Tag Manager tarafında karşılığı yoksa gözardı edilecektir. Dolayısıyla, parametrelerimizi de belirli kurallar çerçevesinde kullanmamız gerekir.

dataLayer

Bu amaçla kullanabileceğimiz diğer eklentiler ise, Chrome internet tarayıcısı için Google tarafından geliştirilen Google Tag Assistant ve Adswerve tarafından sunulan Adswerve - dataLayer Inspector+4, Firefox için dataslayer'dir5.

dataLayer

Ön bilgilendirmeler de tamamlandığına göre, ecommerce etkinlikleri üzerinden dataLayer işlemlerine geçebiliriz.

dataLayer ve E-ticaret (eCommerce) Etkinlikleri

Aşağıdaki işlemleri hem Enhanced Ecommerce (UA), hem de Ecommerce (GA4) için dataLayer.push() ile gerçekleştireceğiz2. Elbette bu etkinliklerin işleme alınabilmesi için Google Analytics kodumuzun da Google Tag Manager üzerinden tanımlanmış olması, geliştirilmiş E-ticaret özelliğinin (true) ve veri katmanı seçiminin aktifleştirilmesi gerekmektedir.

Enable Enhanced Ecommerce Features: true
Use Data Layer: true
dataLayer

Artık e-ticaret etkinliklerimizi kullanmaya başlayabiliriz.

Product/Item List Views/Impressions

Listeleme/Görüntüleme

Ürünlerin kategori ve benzeri alanlarda listelenmesini ifade eder. Bu sayede ürünlerin listelenme performanslarını (görülme, tıklanma, sepete eklenme, satın alınma) değerlendirebilirsiniz.

dataLayer.push({
  'ecommerce': {
    'currencyCode': 'EUR',
    'impressions': [
     {
       'name': 'Triblend Android T-Shirt',
       'id': '12345',
       'price': '15.25',
       'brand': 'Google',
       'category': 'Apparel',
       'variant': 'Gray',
       'list': 'Search Results',
       'position': 1
     },
     {
       'name': 'Donut Friday Scented T-Shirt',
       'id': '67890',
       'price': '33.75',
       'brand': 'Google',
       'category': 'Apparel',
       'variant': 'Black',
       'list': 'Search Results',
       'position': 2
     }]
  }
});

İlgili tanım içerisinde id veya name key'lerinden en az birinin tanımlı olması gerekmektedir. Bu kod gtm.dom ile ilişkilidir. Dolayısıyla, Google Tag Manager kapsayıcı snippet öncesinde oluşturulması gerekir.

dataLayer.push({
    'event': 'gtm.dom',
    'ecommerce': {
        ...
    }
})

Sıralamayı hatırlamak gerekirse, gtm.js (Sayfa Yüklendi) sayfa sekansını, gtm.dom (DOM hazır) DOM sekansını, gtm.load (Pencere Yüklendi) ise kapsayıcı sekansını ifade eder. Elbette kimi durumlarda beklenenle olan farklılık taşıyabiliyor. Impression içeriğini kapsayıcıdan sonra oluşturmamız gerekebilir. Bu durumda ne yapabiliriz?

Çözüm, ilgili nesne içeriğini farklı bir event ile ilişkilendirmek. Örneğin, 'event': 'impression' ile ilgili içeriği impression event'i ile ilişkilendirebilir ve bu event tetiklendiğinde nesne içeriğinin gönderilmesini sağlayabiliriz. Eğer oluşturduğunuz etkinlik tetikleyici (trigger) olarak tanımlı değilse ilgili nesne içeriği değerlendirilmeyecektir.

dataLayer.push({
    'event': 'impression',
    'ecommerce': {
        ...
    }
})

Bu mantığı diğer gtm.dom event'leri için de kullanabilirsiniz. Örneğin, bir popup içerisinde ürün göstermek durumunda olduğunuzda ya da carousel ile ürünleri dinamik olarak çağırdığınızda event olarak tetikleyerek ürün performanslarını ölçebilirsiniz. Normal şartlarda gtm.dom içeriğini gerçek zamanlı etkinlik olarak görüntüleyemez, Conversions > Ecommerce > Product List Performance raporu ile takip edebiliriz. Ancak, etkinlik olarak tetiklersenzi bu etkinlik gerçek zamanlı olarak da takip edilebilir hale gelecektir.

Şimdi, bu işlemi Ecommerce (GA4) ile yineleyelim.

dataLayer.push({
  'event': 'view_item_list',
  'ecommerce': {
    'items': [
     {
       'item_name': 'Triblend Android T-Shirt',
       'item_id': '12345',
       'price': '15.25',
       'item_brand': 'Google',
       'item_category': 'Apparel',
       'item_category_2': 'Mens',
       'item_category_3': 'Shirts',
       'item_category_4': 'Tshirts',
       'item_variant': 'Gray',
       'item_list_name': 'Search Results',
       'item_list_id': 'SR123',
       'index': 1,
       'quantity': '1'
     },
     {
       'item_name': 'Donut Friday Scented T-Shirt',
       'item_id': '67890',
       'price': '33.75',
       'item_brand': 'Google',
       'item_category': 'Apparel',
       'item_category_2': 'Mens',
       'item_category_3': 'Shirts',
       'item_category_4': 'Tshirts',
       'item_variant': 'Black',
       'item_list_name': 'Search Results',
       'item_list_id': 'SR123',
       'index': 2,
       'quantity': '1'
     }]
  }
});

Google Analytics GA4 mülkünde (eski adı ile App+Web) bildiğiniz üzere yapılandırma ve etkinlikler için ayrı etiket tanımları yapılmakta. Yukarıdaki nesne içeriği view_item_list etkinlik adına sahip ve gtm.dom ile ilişkili olarak yürütülmekte. Gerekli durumlarda doğrudan bu etkinlik tanımını işleme alabilmekteyiz. Unutmadan, Bu GA4 nesne içerikleri standart Google Analytics mülkü tarafından işleme alınmaz.

Product/Item List Clicks

Ürün Tıklama

Bir ürünün tıklanması durumunda işleme alınır. productClick event tanımına sahiptir, bir tıklama etkinliği ile işleme alınır.

dataLayer.push({
    'event': 'productClick',
    'ecommerce': {
      'click': {
        'actionField': {'list': 'Search Results'},
        'products': [{
          'name': 'Donut Friday Scented T-Shirt',
          'id': '12345',
          'price': '15.25',
          'brand': 'Google',
          'category': 'Apparel',
          'variant': 'Black',
          'position': 2
         }]
       }
     }
  });
Etkinlik Kategorisi (Event Category)
Ecommerce
Etkinlik İşlemi (Event Action)
Product Click

İlgili işleme ait GA4 nesne içeriği ise şu şekildedir.

dataLayer.push({
    'event': 'select_item',
    'ecommerce': {
      'items': [{
        'item_name': 'Donut Friday Scented T-Shirt',
        'item_id': '12345',
        'item_brand': 'Google',
        'item_category': 'Apparel',
        'item_category_2': 'Mens',
        'item_category_3': 'Shirts',
        'item_category_4': 'Tshirts',
        'item_variant': 'Black',
        'item_list_name': 'Search Results',
        'item_list_id': 'SR123',
        'index': 2,
        'quantity': '1',
        'price': '15.25'
      }]
    }
  });
Measure views/impressions of product/item details

Detay Görüntüleme

Bu nesne de yine gtm.dom etkinliği ile işleme alınacaktır. Dolayısıyla, Listeleme/Görüntüleme başlığı altındaki hususlar bu nesne içeriğinin raporlara aktarılması için de geçerlidir.

dataLayer.push({
  'ecommerce': {
    'detail': {
      'actionField': {'list': 'Apparel Gallery'},
      'products': [{
        'name': 'Triblend Android T-Shirt',
        'id': '12345',
        'price': '15.25',
        'brand': 'Google',
        'category': 'Apparel',
        'variant': 'Gray'
       }]
     }
   }
});

Şimdi aynı işlemi GA4 ile nasıl gerçekleştirebileceğimize bakalım.

dataLayer.push({
  'event': 'view_item',
  'ecommerce': {
    'items': [{
      'item_name': 'Donut Friday Scented T-Shirt',
      'item_id': '67890',
      'price': '33.75',
      'item_brand': 'Google',
      'item_category': 'Apparel',
      'item_category_2': 'Mens',
      'item_category_3': 'Shirts',
      'item_category_4': 'Tshirts',
      'item_variant': 'Black',
      'item_list_name': 'Search Results',
      'item_list_id': 'SR123',
      'index': 1,
      'quantity': '1'
    }]
  }
});
Additions or Removals from a Shopping Cart

Sepet İşlemleri

Sepet işlemleri de ürün tıklamasında olduğu gibi kullanıcı tarafında gerçekleştirilen bir etkinlik. Sepete ekleme işlemi için tetiklenmesi gereken etkinliğimiz addToCart, sepetten silmek için ise removeFromCart. Nesne içeriğimiz ise şu şekilde:

dataLayer.push({
  'event': 'addToCart',
  'ecommerce': {
    'currencyCode': 'EUR',
    'add': {
      'products': [{
        'name': 'Triblend Android T-Shirt',
        'id': '12345',
        'price': '15.25',
        'brand': 'Google',
        'category': 'Apparel',
        'variant': 'Gray',
        'quantity': 1
       }]
    }
  }
});
Etkinlik Kategorisi (Event Category)
Ecommerce
Etkinlik İşlemi (Event Action)
Add to Cart
dataLayer.push({
  'event': 'removeFromCart',
  'ecommerce': {
    'remove': {
      'products': [{
          'name': 'Triblend Android T-Shirt',
          'id': '12345',
          'price': '15.25',
          'brand': 'Google',
          'category': 'Apparel',
          'variant': 'Gray',
          'quantity': 1
      }]
    }
  }
});
Etkinlik Kategorisi (Event Category)
Ecommerce
Etkinlik İşlemi (Event Action)
Remove from Cart

Şimdi bu nesnelerin GA4 için nasıl düzenlendiğine bakalım.

dataLayer.push({
  'event': 'add_to_cart',
  'ecommerce': {
    'items': [{
      'item_name': 'Donut Friday Scented T-Shirt',
      'item_id': '67890',
      'price': '33.75',
      'item_brand': 'Google',
      'item_category': 'Apparel',
      'item_category_2': 'Mens',
      'item_category_3': 'Shirts',
      'item_category_4': 'Tshirts',
      'item_variant': 'Black',
      'item_list_name': 'Search Results',
      'item_list_id': 'SR123',
      'index': 1,
      'quantity': '2'
    }]
  }
});
dataLayer.push({
  'event': 'remove_from_cart',
  'ecommerce': {
    'items': [{
      'item_name': 'Donut Friday Scented T-Shirt',
      'item_id': '67890',
      'price': '33.75',
      'item_brand': 'Google',
      'item_category': 'Apparel',
      'item_variant': 'Black',
      'item_list_name': 'Search Results',
      'item_list_id': 'SR123',
      'index': 1,
      'quantity': '1'
    }]
  }
});

Kod parçacıklarında da görültüğü üzere GA4 için kullanılan etkinlikler add_to_cart ve remove_from_cart.

Promotion View

Promosyon Görüntüleme

Ürünlerin görüntülenmesi ile promosyonların görüntülenmesi farklı key tanımları üzerinden gerçekleştirilmekte. Promosyon performansını ise Marketing raporları aracılığı ile gerçekleştirmekteyiz. Elbette bu işlem de gtm.dom ile yürütülmekte.

dataLayer.push({
  'ecommerce': {
    'promoView': {
      'promotions': [
       {
         'id': 'JUNE_PROMO13',
         'name': 'June Sale',
         'creative': 'banner1',
         'position': 'slot1'
       },
       {
         'id': 'FREE_SHIP13',
         'name': 'Free Shipping Promo',
         'creative': 'skyscraper1',
         'position': 'slot2'
       }]
    }
  }
});

Unutmadan, promoClick ile promoView farklı şekilde değerlendirilmekte. Bu nedenle, ikisi bir arada tetiklenmemeli. Birazdan ayrıca promosyon tıklamasından bahsedeceğim. Ancak, daha öncesinde promosyon görüntüleme/listeleme için GA4 tarafındaki nesne tanımına bir bakalım.

dataLayer.push({
  'event': 'view_promotion',
  'ecommerce': {
    'items': [{
      'item_name': 'Donut Friday Scented T-Shirt',
      'item_id': '67890',
      'price': '33.75',
      'item_brand': 'Google',
      'item_category': 'Apparel',
      'item_category_2': 'Mens',
      'item_category_3': 'Shirts',
      'item_category_4': 'Tshirts',
      'item_variant': 'Black',
      'promotion_id': 'abc123',
      'promotion_name': 'summer_promo',
      'creative_name': 'instore_suummer',
      'creative_slot': '1',
      'location_id': 'hero_banner',
      'index': 1,
      'quantity': '1'
    }]
  }
});

Görüldüğü üzere ilgili nesne GA4 tarafında view_promotion etkinlik tanımı ile kullanılmakta.

Promotion Click

Promosyon Tıklama

Bir promosyonun (görsel, metin, vb.) tıklanması etkinliğini takip etmek ve promosyon performansını ölçmek amacıyla kullanılır. İlgili performans metrikleri Marketing alt raporlarında yer alır. Bir dönüşüm işlemi içerisinde kullanıldığında ilgili promosyonun satış üzerine etkilerini de değerlendirmek mümkün hale gelmektedir.

dataLayer.push({
    'event': 'promotionClick',
    'ecommerce': {
      'promoClick': {
        'promotions': [
         {
           'id': 'abc123',
           'name': 'summer_promo',
           'creative': 'instore_suummer',
           'position': 1
         }]
      }
    }
  });
Etkinlik Kategorisi (Event Category)
Ecommerce
Etkinlik İşlemi (Event Action)
Promotion Click

Bu işlemin GA4 ile nasıl ele alınacağına bakalım.

dataLayer.push({
  'event': 'select_promotion',
  'ecommerce': {
    'items': [{
      'item_name': 'Donut Friday Scented T-Shirt',
      'item_id': '67890',
      'price': '33.75',
      'item_brand': 'Google',
      'item_category': 'Apparel',
      'item_category_2': 'Mens',
      'item_category_3': 'Shirts',
      'item_category_4': 'Tshirts',
      'item_variant': 'Black',
      'promotion_id': 'abc123',
      'promotion_name': 'summer_promo',
      'creative_name': 'instore_suummer',
      'creative_slot': '1',
      'location_id': 'hero_banner',
      'index': 1,
      'quantity': '1'
    }]
  }
});
Checkout

Ödeme Adımları

checkout etkinliği ödeme sürecinin ilk adımını ifade etmekte. actionField içerisinde belirtilen adımlar ile E-ticaret özelliğini aktifleştirdiğimiz Görünüm bölümünde yer alan Checkout Labeling bölümünü birlikte ele alabilirsiniz.

dataLayer.push({
    'event': 'checkout',
    'ecommerce': {
      'checkout': {
        'actionField': {'step': 1, 'option': 'Visa'},
        'products': [{
          'name': 'Triblend Android T-Shirt',
          'id': '12345',
          'price': '15.25',
          'brand': 'Google',
          'category': 'Apparel',
          'variant': 'Gray',
          'quantity': 1
       }]
     }
   }
  });
Etkinlik Kategorisi (Event Category)
Ecommerce
Etkinlik İşlemi (Event Action)
Checkout

Ödeme işlem adımlarını ise şu şekilde takip edebilmekteyiz.

dataLayer.push({
    'event': 'checkoutOption',
    'ecommerce': {
      'checkout_option': {
        'actionField': {'step': 2, 'option': 'Standard Shipping'}
      }
    }
  });
Etkinlik Kategorisi (Event Category)
Ecommerce
Etkinlik İşlemi (Event Action)
Checkout Option

Bu işlemin GA4 tarafındaki karşılığına bakalım.

dataLayer.push({
    'event': 'begin_checkout',
    'ecommerce': {
      'items': [{
        'item_name': 'Donut Friday Scented T-Shirt',
        'item_id': '67890',
        'price': '33.75',
        'item_brand': 'Google',
        'item_category': 'Apparel',
        'item_category_2': 'Mens',
        'item_category_3': 'Shirts',
        'item_category_4': 'Tshirts',
        'item_variant': 'Black',
        'item_list_name': 'Search Results',
        'item_list_id': 'SR123',
        'index': 1,
        'quantity': '1'
      }]
    }
  });

Ödeme süreci için GA4 tarafında adımlara dair bir tanım yer almamakta. Ancak, elbette özel etkinlikler ile birlikte bu adımları hedef olarak oluşturabilir ve funnel vasıtasıyla adımları takip edebiliriz.

Purchase

Satın Alma İşlemi

Ödeme işlemi tamamlandığında tetiklenen etkinliğimiz purchase. Esasında e-ticaret raporlarının temel metrikleri de bu etkinlik temelinde şekillenmekte. Bu nesne de yine gtm.dom ile ilişkili olarak değerlendirilmekte.

dataLayer.push({
  'ecommerce': {
    'purchase': {
      'actionField': {
        'id': 'T12345',
        'affiliation': 'Online Store',
        'revenue': '35.43',
        'tax':'4.90',
        'shipping': '5.99',
        'coupon': 'SUMMER_SALE'
      },
      'products': [{
        'name': 'Triblend Android T-Shirt',
        'id': '12345',
        'price': '15.25',
        'brand': 'Google',
        'category': 'Apparel',
        'variant': 'Gray',
        'quantity': 1,
        'coupon': ''
       },
       {
        'name': 'Donut Friday Scented T-Shirt',
        'id': '67890',
        'price': '33.75',
        'brand': 'Google',
        'category': 'Apparel',
        'variant': 'Black',
        'quantity': 1
       }]
    }
  }
});

Eğer sayfa yüklenme işleminden sonra nesne içeriğimiz oluşuyorsa yine gtm.dom ile ilişkili olarak anlattığım etkinlik kullanımını değerlendirebilirsiniz.

Şimdi purchase işleminin GA4 tarafında nasıl ele alındığına bakalım.

dataLayer.push({
  'event': 'purchase',
  'ecommerce': {
    'purchase': {
      'transaction_id': 'T12345',
      'affiliation': 'Online Store',
      'value': '35.43',
      'tax': '4.90',
      'shipping': '5.99',
      'currency': 'EUR',
      'coupon': 'SUMMER_SALE',
      'items': [{
        'item_name': 'Triblend Android T-Shirt',
        'item_id': '12345',
        'item_price': '15.25',
        'item_brand': 'Google',
        'item_category': 'Apparel',
        'item_variant': 'Gray',
        'quantity': 1,
        'item_coupon': ''
      }, {
        'item_name': 'Donut Friday Scented T-Shirt',
        'item_id': '67890',
        'item_price': '33.75',
        'item_brand': 'Google',
        'item_category': 'Apparel',
        'item_variant': 'Black',
        'quantity': 1
      }]
    }
  }
});
Refund

İade İşlemi

E-ticaret raporları ile ilişkili olan son etkinliğimiz refund. İade işlemi bir ya da birkaç ürünün ve hatta sadece bir ürünün adedinin iadesi olabileceği gibi ilgili satın almanın tamamını da kapsayabilir.

dataLayer.push({
  'ecommerce': {
    'refund': {
      'actionField': {'id': 'T12345'}
    }
  }
});

Yukarıdaki kod parçacığı purchase ile gönderilen T12345 id'li işlem kaydının tamamının iade edilidiğini belirtmektedir. İlgili satın alma işlemi içerisinden ürün veya adet iadesi için kod parçacığımızı şu şekilde güncelleyebiliriz.

dataLayer.push({
  'ecommerce': {
    'refund': {
      'actionField': {'id': 'T12345'},
      'products': [
            {'id': 'P4567', 'quantity': 1},
            {'id': 'P8901','quantity': 2}
       ]
     }
  }
});

Şimdi bu işlemin GA4 tarafında nasıl yapıldığına bakalım.

dataLayer.push({
  'event': 'refund',
  'ecommerce': {
    'transaction_id': 'T12345'
  }
});

Evet, e-ticaret etkinlikleri ile ilgili detayları tamamladık. Kimi durumlarda dataLayer kullanamıyor ve işlemleri GTM üzerinden gerçekleştirmek durumunda olabiliyoruz. Bu tür durumlarda yine yukarıdaki nesne yapılarını değiştirmeksizin Custom JavaScript Variable aracılığı ile özel değişkenler (diğer bir ifade ile makrolar) ile işlemler gerçekleştirebilmekteyiz.

function() {
  var ecommerceData = {
    'ecommerce': {
      'purchase': {
        'actionField': {'id': 'T12345'},
        'products': [
            ...
        ],
        ...
     }
  };
  return ecommerceData;
}

GA4 tarafında ise fonksiyonumuz şu şekilde:

function() {
  var ecommerceProductData = [
    {
      'item_name': 'Donut Friday Scented T-Shirt',
      'item_id': '67890',
    },
    ...
  ];
  return ecommerceProductData;
}

Bu kod parçacığını gaEcommerceData adı ile tanımladığımızı varsayalım. Bu durumda şeklinde return eden değere ulaşabiliriz6 7. İlgili nesne gtm.dom ile ilişkilendirilebilir.

Yukarıdaki işlemlerle ilgili denemeler yapmak isterseniz, klasör içerisinde bulunan JSON dosyasını içe aktararak ilerleyebilirsiniz. İlgili GTM klasörünü düzenli olarak güncellemekteyim, eklenen örnek işlemler için ara ara kontrol etmenizi öneririm.