24 Ara 2018

8 dk okuma

Google Tag Manager ile Ağ Trafiğini İzlemek

Google Tag Manager ile Ağ Trafiğini İzlemek

GTM ile takip edilmek istenen aksiyon form gönderimleri olduğunda iş birazcık karışabiliyor. Çoğu zaman form gönderimini takip eden bir sayfa gösterimi ya da HTML <form> etiketlerinde validasyon özelliğinin kullanılması kolay bir şekilde kurulum yapabilmemiz için yeterli oluyor. Ancak form gönderimleri yeni bir sayfa gösterimi ile takip edilmiyorsa ya da standart olmayan form işaretlemesi kullanılıyorsa biraz daha özel çözümlere gitmek gerekebiliyor.

Yazının bundan sonrası, GTM içerisindeki yerel tetikleyiciler ile takip edilmesi pek de mümkün olmayan form işlemlerinin ölçümlenmesi için kullandığım çözümü anlatıyor olacak. Başlamadan önce, hatırlatmakta fayda var. Ağ trafiğini dinleyerek gerçekleştireceğimiz kurulumu aşağıdaki koşullarda kullanmanızı öneririz:

  • Form gönderiminin akabinde gösterilen bir teşekkürler sayfası bulunmuyorsa
  • HTML düzeyindeki form işaretlemesi, GTM’in yerel Form Submission tetikleyicisinin sağlıklı bir şekilde çalışmasına imkan vermiyorsa
  • Yukarıdaki herhangi bir seçenek için geliştirme yapılabilecek zaman ve işgücü kaynağı bulunmuyorsa

Bu koşulları sağlıyorsanız, kurulum için gerekli reçeteyi okumaya devam edebilirsiniz. Yapacağımız kurulum şu şekilde olacak: Form gönderimlerini ağ trafiğindeki istekleri izleyerek yakalayıp, her yeni form gönderimini Google Sheets’te oluşturduğumuz hesap tablosuna yeni bir kayıt olarak ekleyeceğiz. Nightmarejs ile testlerimizi gerçekleştireceğiz. Bu senaryo için ihtiyaç listemiz aşağıdaki gibi oluşuyor:

Tarayıcının yapacağı XHR isteklerini izlememize imkan sağlayan ufak bir script Google Sheets dökümanımıza gelen istekleri yanıtlamak ve yeni kayıt oluşturmak için kullanacağımız bir Apps Script makrosu Takip edeceğimiz forma girilen kullanıcı bilgilerini saklayacak değişkenler İlk adımda oluşturacağımız script’i çalıştırabilmek için herhangi bir web sayfasına kendi GTM kapsayıcımızı eklememizi sağlayacak bir Nightmarejs ortamı

Adım 1 ile başlayalım.

Google Tag Manager ile Ağ Trafiğini İzlemek

XHR -XMLHttpRequest-, tarayıcıda çalışan script'lerin uzak sunucular ile veri alışverişi yapabilmesini sağlayan bir HTTP arayüzü olarak tanımlanabilir. Çoğu zaman bir form gönderimi ile iletilmek istenen bilgilerin web sitesinin kayıtlarına girebilmesi için XHR kullanımının gerekli olduğunu söyleyebiliriz. Dolayısıyla, ağ trafiğini izlemek için yazacağımız script’in XHR tipindeki trafiği izlemesi gerekiyor. Aşağıdaki script tam olarak bunu yapıyor olacak:

1580047538 wp 2018 12 xhrintercept 864x1024 Script, tarayıcının varsayılan XHR davranışına ufak bir ekleme yaparak herhangi bir isteğin cevabına erişebilmemizi sağlıyor. Bu kod parçası içerisinde kurulum aşamasında bizim için önemli olacak ve mutlaka özelleştirmemiz gereken iki alan var. İlki, 14. satırdaki targetURL değişkeni.

1580047543 wp 2018 12 targeturl 1024x256

Bu değişkenin değerini, form gönderiminde istek yapılan URL ile değiştirmeliyiz. İlerleyen kısımlarda hedef URL’imizi nasıl tespit edebileceğimizi aktarıyor olacağım. İkinci özelleştirilmesi gereken alan ise, 16 ve 24. satırlar arasındaki bölüm.

1580047548 wp 2018 12 status 1024x509

Bu bölümde, XHR isteği yapılan adresin bizim takip etmek istediğimiz adres olup olmadığını kontrol ediyoruz. Eğer hedef URL’imize yapılan bir isteğin cevabını bulmuşsak, Google Sheets için oluşturacağımız etiketi çalıştıracak tetikleyiciyi bu bölümde oluşturuyoruz. Bu örnekte, dataLayer’a ileteceğim bir custom event ile Google Sheets için kullanacağım etiketi tetikliyor olacağım. Dilerseniz, Fetch API kullanarak yeni bir tetikleyici ve etiket kullanmadan, doğrudan bu kod bloğu içerisinde Google Sheets dökümanınıza istek yapabilirsiniz. Ayrıca dataLayer’a iletilen nesne içerisinde ‘message’ isimli bir değişken de bulunuyor. Bu tamamen tercihe bağlı olarak kullanacağımız bir değişken. Ben başarılı bir form gerçekleştirildiğini kontrol edebilmek için message değişkeninin değerini kullanıyor olacağım. Siz ihtiyaçlarınız doğrultusunda yakaladığınız yanıtı nasıl kullanacağınıza kendiniz karar vermelisiniz. İkinci adıma geçebiliriz.

Google Sheets Hesap Tablosuna Yeni Kayıt Ekleme

Google Sheets, Apps Script altyapısını kullanan makrolar ile bir hesap tablosu olmaktan daha fazlasını sunan etkili bir araç. Aşağıdaki script, Google Sheets dökümanımıza özel olarak oluşturacağımız bağlantıya yapılan HTTP isteklerindeki sorgu parametrelerini okuyup, hesap tablomuza yeni satırlar eklememizi sağlıyor olacak:

1580047622 wp 2018 12 sheetsmacro 1024x975

Bu kod parçası içerisinde özelleştirmemiz gereken alan ise _getParams fonksiyonunun içeriği.

1580047629 wp 2018 12 getparams 1024x557

Parametre isimlerini ve her bir parametre için oluşturacağımız değişkenleri belirlemeli ve bu alanı düzenlemeliyiz. Üçüncü adımı şimdilik atlıyorum, kurulum adımlarında bu başlığa geri dönüyor olacağız. Dördüncü adımda Nightmarejs ile tarayıcımızı çalıştıracağız.

Nightmarejs ile Tarayıcı Otomasyonu

Nightmarejs, büyük ölçekli tarayıcı otomasyonu yapabilmemize imkan sağlayan kullanışlı bir API sunuyor. Bu sayede ölçümleme kurulumlarının test aşamasında da oldukça faydalı bir araca dönüşebiliyor. Ancak bu yazıdaki kullanım alanı çok daha kısıtlı olacak. Nightmarejs ile bir tarayıcı penceresi çalıştıracağız ve GTM kapsayıcımızı örnek kurulum için seçtiğimiz sayfaya dahil edeceğiz. Her ne kadar kurulum demosu için ZEO.org’un ana sayfasını seçmiş olsam da erişimimizin bulunmadığı herhangi bir web sayfasına kendi GTM kapsayıcımızı nasıl enjekte edebileceğimizi de bu sayede göstermiş olacağız.

Not: Nightmarejs’i çalıştırabilmek için Nodejs çalışma zamanına ihtiyacımız var. Bu aşamalarla vakit kaybetmemek adına siz Tag Manager Injector eklentisini kullanabilirsiniz. Aşağıdaki script’i bir dosyaya kaydedip, komut satırı yardımıyla Node üzerinde çalıştırabiliriz.

1580047635 wp 2018 12 nminstance 1024x509

16. satırdaki parantezler içerisine formun bulunduğu sayfayı yazarak bu kodu özelleştirmelisiniz. Aynı zamanda aynı dizinde container.js adlı bir dosya oluşturarak GTM takipçinizi <script> etiketleri olmadan bu dosyaya eklemelisiniz. Benim kullanacağım container.js dosyasının içeriği aşağıdaki gibi:

1580047643 wp 2018 12 gtminject 1024x347

Kendi GTM kapsayıcımızı enjekte edeceğimiz sayfada hali hazırda mevcut bir GTM takipçisinin bulunması bir problem teşkil etmiyor. Bizim kapsayıcımız sorunsuz bir şekilde çalışacaktır. Neredeyse hazırız. Kurulum aşamasına geçebiliriz. Kurulumu, ZEO.org anasayfasındaki iletişim formu için yapacağız.

1580047651 wp 2018 12 zeo org form 1024x578

Değişkenler

GTM üzerinde oluşturacağımız bir takım değişkenlere ihtiyacımız var. İlk olarak, form alanlarını yakalayacak ufak bir JavaScript fonksiyonu yazacağız. Aşağıdaki fonksiyon benim işimi görüyor olacak.

1580047670 wp 2018 12 inputvals 1024x756

Workspace ekranından Variables > New > Custom JavaScript adımlarını takip ederek yukarıdaki fonksiyonu yeni bir değişken olarak tanımlayıp kaydediyorum.

1580047676 wp 2018 12 z form bilgileri 1024x613

Bu değişkene Form Bilgileri ismini vererek bir sonraki değişkene geçiyorum. Sabit bir Google Analytics takipçisinin her tarayıcı için oluşturduğu özgün çerez tanımlayıcısı olan clientId bilgisini de hesap tablosuna yapacağım girişlerde barındırmak istiyorum. Bunun için aşağıdaki fonksiyon, sayfada üretilen tüm clientId’leri dönüyor olacak.

1580047754 wp 2018 12 clientid 1024x549

Bir üstteki değişkenin adımlarını takip ederek ClientId Değerleri isimli bir Custom JavaScript değişkeni oluşturup kaydediyorum. Sırada form gönderimi sonrasında gelen cevabı saklayacağımız değişken var. Bunun için aşağıdaki dataLayer değişkenini oluşturdum.

Değişkenlerimiz neredeyse hazır. Son bir değişken daha oluşturmamız gerekecek, bu değişkeni daha sonra oluşturacağız. Etiketlere geçmeden önce, Google Sheets dökümanımızı ve makromuzu hazırlayalım. Yeni bir hesap tablosu oluşturup, ilk satıra başlıkları girdim.

1580047771 wp 2018 12 z google sheets 1024x345

Ardından üst menüden Tools > Script Editor adımlarıyla makro ekranına geçiyorum.

1580047776 wp 2018 12 z google sheets 2 1024x394

Daha önce hazırladığımız script’i yapıştırıp, projeye bir isim verdim ve kaydettim.

1580047873 wp 2018 12 z google sheets makro 1024x604

Google Sheets’teki son adımımız, makromuzu bir web application olarak yayınlamak. Bunun için editör ekranında üst menüden Publish > Deploy as web app adımlarını takip ediyorum.

1580047890 wp 2018 12 z google sheets makro 2 1024x419

Açılan diyalogda “Who has access to the app:” seçeneğini “Anyone, even anonymous” olarak ayarlıyorum.

1580047897 wp 2018 12 z google sheets makro 3

“Deploy” butonuna tıkladıktan sonra gerekli izinleri vererek oluşan URL’i kaydediyorum.

1580047940 wp 2018 12 z google sheets makro 4

Bu bağlantıyı Google Tag Manager’da tetikleyeceğimiz etikette kullanacağız. URL’in aşağıdakine benzer bir görüntüsünün olması gerekiyor.

1580047950 wp 2018 12 appurl 1024x253

Bu URL’e yapılacak her yeni HTTP (GET) isteği, makromuzda belirlenen parametreleri içerdiği sürece hesap tablomuza yeni bir girişle sonuçlanıyor olacak. Test etmek için aşağıdaki gibi bir URL oluşturdum.

 https://script.google.com/macros/s/AKfycbzZOWVITxWHjnjcTl3jX-JL\_-                                                               DwnMA1oHmbidvcb0M3H_A6Mm4/exec?                                                                                                               name=erdal&company=test&email=[email protected]&phone=123123123&cpref=Phone&clid=12312312.312 3123

Google Sheets’in bana verdiği bağlantının sonuna makroda belirlediğim parametreleri değerleriyle birlikte ekledim. Bu URL’i tarayıcımda açmak istediğimde aşağıdaki gibi bir yanıt alıyorum:

1580047957 wp 2018 12 z google sheets makro test 1024x198

Google Sheets dökümanıma geri döndüğümde, yeni satırın başarılı bir şekilde eklenmiş olduğunu görüyorum:

1580047970 wp 2018 12 z google sheets test 2 1024x379

GTM üzerinde bu URL’in parametre değerlerinin dinamik olarak belirleneceği bir kurgu oluşturuyor olacağız. Google Sheets ile işlemlerimiz bitti. Tekrar GTM’e dönebiliriz.

Tetikleyiciler

Toplamda iki tetikleyiciye ihtiyacımız var. Ağ trafiğini izlememize imkan sağlayan script için bir adet sayfa görüntüleme tetikleyicisi ve bir de form doldurma işleminin gerçekleştiğinden haberdar olmak için oluşturacağım özel etkinlik tetikleyicisi. Takip etmek istediğimiz form yalnızca ana sayfada bulunduğu için, bu koşulu sağlayan bir pencere yükleme tetikleyicisi tanımlıyorum.

1580047975 wp 2018 12 z gtm trigger 1 1024x443

Tarayıcının XHR davranışını değiştiren bir script ekleyeceğimiz için pencere yüklendi etkinliğini beklememiz gerekiyor.

Not: Pencere yükleme etkinliğini beklemenize rağmen, ağ trafiğini izlemek için oluşturacağımız script sayfadaki diğer işlemlerin çalışma düzenini bozabilir. Bu nedenle yeterince test yapmadan bu script’i kullanmanızı önermiyoruz. Form gönderimleri için ‘_formSubmit’ adında bir özel etkinlik oluşturup tetikleyici kurulumunu tamamlıyorum.

1580047984 wp 2018 12 z gtm trigger 2 1024x374

Etiketler

Tetikleyicilerde olduğu gibi, iki tane etiket oluşturacağız. İlk olarak, ağ trafiğini izleyecek script’i Custom HTML olarak ekliyorum ve daha önce oluşturduğumuz pencere yüklendi eylemini tetikleyici olarak belirliyorum.

1580048022 wp 2018 12 z gtm tag 1 1024x691

Bir sonraki adıma geçmeden önce bir hatırlatma yapalım. Yukarıdaki script’te targetURL değişkenine vereceğimiz değeri nasıl seçeceğimizi açıklamamıştık. Bu değişken, form doldurma işlemlerinde istek yapılan bağlantıyı işaret ediyor olmalı. Örneğin, ZEO.org’daki formun hangi bağlantıya istek yaptığını, tarayıcının geliştirici araçlarında aşağıdaki gibi görebiliyorum:

1580048040 wp 2018 12 z form request url 1024x575

Siz de, kurulum gerçekleştireceğiniz web sitesinin hangi adrese istek yaptığını tespit ederek, targetURL değişkeninin değerini değiştirmelisiniz. Sırada kurulumumuzun son adımı var. Form doldurma işlemini Google Sheets’e iletecek Custom Image etiketi. Bu etiket türü, HTML’e bir <img> elementi eklemek için var. Her imaj elementinde olduğu gibi, eklenecek görsel URL’ine HTTP “GET” isteği gerçekleştiriyor.

Biz Google Sheets’te oluşturduğumuz URL’e istek yapabilmek için kullanıyor olacağız. Bu durumda etiket kurulumunun ilk aşaması önceki adımlarda hazırladığımız bağlantı URL’inin dinamik değerlerden oluşmasını sağlamak olmalı:

           https://script.google.com/macros/s/AKfycbzZOWVITxWHjnjcTl3jX-JL\_-                                                                   DwnMA1oHmbidvcb0M3H_A6Mm4/exec?{{Form Bilgileri}}&clid={{ClientId Değerleri}}

Daha önce oluşturduğum iki değişkenin ismini URL’imin sonuna ekledim. Bu URL’in geçerli bir URL olduğundan emin olmak için aşağıdaki fonksiyonu bir Custom JavaScript değişkeni olarak tanımlıyorum.

1580048050 wp 2018 12 decodeuri 1024x349

Değişkenim aşağıdaki gibi gözüküyor:

1580048099 wp 2018 12 z gtm var 2 1024x539

Bu değişkeni Custom Image etiketinin Image URL alanına giriyorum ve tetikleyici olarak daha önce oluşturduğumuz özel etkinliği belirliyorum.

1580048104 wp 2018 12 z gtm tag 3 1024x656

Not: Custom Image yerine bir dönüşüm etiketi tanımlamak isterseniz, etiket oluşturma ekranında Advanced Settings > Tag Firing Options > Once per page ayarını aktifleştirmeniz, tekrarlı sayımları engelleyecektir. Kurulumu tamamlamadan önce son bir düzenleme yapmam gerekiyor. ZEO.org anasayfasındaki form, gönderimin başarılı bir şekilde gerçekleşip gerçekleşmediğini istek yanıtında belirtiyor. İşlem başarısız olduğunda aşağıdaki yanıtı alıyoruz:

1580048111 wp 2018 12 z form valid 2 1024x345

Başarılı olduğunda ise aşağıdaki yanıtı alıyoruz:

1580048117 wp 2018 12 z form valid 1024x377

Yalnızca başarılı işlemleri takip etmek istediğim için, Google Sheets için hazırladığımız etiketi çalıştıracak tetikleyiciye yeni bir kural ekliyoruz.

1580048121 wp 2018 12 z gtm trigger edit 1024x668

Önceki adımlarda oluşturduğumuz Form Yanıtı değişkenindeki değeri kontrol ederek, tetikleyicimi düzenledim. Artık hazırız. GTM kapsayıcımızı Submit butonuna tıklayarak yayınlıyoruz -önizleme modunda çalışmamıza gerek bulunmuyor-. Sıra teste geldi. Nightmare script’imizi Node ortamında çalıştırıyorum. ZEO.org anasayfası yeni bir tarayıcı penceresinde açıldıktan sonra, harici GTM kapsayıcımın sayfaya eklendiğini görüyorum:

1580048134 wp 2018 12 z test container 1024x625

Form alanına gerekli bilgileri girip, gönderimi gerçekleştirdiğimde Custom Image etiketinin başarılı bir şekilde çalıştığını görüyorum:

1580048144 wp 2018 12 z test valid 1024x622

Doğrulama için Google Sheets tablomuzu kontrol ediyorum:

1580048149 wp 2018 12 z test sheets 1024x395

Her şey yolunda görünüyor.

Özetle

Bazen ölçümleme kurulumlarında workaround denebilecek çözümler üretmemiz gerekebiliyor. Bu yazı da aslında bu tarz eforlara dair bir örnek. Hâliyle en güvenilir seçenek değil. Uygulamanız hâlinde mümkünse çok sayıda test yapmanızı, farklı tarayıcılardaki davranışı incelemenizi öneririm.

Yazıdaki tüm script’lere aşağıdaki bağlantıdan erişebilirsiniz. https://github.com/zeoagency/gtm-ile-ag-trafigini-izlemek

Kurulum aşamasında herhangi bir problem ile karşılaşırsanız yardımcı olmaktan memnuniyet duyarız.

Bize ulaşmanız yeterli!

İlgili hizmet

Ölçümlemeniz gerçek bir kararı yanıtlasın

Web analytics çalışmasında strateji, veri toplama, raporlama ve analizi bir araya getiriyor, kararın arkasındaki kanıtı ekibinizin kontrol edebileceği açık bir düzende kuruyoruz.
Web analytics hizmetlerini inceleyin