Google Analytics İzleme (Tracking) Yöntemleri

Web analitiği süreçlerinde kullanılan araçlarla ilişkili olarak şimdiye değin sıklıkla JavaScipt kodlarına yer verdim.

AA

Kimi bazı yazılarda bu işlemler için farklı yöntemlerinde olduğuna değinmiştim. Örneğin, pixel kodu bu alternatiflerden biri. Peki, Google Analytics temelinde değerlendirilebilecek seçenekler neler?

Google Analytics (GA) İzleme İşlemleri

Google Analytics bilindiği üzere Universal Analytics ve GA4 olmak üzere iki farklı property (mülk) biçimi kullanmakta. Her içi property kendi kuraları çerçevesinde ele alınmakta ve bu kurallarla entegre raporlar aracılığı ile verileri sunmakta. Universal Analytics birden fazla JavaScript kütüphanesi ile ilişkili uzun bir geçmişe sahip iken GA4 daha yakın bir zaman itibariyle kullanılabilmekte.

Google Analytics

Genel olarak bu property'ler JavaScript kodları ile web siteleri ve uygulamalar ile ilişkilendirilmekte. Ancak, bazı durumlarda istisnai işlemler gerçekleştirmek zorunda kalabilmekteyiz. JavaScript dışında, örneğin mobil uygulamalar ve internete bağlı cihazlar için farklı yollar izlemek gerekebilir. Google Analytics bu yöntemleri websitesi ve web uygulamaları, mobil uygulamalar ve internete bağlı cihazlar başlıkları altında ele alır1.

Websitesi ve Web Uygulamaları

Websitesi ve web uygulamaları, ağırlıkla JavaScript kod kurulumlarını içermektedir. Google Analytics, Unversal Analytics altında güncel durumda kullanılan ve daha önce kullanılan ve şu anda desteklenmeyen pek çok izleme kütüphanesine sahiptir2.

JS - Universal Analytics (UA)

Kullanımda olmayan seçenekler de dahil, kısaca bu seçeneklere bir göz atalım. İlk olarak 2017 yılında kullanımdan kaldırılan ga.js ile başlayalım.

gtag.js kullanımına değin GA_MEASUREMENT_ID tanımı sadece Universal Analytics için oluşturulan mülk tanımını ifade eder; UA-XXXXX-Y. Ancak, gtag.js ile birlikte GA4 ve Google Ads mülklerine ait ID'ler de config ile tanımlanabilmektedir.

Classic Google Analytics
ga.js

Google'ın 2005 yılında Urchin'i satın almasıyla birlikte Google bir şekilde web teknolojileri ile ilgili süreçlere dahil olmaya başladı3. Geliştirmeler ile birlikte Google Analytics 2009 yılında ga.js kütüphanesini yayınladı4. Bu kütüphane 2014 yılına kadar geliştirildi ve 2017 yılına kadar kullanımda kaldı5.

ga.js kurulum kodu şöyle:

<script>
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'GA_MEASUREMENT_ID']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
</script>

Google Analytics üzerinden ga.js kurulum koduna ulaşılamamakta ve dokümantasyon sizi analytics.js kütüphanesine yönlendirmekte.

Google Analytics
analytics.js

Google Analytics 2013 yılında analytics.js kullanımını duyurdu6. ga.js kütüphanesinin 2014 yılında geliştirilmesinin sonlandırılması ile birlikte web sayfalarının izleme süreçlerinde analytics.js öncelikli tercih haline getirildi. Bu süreci klasik (classic) Google Analytics mülk yapısından Universal Analytics mülk yapısına geçiş olarak nitelendirebiliriz. Güncel durumda hala kullanılabilir olan analytics.js pek çok web sitesi ve servis tarafından da aktif bir şekilde kullanılmakta.

analytics.js için kurulum kodu şu şekildedir:

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  ga('create', 'GA_MEASUREMENT_ID', 'auto');
  ga('send', 'pageview');
</script>

analytics.js Google Analytics'e veri göndermek için tracker7 ve hit type8 yapılarını temel alır.

İzleyiciler (trackers) hangi mülkün ölçüldüğünü belirtirken, olay türleri (hit types) ne tür bir etkileşimin ölçüldüğünü belirtir.

gtag.js

gtag.js 2017 yılında beta olarak duyuruldu, geçen zaman ve yeni geliştirmeler ile birlikte kararlı hale gelen kütüphane güncel durumda Google Analytics ve Google Ads kurulum işlemlerinde ön tanımlı olarak sunulmakta. gtag.js farklı Google servisleri için de kullanılabilmesi sebebiyle Global Site Tag olarak ifade edilmektedir.

gtag.js için oluşturulan izleme kodu şu şekildedir:

<script async src="https://www.googletagmanager.com/gtag/js?id=GA_MEASUREMENT_ID"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'GA_MEASUREMENT_ID');
</script>

analytics.js'den farklı olarak gtag.js içerisinde mülkkler config parametresi olarak tanımlanırlar. Google Analytics Universal Analytics (UA), GA4 ve Google Ads için bu kurulum etiketi kullanılmaktadır. config aynı anda bir veya daha fazla mülk tanımı için kullanılabilir9.

gtag('config', 'UA-XXXXX-Y'); // UA MEASUREMENT_ID
gtag('config', 'G-XXXXX'); // GA4 MEASUREMENT_ID
gtag('config', 'AW-XXXXX'); // AW CONVERSION_ID

gtag.js kurulum kodu analytics.js'den farklı olarak verileri Google Analytics'e göndermek için tracker yapısını kullanmaz. config komutu tarafından belirtilen mülk kimliklerine veri gönderilir. gtag.js'ye sağlanan event tanımları, Google Analytics'e gönderilecek veri türlerini belirtir10. Benim de genel olarak Google Analytics ile ilgili yazılarımda temel aldığım kurulum Global Site Tag kurulumudur.

Google Analytics v4

JS - Google Analyics v4 (GA4)

Websitelerinin yanı sıra web uygulamalarının da yaygınlaşması ile birlikte ortaya çıkan çaprak (cross) izleme ihtiyaçları ve farklı cihaz işlemleri doğrultusunda Google 2019 yılında beta olarak App + Web mülk özelliğini duyurdu. Bu mülk yapısı kullanıcı etkinliklerini sayfa ve ekran temelinde değerlendirebilme imkanı sunmakta. 2020 yılı itibariyle App + Web kararlı olarak GA4 adıyla kullanılabilir hale getirildi11. GA4 UA mülk yapısından farklı olarak G-XXXXXXXXXX şeklinde bir kimlik tanımı alır. Aynı kimlik iOS, Android ve Web kurulumları için ortak bir şekilde kullanılabilmektedir.

Websitesi ve web uygulaması kurulumu gtag.js koduna ek bir config tanımı ile gerçekleştirilebilir.

gtag('config', 'G-XXXXX'); // GA4 MEASUREMENT_ID

2019 yılı itibariyle Firebase platformunun bir parçası olarak Firebase Analytics, diğer bir ifade ile Firebase for Google Analytics seçeneği de kullanıma sunulmuştur12 13. Firebase Analytics platform içerisinde kendi rapor yapısına sahiptir. Ancak, GA4 ile de entegre olabilmektedir.

const firebaseConfig = {
  apiKey: "AIzaSyCGQ0tYppWFJkuSxBhOpkH0xVDmX245Vdc",
  authDomain: "project-id.firebaseapp.com",
  databaseURL: "https://project-id.firebaseio.com",
  projectId: "project-id",
  storageBucket: "project-id.appspot.com",
  messagingSenderId: "637908496727",
  appId: "2:637908496727:web:a4284b4c99e329d5",
  measurementId: "G-9VP01NDSXJ"
};
...
firebase.analytics();

Firebase Analytics yukarıda da örnek olarak görüldüğü üzere Firebase JavaScript SDK ile ayrı bir kurulum yapısına sahip olsa da14 measurementId tanımı gtag.js aracılığıyla GA4 mülkü ile ilişkilendirilebilir.

Accelerated Mobile Pages (AMP) sürecinde de yine Global Site Tag mülk özelliği amp kod yapısına uygun bir şekilde kullanılabilmekte15.

<script async custom-element="amp-analytics" src="https://cdn.ampproject.org/v0/amp-analytics-0.1.js"></script>
<amp-analytics type="gtag" data-credentials="include">
<script type="application/json">
{
  "vars" : {
    "gtag_id": "<GA_MEASUREMENT_ID>",
    "config" : {
      "<GA_MEASUREMENT_ID>": { "groups": "default" }
    }
  }
}
</script>
</amp-analytics>

Mobil Uygulamalar

Websitesi ve Web Uygulamaları başlığı altında da kısmen konusu geçtiği üzere Google Analytics bize iOS16 17 ve Android18 19 ortamlarında geliştirilen mobil uygulamalar için de izleme çözümleri sunmakta. Bu işlemler Google'ın uygulama geliştirici platformu olan Firebase aracılığı ile yürütülmekte.

Her iki ortam için de Firebase SDK kurulumu gerekmekte. SDK iki öncelikli tip ile bilgi kaydı oluşturur; etkinlikler (events) ve kullanıcı özellikleri (user properties).

Etkinlikler uygulamadaki kullanıcı etkinliklerini, sistem olaylarını ve/veya hataları barındırırken, kullanıcı özellikleri dil tercihi veya coğrafi konum gibi kullanıcıları segmente etmekte kullanılabilecek tanımlara sahiptir.

Mobil uygulamalarda daha önce Android v4, Android v3, Android v2, Android v1, iOS v3, iOS v2, iOS v1, Unity v4 Unity v3 sunulmuştur. Güncel durumda bu geliştirme kitleri desteklenmemektedir.

Measurement Protocol

Measurement Protocol, internete bağlı herhangi bir cihazda gerçekleştirilen kullanıcı etkinliklerinin (event) ve olayların (hit) takip edilebilmesini sağlar. Daha önce farklı platformlar için Flash/Flex ve Silverlight sunulsa da güncel durumda bu kütüphaneler desteklenmemektedir.

Google Analytics Measurement Protocol ile kullaıcı etkileşim verileri HTTP istekleri ile doğrudan Google Analytics sunucularına gönderilir. Bu sayede, çevrimiçi-çevrimdışı ilişkiler oluşturulabilir, istemciden ve sunucudan veri gönderilebilir ve neredeyse her ortam üzerinden etkileşimler (hit / event) takip edilebilir hale gelmektedir20.

Measurement Protocol pixel kodu olarak da tercih edilebilir. Bu sayede e-mail izleme işlemi de gerçekleştirilebilir21.

<img src="https://www.google-analytics.com/collect?v=1&..." />

MP - Universal Analytics (UA)

Measurement Protocol, Universal Analytics için hit temelinde bilgiler gönderir ve temel bir HTTP isteği şu zorunlu parametreleri alır22. Google Analytics Measurement Protocol aracılığı ile bilgileri 2 bölümde gönderir. Transport bilginin nasıl gönderileceği (GET veya POST ve endpoint (uçnokta) tanımı), payload ise gönderilen bilgiyi içerir23.

v=1              // Protokol versiyonu.
&tid=UA-XXXXX-Y  // Tracking ID / Property ID.
&cid=555         // Anonim Client ID.
&t=              // Hit Type.

Şu an için kullanılabilir versiyon bilgisi 1'dir. İstek içerisinde Client Id veya User Id tanımlardan en az biri tanımlı olmalıdır. Client Id için 555 değeri anonim kullanıcıyı ifade eder. İsteği gerçekleştiren IP adresinin kayıt altına alınmaması için isteğe aip parametresi boolean değeri ile birlikte eklenebilir.

hit parametre olarak pageview, screenview, event, transaction, item, social, exception, timing değerlerini alabilir. Her değer kendi parametre grubuna sahiptir. Örneğin, pageview için sayfa opsiyonel olarak URL, Hostname, Path, Title, Content Group ve Link ID tanımları yapılabilir.

POST /collect HTTP/1.1
Host: www.google-analytics.com

v=1&tid=UA-XXXXX-Y&cid=555&t=pageview&dp=%2Fhome

/collect yukarıdaki istek örneğinde de görüldüğü üzere, Universal Analytics için Measurement Protocol verileri /collect uçnoktasına gönderilmektedir. Her istek tek bir hit barındırır. Eğer çoklu hit iletmek gerekirse /collect yerine /batch uçnoktası kullanılmalıdır.

POST /batch HTTP/1.1
Host: www.google-analytics.com

v=1&tid=UA-XXXXX-Y&cid=555&t=pageview&dp=%2Fhome
v=1&tid=UA-XXXXX-Y&cid=555&t=pageview&dp=%2Fabout
v=1&tid=UA-XXXXX-Y&cid=555&t=pageview&dp=%2Fcontact

/batch kullanımının bazı sınırlandırmaları vardır.

  • Her istek maksimum 20 hit içerebilir.
  • Tüm hit payload toplam boyutu 16K bytes üzerinde olamaz.
  • Tek bir hit payload boyutu 8K bytes üzerinde olamaz.

İsteklerin oluşturulması aşamasında tanım ve yazım hataları yapılabilmektedir. Oluşturulan isteğin doğruluğunu Hit Builder24 aracı ile kontrol edebilirsiniz. Örneğin, aşağıda yer alan hit tanımını etkinlik (event) parametresini taşımaktadır.

v=1              // Version.
&tid=UA-XXXXX-Y  // Tracking ID / Property ID.
&cid=555         // Anonymous Client ID.

&t=event         // Event hit type
&ec=video        // Event Category. Required.
&ea=play         // Event Action. Required.
&el=holiday      // Event label.
&ev=300          // Event value.

Bu hit tanımını Hit Builder ile test etmek ve diğer tanımlar için burayı tıklayabilirsiniz.

Measurement Protocol aracılığı ile e-ticaret etkinlikleri de iletebiliriz. Aşağıda purchase etkinliğini içeren istek parametrelerini görebilirsiniz. İlgili isteği doğrulamak ve/veya düzenlemek için burayı tıklayabilirsiniz.

v=1                                   // Version.
&tid=UA-XXXXX-Y                       // Tracking ID / Property ID.
&cid=555                              // Anonymous Client ID.
&t=pageview                           // Pageview hit type.
&dh=mydemo.com                        // Document hostname.
&dp=/receipt                          // Page.
&dt=Receipt%20Page                    // Title.

&ti=T12345                            // Transaction ID. Required.
&ta=Google%20Store%20-%20Online       // Affiliation.
&tr=37.39                             // Revenue.
&tt=2.85                              // Tax.
&ts=5.34                              // Shipping.
&tcc=SUMMER2013                       // Transaction coupon.

&pa=purchase                          // Product action (purchase). Required.
&pr1id=P12345                         // Product 1 ID. Either ID or name must be set.
&pr1nm=Android%20Warhol%20T-Shirt     // Product 1 name. Either ID or name must be set.
&pr1ca=Apparel                        // Product 1 category.
&pr1br=Google                         // Product 1 brand.
&pr1va=Black                          // Product 1 variant.
&pr1ps=1                              // Product 1 position.

MP - Google Analyics v4 (GA4)

Google Analytics Universal Analytics ve GA4 mülkleri arasında JavaScript nesne yapılarında olduğu gibi Measurement Protocol temelinde de farklılıklar söz konusudur. GA4 için sunulan Measurement Protocol API alpha sürümündedir ve bazı sınırlandırmalara sahiptir25.

GA4 için gerçekleştirilecek işlemler hit değil, sadece event tanımı alırlar ve istekler farklı bir URL'e ve /collect uçnoktasına iletilir (transport). Ek olarak, bu protokol Firebase platformu için de kullanılabilir.

// GA4
const measurement_id = `G-XXXXXXXXXX`;
const api_secret = `<secret_value>`;

fetch(`https://www.google-analytics.com/mp/collect?measurement_id=${measurement_id}&api_secret=${api_secret}`, {
  method: "POST",
  body: JSON.stringify({
    client_id: 'XXXXXXXXXX.YYYYYYYYYY',
    events: [{
      name: 'tutorial_begin',
      params: {},
    }]
  })
});

// Firebase
const firebase_app_id = `1:1234567890:android:321abc456def7890`;
const api_secret = `<secret_value>`;

fetch(`https://www.google-analytics.com/mp/collect?firebase_app_id=${firebase_app_id}&api_secret=${api_secret}`, {
  method: "POST",
  body: JSON.stringify({
    app_instance_id: 'app_instance_id',
    events: [{
      name: 'tutorial_begin',
      params: {},
    }]
  })
});

GA4 için Measurement Protocol kullanımında şu konulara dikkat edilmelidir26:

  • Her bir istek maksimum 25 etkinlik içerebilir.
  • Her bir etkinlik maksimum 25 parametre alabilir.
  • Etkinlik adı için maksimum 40 karakter kullanılabilir, sadece alpha-numeric karakterler ve underscore kullanılabilir. Ad alphabetic karatker ile başlamalıdır. Öntanımlı etkinlik isimleri kullanılamaz27.
  • Her bir etkinlik amksimum 25 kullanıcı tanımları (user property) alabilir.
  • Kullanıcı tanımları için maksimum 24 karakterlik ad tanımı yapılabilir.
  • Kullanıcı tanımları için maksimum 36 karakterlik değer tanımı yapılabilir.
  • Prametreler en fazla 40 karakter alabilir, sadece alpha-numeric karakterler ve underscore kullanılabilir. Ad alphabetic karatker ile başlamalıdır.
  • Parametreler değerleri olarak maksimum 100 karaker uzunluğunda olabilir.
  • Gönderilen isteğin taşıdığı toplam veri boyutu (body içeriği) mamsimum 130k byte olabilir.

GA4 etkinliklerinin doğrulanmasında Hit Builder yerine GA4 Event Builder kullanılmaktadır28.

GA4 Measurement Protocol ile veri gönderimi için api_secret ve measurement_id istek parametreleri zorunludur. api_secret değeri için Admin > Data Streams > Choose your stream > Measurement Protocol > Create ve measurement_id için Admin > Data Streams > Choose your stream > Measurement ID adımlarının izlenmesi gerekir27.

JSON body içeriğinde client_id, events[] ve events[].name key'leri zorunludur. Aşağıda GA4 için purchase etkinlik tanımına ait bir istek yer almaktadır.

const measurementId = `G-XXXXXXXXXX`;
const apiSecret = `<secret_value>`;

fetch(`https://www.google-analytics.com/mp/collect?measurement_id=${measurementId}&api_secret=${apiSecret}`, {
  method: "POST",
  body: JSON.stringify({
    "client_id": "client_id",
    "events": [{
      "name": "purchase",
      "params": {
        "affiliation": "Google Store",
        "coupon": "SUMMER_FUN",
        "currency": "USD",
        "items": [{
          "item_id": "SKU_12345",
          "item_name": "jeggings",
          "coupon": "SUMMER_FUN",
          "discount": 2.22,
          "affiliation": "Google Store",
          "item_brand": "Gucci",
          "item_category": "pants",
          "item_variant": "Black",
          "price": 9.99,
          "currency": "USD"
        }],
        "transaction_id": "T_12345",
        "shipping": 3.33,
        "value": 12.21,
        "tax": 1.11
      }
    }]
  })
});

Bu isteği doğrulamak ve/veya düzenlemek için burayı tıklayabilirsiniz.

Sonuç Olarak

Google Analytics izleme işlemi ihtiyaçlar doğrultusunda tercih edilebilir farklı çözümleri barındırmaktadır. Genel olarak JavaScript izleme kodu ile işlemler gerçekleştiriliyor olsa da (dinamik yapısı itibariyle) alternatif olarak kullanılabilecek ve/veya cihaz temelinde değerlendirilebilecek farklı kurulum yöntemleri tercih edilebilmektedir. Measurement Protocol ise platform / cihaz sınırlandırması olmaksızın izleme işleminin istekler aracılığı ile gerçekleştirilebilmesini sağlamaktadır. Bu sayede, normal şartlarda kod kurulumunun mümkün olmadığı durumlarda da, örneğin image etiketi ile izleme işlemlerini gerçekleştirebilmekteyiz.