Google Analytics ve GTM Domain Yönetimi
Cross-domain ve Subdomain Yapılandırma ve Raporlama İşlemleri
Google Analytics ve Google Tag Manager tarafında alan adı (domain) yönetimine dair daha önce Universal Analytics için Web Alanları Arası İzleme ve Google Analytics Çoklu Domain İşlemleri yazılarını paylaşmıştım.
Geçen zaman içerisinde pekçok değişiklik yaşandı. Bunlardan ilki çok tazesiyle (aslında App + Web adıyla bildiğimiz) GA4'ün resmi olaran duyurulmasıydı. Çok zamandır beta olarak deneme imkanımız olan araç artık Google Analyics üzerinden de yükseltme seçeneği ile birlikte sunulmaya başlandı. Hizmet verdiğim müşteriler (uygulama ve web'i bir arada yönetmeye çalışan) tarafında da süreç planlamaya başladık. Diğer bir konu da, entegrasyonların artık web-uygulama yönetiminin içerisine iyiden iyiye girmiş olması. Artık kapsamlı içerik yönetim sistemleri yerine pek çok durum için uygun servisler bir arada kullanılabilmekte.
Örneğin, web sitenizi Webflow üzerinden oluşturup uygulamanızı bir subdomain (alt alan adı) ile web sitenizle ilişkilendirebiliyor, formlarınızı Typeform gibi form-anket araçları üzerinden yönetebiliyor, varış sayfalarınızı Unbounce üzerinden yönetebiliyorsunuz. Elbette tüm bu süreçte farklı alan adları (cross-domain) ve alt alan adları (subdomain) arasında geçişler yaşanabiliyor. Bu durumda, reklam performansı ve web site trafiği ile ilgili çeşitli sorunlar yaşanması da mümkün hale gelebiliyor.
Daha önce yayınladığım yazılarda ga (analytics.js) kütüphanesini de açıklama içerisine dahil etmiştim. Bu yazıda doğrudan Global Site Etiketi (gtag), UA/GA4 sürümleri ve Google Tag Manager ayarlarından ve raporlama işlemlerinden bahsedeceğim.
Öncelikle, düzenlemelerin nedenlerini tam olarak anlayabilmek adına konunun biraz temeline inelim.
Google Analytics Raporları ve Alan Adı Yönetimi
Google Analytics kurulumu gerçekleştirdiğinizde sizden bir alan adı girmeniz istenir. Bu mülk oluşturma işleminin temelini ifade eder. Özetle, her alan adı tanımı bir Google Analytics tanımlayıcısına (Property Id) (UA-1234567-89, 123456789 vb.) sahip bir mülktür.
Behavior > Site Content > All Pages raporu altında listelenen Page tanımları bu alan adı altındaki sayfalardır. Unutmadan ekleyeyim, alan adı Hostname, sayfalar ise Request URI ile tanımlıdır.
Google Analytics, kullanıcılar tarafından başlatılan oturumları (session) izlemek amacıyla her bir isabet alındığında bir istemci kimliği değeri (client ID) toplar (bkz. Audience > User Explorer) ve bu değerler oturumun gerçekleştirildiği cihazda çerez (cookie) olarak saklanır1. Bu cookie içerisindeki benzersiz müşteri kimliği ile bir kullanıcının yeni bir kullanıcı (new visitor) mı yoksa geri gelen bir kullanıcı (returning visitor) mu olduğunu belirlenir. Aynı mülke eşleşen bir istemci kimliğine sahip bir isabet zaten gönderilmişse, bir kullanıcı geri dönmüş (bkz. Audience > Behavior > New vs Returning) olarak kabul edilir. Çerezler alan adı ile ilişkili olduğu için farklı alanlar tarafından erişilemezler.
Müşteri yolculuğunun tamamını daha etkili bir şekilde ölçülebilmesi için oturumların birden çok alanda ilişkilendirilebilmesi gerekir. İlişkilendirme için istemci kimliği değeri bir alandan diğerine aktarılmalıdır. Google Analytics site bağlama ile izleme kodu, kaynak web alanınıdaki bağlantıya kullanıcı kimliği, bağlayıcı parametresi, geçerli zaman damgası ve tarayıcı meta verilerini içeren bir parametre ekler.
Bağlayıcı parametresi şuna benzer; _ga=1.199239214.1624002396.1440697407
Bu parametre Google Analytics'in istemci kimliği ile alan adları arasında oturumları ilişkilendirmesini sağlar. Bu sayede, hedef web alanı ya da alanları istemci kimliğini kullanabilir ve aynı kullanıcıya sahip farklı alan adlarındaki oturumları birleştirebilir. Web alanları arası izleme birden fazla üst düzey alan adı arasında gerçekleştirecekse her alan için Google Analytics izleme kodunda değişiklik yapılması gerekir.
Bir kullanıcı yolculuğu ilk alanınızdan (birincil/kaynak) ikinci alanınıza (hedef) geçtiğinde, Google Analytics bunu ilk alanınız tarafından ikinci alanınıza yönlendirilen kullanıcı (referral) olarak yorumlar ve Analytics yeni bir oturum oluşturur. Kullanıcı etkileşimlerini birden çok alanda tek bir oturum olarak değerlendirmek için alanlarının yönlendirme hariç tutma listesine (Property > Tracking Info > Referral Exclusion List) eklenmesi gerekir2.
Örneğin, kurumsal sitenizi görüntüleyen (birincil alan) bir kullanıcının ürünlerinizin yer aldığı bir başka siteye (ikincil alan) gittiğini ve ardından kurumsal sitenize döndüğünü varsayalım. İkincil alan olarak kullanılan web adresi yönlendiren alan olarak hariç tutulmaz ise birincil alana her bir geliş için bir adet olmak üzere iki oturum sayılır. Ancak, ikincil alana gelen yönlendirmeleri hariç tutarsanız, birincil alana yapılan ikinci ziyaret yeni bir oturumu tetiklemez ve yalnızca bir oturum sayılır.
Web alanları arası izlemeyi (site bağlama) ile birlikte yönlendirme hariç tutma işlevini kullandığımızda, bir kullanıcı tek bir oturumda birden çok alan ile etkileşim kursa dahi birden çok oturumun tetiklenmemiş olur2.
Analytics mülkü ilk defa oluşturulduğunda, web alanı yönlendirme hariç tutma listesine otomatik olarak eklenir. Dolayısıyla, birden çok alt alanı izleyen bir web mülkünüz varsa kendine yaptığı yönlendirmeler görülmeyecektir.
Alan adınızın hariç tutma listesine eklenmediği ya da silindiği durumda (Örn. alanadi.com
) bir kullanıcı sitenizdeki bir alt web alanından diğerine geçerse (app.alanadi.com
), Analytics bunu bir ana makine adından yapılan yönlendirme olarak görür ve yeni bir oturum başlatır. Sonuç olarak, raporlarda yapay olarak artırılmış oturum sayısı verileri oluşacaktır.
Yönlendirme hariç tutma listesi, İÇERİR (contains) eşlemesini kullanır. Örneğin, example.com
adresini girerseniz sales.example.com
adresinden gelen trafik de example.com
alan adını içerdiği için hariç tutulur2.
Birincil (Kaynak) Alan
Birincil alan Google Analytics mülkünün ilişkili olduğu alan adını ifade eder.
İkincil (Hedef) Alan
Birincil alandan trafiğin geleceği ve başka Google Analytics mülkü ile ilişkili alan adını ifade eder.
Her iki alan da esasında trafiğin geldiği ya da gideceği senaryoya göre birincil ve ikincildir. Dolayısıyla, alan adları ile ilişkilendirme işlemi buna yönelik gerçekleştirilmelidir. Bu ilişkilendirme işlemi site bağlama (site linking) olarak ifade edilmektedir3. Hemen bir kod üzerinden örneklendireyim.
GTAG ve Site Bağlama
Hedef etki alanında, linker
parametresi içerisinde bir domains
değeri belirtildiğinde gtag.js
URL'deki bağlayıcı parametrelerini kontrol eder. Bağlayıcı parametresi bulunursa ve geçerliyse, gtag.js
istemci kimliğini parametreden ayıklar ve depolar. gtag.js
ile etki alanları arası ölçümün etkinleştirilmesi (site bağlama), bağlayıcı parametresinin sayfadaki bağlantı ve formlardaki URL'lere otomatik ve manuel olarak eklenmesine olanak tanır4.
Hemen örneklendirme sürecine bakalım. Birincil sitemizde de ikincil (ve varsa diğer) sitemizde de kendilerine ait Google Analytics snippet'in yer aldığını varsayalım. Bu durumda her iki snippet içerisine de alan adları ile ilişkiyi sağlayacak eklemeler yapmamız gerekir.
Son bir hatırlatma, site bağlayıcı parametresi 2 dakika kullanım süresine sahiptir. Bu zaman aşıldıktan sonra ilişkilendirme gerçekleştirilemez. Aynı şekilde, bağlayıcı parametresi zamanı dolacağı için manuel olarak da bu parametreyi kullanamazsınız. Ek olarak, ilgili parametre bağlantı ile click
etkinliği ile ilişkilendirilir. Yani, sayfanın kaynak koduna baktığınızda URL'ler içerisinde bağlayıcı parametresini göremezsiniz.
Tek Yönlü Alanlar Arası Ölçüm
Alanlar arasındaki ilişkilendirme otomatik olarak gerçekleşecek şekilde az önce bahsettiğim işlemleri yapamadığımız durumlar olabilir. Bu tür durumlara çözüm üretmek anlamında, hedef alan adına ait gtag.js
ziyareçinin geldiği URL içerisinden bağlayıcıyı parametresini seçebilecek şekilde düzenlenebilir. Bu işlem için accept_incoming
anahtarını aktifleştiririz.
gtag('config', 'GA_MEASUREMENT_ID', {
'linker': {
'accept_incoming': true
}
});
// Ya da config tanımı olmaksızın
gtag('set', 'linker', {
'accept_incoming': true
});
Ancak, unutmayın. Tek yönlü alanlar arası ölçüm, kullanıcı akışı yalnızca bir alandan diğerine geçtiğinde gerçekleşir. Alan adları arasında farklı geçişler olabileceği için mümkün olduğu kadar snippet yapısını iki yönlü çapraz alan ölçümü temelinde ele almak gerekmektedir5.
İki Yönlü Alanlar Arası Ölçüm
Birincil alan adımıza ait ID değerimiz GA_MEASUREMENT_ID_1
, alan adımız example.com
İkincil alan adına ait ID değerimiz de GA_MEASUREMENT_ID_2
ve alan adımız example-store.com
olsun.
Birincil alan adına ait GA snippet eklemesi:
gtag('config', 'GA_MEASUREMENT_ID_1', {
'linker': {
'domains': ['example-store.com']
}
});
Bu ekleme sayesinde snippet linker
parametresini, sayfadaki example-store.com
hedef etki alanına işaret eden tüm bağlantılara ekleyecektir.
İkincil alan adına ait GA snippet eklemesi:
gtag('config', 'GA_MEASUREMENT_ID_2', {
'linker': {
'domains': ['example.com']
}
});
Görüldüğü üzere, her snippet içerisinden diğer alan adına işaret eden linker
tanımı için de parametrelerimizin eklenmesini sağlamış olduk.
Tüm Alanlarda Tek Bir Snippet Kullanma
İki yönlü alanlar arası ölçümü daha da basitleştirmek için, analiz etmek istediğiniz tüm olası alanları domains
özelliğinde listeleyebilir ve bu kodu tüm ilgili sitelere ekleyebiliriz. Bu sayede herhangi bir alan adını gözden kaçırmamış veya yazım yanlışı yapmadığımızdan emin olmuş oluruz. Eğer alan adı alt alan adı değilse, her alan adı için domains
anahtar dizisine yeni alan adlarını eklememiz gerekir5.
gtag('config', 'GA_MEASUREMENT_ID_2', {
'linker': {
'domains': ['example.com', 'newdomain.com', 'secondwebsite.com', '...'],
}
});
Form İşlemleri
Eğer bağlantı değil de ikincil hedefe işaret eden formlar kullanıyorsak (action olarak tanımlı) varsa decorate_forms
ile form gönderilerinin de parametre almasını sağlayabiliriz5.
Örneğin, formumuz birincil alandan ikincil alana formları gönderiyor olsun:
gtag('config', 'GA_MEASUREMENT_ID_2', {
'linker': {
'domains': ['example.com', 'newdomain.com', 'secondwebsite.com', '...'],
'decorate_forms': true
}
});
// Ya da config tanımı olmaksızın
gtag('set', 'linker', {
'decorate_forms': true
});
İstisnai Durumlar
Kimi durumlarda URL içerisinde sorgu parametresi (query parameter), yani soru işareti ?
yerine bölüm ayracı (fragment), yani hashtag sembolü #
kullanmamız gerekebilir. Örneğin; https://example.com#_ga=1.199239214.1624002396.1440697407
. Bu tür durumlara yönelik olarak gtm.js
bize url_position
parametresini sunar5.
gtag('config', 'GA_MEASUREMENT_ID_2', {
'linker': {
'domains': ['example.com', 'newdomain.com', 'secondwebsite.com', '...'],
'url_position': 'fragment'
}
});
// Ya da config tanımı olmaksızın
gtag('set', 'linker', {
'url_position': 'fragment'
});
Google Tag Manager
Google Tag Manager pek çok işi daha da kolaylaştırmakta. Cookie paylaşımı da bunlardan biri. GA UA ve GA4 ile ilgili bahsi geçen tüm konular GTM için de geçerli. GTM kurulumunda kapsayıcı adı olarak bir alan adı belirtmek zorunlu değil. Dolayısıyla, pek çok farklı web sitesinde aynı GTM kapsayıcısını kullanabilir ve Page Hostname
(veya Page URL
) ile ilişkili olarak istediğimiz kodların ilgili alan adı altında çalışmasını sağlayabiliriz.
Birden fazla GA kodunu aynı GTM kapsayıcısı altında yönetiyorsanız tüm alan adlarını barındıran bir bir Sabit Değişken ya da web sayfası/uygulaması üzerinden bu veriyi almanız gerekiyorsa Veri Katmanı Değişkeni oluşturabilirsiniz. Elbette dataLayer başlığı altında ilettiğim kuralları göz önünde bulundurmalısınız. Önerim, karşılaşılabilecek aksilikleri minimuma indirmek için alan adlarının sabit değişken olarak yönetilmesi yönünde olacaktır.
İzlediğiniz yol hangisi olursa olsun amacımız aynı; yeni bir alan adı eklemek ya da var olanları düzenlemek olduğunda tüm kodlara müdahale etmek yerine sadece ilgili değişkenin içeriğini güncellemek.
GTM - GA Alan Adı Yapılandırması
Artık GTM kapsayıcımızdaki cookie paylaşacak Google Analytics etiketlerini düzenleyebiliriz. Bu işlemleri Google Analytics Ayarları üzerinden gerçekleştirmekteyiz.
(İ) ile değişken yapılandırması ekranına geçiş sağlayabiliriz. Aynı şekilde, Değişkenler altından da ilgili Google Analytics Ayarları bölümüne ulaşabiliriz. Bu sayede tüm Google Analytics etiketlerimiz için farklı UA ID'lerde aynı ayarları kullanabiliriz.
İzleme kimliğimiz kullanacağımız Google Analytics ID'sini ifade etmekte. Bu ayarları şablon olarak kullanacağımız için ID değerini de değişken olarak çağırabiliriz. Bu sayede değişkene istersek web sayfamız veya uygulamamız üzerinden de değer atayabiliriz. Asıl önemli olan alanlarımız, Çerez Alanı, allowLinker, cookieDomain ve Web Alanları Arası İzleme ayarları.
- Çerez Alanı
- Çerez Alanı olarak
auto
(otomatik) değerini verdiğimizde Google Analytics, kullanılacak en iyi cookie (_ga) alanını otomatik olarak belirler6. - Alan Adı: allowLinker
gtag.js
snippet düzenlemesindelinker
parametresinden bahsemiştim.true
değeri verdiğimizde Google Analytics'e URL'dekilinker
parametresine (_ga) bakması gerektiğini söylemiş oluruz.- Alan Adı: cookieDomain
- Alan adları için çerez yönetimini sağlar7. Az önce de bahsettiğim gibi, alan adlarını değişken olarak tutabiliriz. Bu durumda sadece ilgili değişkeni çağırmamız yeterli olacaktır. Diğer durumda ise, bu alana alan adlarını virgül ile ayırarak girmemiz gerekir.
- Alanları Otomatik Olarak Bağla
linker
parametresi altında belirttiğimiz alan adlarında olduğu gibi, otomatik alanlar arası bağlantı izleme ayarlarını yapmak için bu alana ilgili alan adlarını gireriz. Alan adlarını değişken olarak tutuyorsak değişkeni çağırmamız, diğer durumda alan adlarını virgülle ayrılmış olarak girmemiz gerekir.
Kare İşaretini Sınırlayıcı Olarak Kullan URL içerisinde _ga
parametresinin soru işareti yerine fragment ile aktarıldığı durumlarda true
değerini alır.
Formu Donat, eğer alan adı işlemleri bağlantıların yanı sıra form aracılığı ile gerçekleşiyorsa ilgili parametrenin form ile gönderilebilmesi için true
değerini alır.
Bu iki konuyla ilgili yukarıdaki İstisnai Durumlar başlığına göz atabilirsiniz.
Raporlama
Tüm ayarlarımızı yaptığımıza göre artık bu değişiklikleri raporlar üzerinden nasıl takip edebileceğimize bakabiliriz.
Normal şartlarda bir Analytics mülkü hangi web alanı ile ilişkili olursa olsun sayfa adresini Page boyutu altında sunacaktır. Yani, example.com/page-slug
URL'ine sahip sayfanın raporlar üzerinden sadece /page-slug
kısmını bize verir, bu veriye Google Analytics Raporları ve Alan Adı Yönetimi başlığı altında Request URI
aracılığı ile de ulaşabileceğimizden bahsetmiştim. İkincil boyut olarak Hostname
seçeneğini de raporlarımıza ekleyebilmekteyiz.
Ancak, kimi durumlarda alan adının da Page boyutu içerisinde yer almasını isteyebiliriz. Örneğin, index.php
gibi default index page'ler çoğu zaman Page alanında /
biçiminde yansır ya da aynı sayfa yolu farklı alan adları altında da yer alıyor olabilir. Bu durumda, ikincil boyut olarak Hostname
rapora eklemezsek sayfaları birbirinden ayıramayabiliriz. Bir çözüm yolu olarak Görünüm filtrelerinden faydalanabiliriz. Bu filtre sayesinde Page tanımlarımızın example.com/page-slug
şeklinde oluşturulmasını sağlayabiliriz.
Unutmayın, filtreler oluşturuldukları an itibariyle işlevlerini gerçekeştirebilirler ve oluşturulan filtreler oluşturuldukları sıraya göre veriye müdahale ederler.
- Field A -> Extract A
- Alan adını (Örn.
exaple.com
) ayıklayıp$A1
ile erişilebilir kılar. - Field B -> Extract B
- Sayfa URI'sini (Örn.
/page-slug
) ayıklayıp$B1
ile erişilebilir kılar. - Output To -> Constructor
- Sayfa değeri olarak alan adı ve sayfa yolunu
$A1$B1
birlikte kullanmamızı sağlar.
Opsiyonlar arasında özellikle önemli olan Override Output Field seçeneği. Bu seçenek filtre çıktısının önceki değeri değiştirmesini sağlar. Bu konu ile ilgili daha önce yayınladığım Raporlarda Tam Sayfa URL'ini Görüntüleme başlıklı yazıma da göz atabilirsiniz.
İşlemlerimiz bu kadar. Artık sayfa boyutu alan adını da barındıracak şekilde raporlarda yer bulacaktır. UA mülküne ait sayfa bilgilerine Behavior > Site Content > All Pages raporundan ulaşabiliriz.
- Cookies and user identification with gtag.js. Universal Analytics (gtag.js) ↩
- Hariç tutulan yönlendirmeler. Analytics Yardım ↩ ↩ ↩
- Web alanları arası izleme hakkında. Analytics Yardım ↩
- Web alanları arası izlemeyi kurma (analytics.js) ↩
- Measure activity across domains. Universal Analytics (gtag.js) ↩ ↩ ↩ ↩
- Automatic Cookie Domain Configuration. Google Analytics ↩
- Configuring cookie field settings. Google Analytics ↩