Mobil uygulaması olan şirketlerde tekrar eden bir sahne var.
Uygulama içindeki satın alma çalışıyor, mağaza raporunda gelir görünüyor, muhasebe kaydında karşılığı var. Google Ads hesabına bakıyorsunuz: kampanya harcıyor, yükleme sayısı artıyor, dönüşüm sütununda ya sıfır var ya da mağazadaki rakamın üçte biri.
Bu, reklam yönetiminin sorunu değil. Uygulamada olay ölçümünün web tarafından farklı çalışmasının sonucu. Web'de kırık bir kurulumu tarayıcının konsolunu açıp yarım saatte görürsünüz. Uygulamada aynı kırıklık bir sonraki sürüm çıkana kadar orada durur.
Bu rehber, uygulamada bir olayın nerede doğduğunu, hangi katmanda değiştirilebildiğini ve Google Ads'e dönüşüm olarak nasıl gittiğini adım adım anlatıyor. Her adımda hem ne yapılacağını hem de bunu nasıl doğrulayacağınızı yazdık.
Önce bir yanlış anlamayı düzeltelim
Türkçe kaynakların çoğunda "GTM ile uygulamada event takibi" ifadesi geçiyor ve bu, kurulumu ilk kez yapan ekibi yanlış yere götürüyor.
Google Tag Manager mobil uygulamada olay toplamaz. Google'ın kendi dokümanındaki ifade net: Tag Manager, Google Analytics for Firebase SDK'sının kaydettiği olayları, parametreleri ve kullanıcı özelliklerini girdi olarak kullanır.
Yani sıralama şöyle: olayı uygulamanın kodu üretir, Firebase SDK'sı kaydeder, GTM araya girip onu değiştirir veya engeller, sonra olay Analytics'e ve oradan Google Ads'e gider.
| İş | Kim yapar | Değiştirmek için |
|---|---|---|
| Olayın tetiklenmesi | Uygulama kodu | Yeni sürüm gerekir |
| Olayın kaydedilmesi | Firebase SDK | Yeni sürüm gerekir |
| Olay adının değişmesi | GTM | Container yayını yeter |
| Parametre değerinin değişmesi | GTM | Container yayını yeter |
| Olayın engellenmesi | GTM | Container yayını yeter |
| Otomatik olayların engellenmesi | Hiç kimse | Mümkün değil |
Bu tablo rehberin geri kalanının özeti. GTM'i kurmanın tek somut karşılığı en sağdaki sütun: kodu tekrar derlemeden, mağaza incelemesini beklemeden olay adını ve parametreyi değiştirebilmek.
Firebase SDK kurulu değilse GTM'in okuyacağı hiçbir şey yoktur. Container uygulamaya eklenir, hata vermez, hiçbir şey de yapmaz. Sıralama tartışmaya kapalı: önce Firebase, sonra GTM.
Web tarafından geliyorsanız
Web'de GTM kurmuş bir ekip uygulamaya geçtiğinde aynı zihinsel modeli
taşıyor ve bir yerde takılıyor. Web'de zincir şöyle: site dataLayer
dizisine bir nesne iter, GTM bunu okur, tag'i tetikler ve isteği kendisi
gönderir. GTM orada hem okuyucu hem göndericidir.
Uygulamada dataLayer diye bir şey yok. Olayı Firebase SDK kaydeder ve
Analytics'e kendisi gönderir. GTM gönderici değil, araya giren
katmandır: SDK kaydetmeden hemen önce olaya müdahale eder.
Farkın pratik sonucu şu: web'de GTM'i kaldırsanız ölçüm durur, uygulamada GTM'i kaldırsanız ölçüm devam eder, yalnız esneklik gider. Bu yüzden uygulamada "GTM kuralım da ölçüm başlasın" cümlesi anlamsız, "GTM kuralım da ölçümü sürümden bağımsız yönetelim" cümlesi doğrudur.
İki yapının alan alan karşılaştırması, Firebase'in adlandırma kuralları ve sınırları ayrı bir yazıda: mobil uygulamada dataLayer karşılığı.
Zincir dört halkadan oluşuyor
- veri akışı
- boş veya kesilmiş akış
- GTM container
Dikkat edin: Google Ads sonuncu halka. Ekipler genellikle oradan başlıyor, dönüşüm görünmeyince kampanyayı kurcalıyor. Sebep neredeyse her zaman birinci veya ikinci halkada.
Adım 1: Firebase ve Analytics SDK'sı
Bu adım atlanamaz, çünkü GTM'in besleneceği veri buradan geliyor.
Firebase konsolunda proje açılır, iOS ve Android uygulamaları ayrı ayrı
eklenir. Her platform kendi yapılandırma dosyasını indirir
(google-services.json ve GoogleService-Info.plist) ve bu dosyalar
projeye konur. Ardından Analytics SDK'sı bağımlılık olarak eklenir.
Buraya kadarı standart Firebase kurulumu ve dokümantasyonu bol. Asıl kritik nokta bundan sonrası.
Üç tür olay var ve karıştırılmamalı
Analytics'te olaylar üç gruba ayrılıyor ve hangisini kullandığınız raporda ne göreceğinizi belirliyor:
- Otomatik toplananSDK kendi kaydeder, kod yazılmaz
- Önerilenadı ve parametresi önceden tanımlı
- Özeladını siz koyarsınız
Otomatik toplananlar SDK kurulduğu anda akmaya başlar. Uygulamaya
özgü olanların bir kısmı şunlar: first_open, session_start,
app_update, os_update, app_remove (yalnız Android),
app_store_refund (yalnız Android), app_store_subscription_renew,
app_store_subscription_convert.
Önerilen olaylar adı ve parametre yapısı Google tarafından
tanımlanmış olaylardır. Kodu siz yazarsınız ama isim uydurmazsınız:
view_item, add_to_cart, begin_checkout, purchase,
in_app_purchase. Bunları kullanmanın somut karşılığı var, standart
raporlar ve Ads entegrasyonu bu adları tanıyor.
Özel olaylar son çaredir. Google'ın kendi ifadesi şu: özel olayı yalnızca başka hiçbir olay işinizi görmüyorsa oluşturun, çünkü özel olaylar standart raporların çoğunda görünmez.
En sık yapılan hata burada: ekip satin_alma veya PurchaseCompleted
gibi kendi adını uydurup özel olay yazıyor. Rapor boş kalıyor, Ads
tarafında dönüşüm eşleşmiyor, altı ay sonra hepsi yeniden yazılıyor.
Karşılığı olan bir önerilen olay varsa onu kullanın.
Uygulamanız e-ticaret değilse
Örneklerin çoğu e-ticaret üzerinden veriliyor ve bu, sepeti olmayan uygulamaları kurulumun dışında bırakıyor. Analytics'in önerilen olay listesi tek bir sete değil, iş modeline göre gruplara ayrılıyor.
| İş modeli | Önerilen olaylar | Ana dönüşüm |
|---|---|---|
| Satış (e-ticaret, seyahat, eğitim) | view_item, add_to_cart, begin_checkout, add_payment_info, purchase | purchase |
| Lead toplama (B2B, sigorta, otomotiv) | generate_lead, qualify_lead, working_lead, close_convert_lead | generate_lead |
| Oyun | level_start, level_end, level_up, post_score, unlock_achievement, spend_virtual_currency | in_app_purchase |
| Her uygulama | login, sign_up, search, share, select_content, tutorial_begin | değişir |
Lead toplama setindeki son üç olay dikkat çekici: qualify_lead,
working_lead ve close_convert_lead uygulamada gerçekleşmez. Bunlar
satış ekibinin CRM'de yaptığı işi ölçmek içindir ve oraya offline
aktarımla girer. Bu ayrım, uygulamadan gelen lead'in gerçekten satışa
dönüp dönmediğini görmenin tek yoludur.
Bir abonelik uygulaması için ana dönüşüm purchase değil,
app_store_subscription_convert olabilir. Bu olay otomatik toplanır,
yani kod yazmanız gerekmez, ama Google Ads tarafında dönüşüm eylemi
olarak seçilmesi gerekir. Seçilmezse ücretsiz denemeden ücretliye geçen
kullanıcı reklam raporunda hiç görünmez.
Kullanıcı özelliklerini atlamayın
GTM'in okuduğu üçüncü girdi kullanıcı özellikleri. Olaydan farkları, kullanıcıya yapışmaları ve sonraki bütün olaylara eşlik etmeleri.
Uygulamada işe yarayan örnekler: üyelik seviyesi, abonelik durumu, oturum açmış olup olmama, uygulamanın ilk açılış tarihi. Bunlar raporlarda kırılım olarak kullanılabiliyor ve Google Ads tarafında kitle tanımına girebiliyor.
Sınır 25 kullanıcı özelliği ve pratikte bu bol bir rakam. Buna rağmen çoğu kurulumda hiç kullanılmıyor, sonra "ödeme yapan kullanıcıların davranışı nasıl" sorusuna cevap veremiyoruz.
Kullanıcı özelliğine kişisel veri yazmayın. Ad, e-posta, telefon veya
kullanıcı kimliği yerine sınıflandırma yazın: premium, deneme,
ucretsiz. Analytics'e kişisel veri gönderilmesi hem politikaya
aykırıdır hem de hesabın kapanmasına yol açabilir.
Sayılabilir sınırlar
Uygulama veri akışlarında Analytics'in koyduğu sınırlar şunlar:
- Farklı olay adı500 (kullanıcı başına)
- Olay başına parametre25
- Kullanıcı özelliği25
Otomatik toplanan olaylar farklı olay adı sınırına dahil değil, yani o 500 tamamen sizin tanımladıklarınıza kalıyor. Pratikte bu bol bir rakam, ama uygulamanın her düğmesine ayrı olay adı veren kurulumlarda tükenebiliyor. Doğru yaklaşım az sayıda olay adı, çok sayıda parametre.
Adım 2: GTM container'ı eklemek
Kurulum sırası platformlar arasında benziyor, dosya yerleşimi ayrışıyor.
- 1Firebase Analytics çalışıyorSDK kurulu, olaylar Firebase konsolunda görünüyor.görünen: DebugView'da olay akışı var
- 2
Doğru container tipiTag Manager'da iOS veya Android container açılır. Legacy tipleri seçilmez.görünen: Container kimliği GTM ile başlıyor - 3SDK bağımlılığıGTM kütüphanesi projeye eklenir, derleme başarılı olur.görünen: Uygulama hatasız derleniyor
- 4Varsayılan container dosyasıTag Manager'dan indirilen sürüm dosyası projedeki doğru klasöre konur.görünen: Uygulama internetsiz açıldığında da tag yapılandırması var
- 5YayınContainer yayınlanır, uygulama güncellenmiş sürümü kendisi indirir.görünen: Yaklaşık 12 saatte bir yenileniyor
Legacy container tipleri 30 Haziran 2019'dan beri yeni oluşturulamıyor. Bugün açacağınız container zaten standart tip olacak, ama devraldığınız eski bir projede "Android (Legacy)" görürseniz o kurulumun Firebase ile konuşmadığını bilin.
Android
Bağımlılık modül düzeyindeki Gradle dosyasına eklenir:
dependencies {
implementation 'com.google.android.gms:play-services-tagmanager:18.3.0'
}
Container dosyası Tag Manager arayüzündeki Versions sekmesinden indirilir ve projede şu klasöre konur:
app/src/main/assets/containers/GTM-XXXXXXX
containers klasörü yoksa elle oluşturulur. Klasör adı çoğuldur ve
büyük harf duyarlıdır.
iOS
CocoaPods kullanıyorsanız:
pod 'GoogleTagManager', '~> 6.0'
Swift Package Manager kullanıyorsanız paket adresi şu:
https://github.com/googleanalytics/google-tag-manager-ios-sdk.git
SPM tarafında kolay atlanan bir ayar var: Build Settings altında
Other Linker Flags alanına -ObjC eklenmezse kütüphane doğru
bağlanmıyor.
Container dosyası proje kökünde container adlı bir klasöre konur:
PROJECT_ROOT/container/GTM-XXXXXXX.json
Xcode'a eklerken Create folder references seçeneği işaretlenmeli. İşaretlenmezse Xcode klasörü grup olarak alır, dosya derlemeye girmez ve uygulama container'ı bulamaz.
Android'de klasör adı containers, iOS'ta container. Tekil ve çoğul
farkı gerçek ve iki platformu aynı kişi kurduğunda en sık buradan
hata çıkıyor.
Varsayılan container ne işe yarar
Uygulama ilk kez açıldığında henüz Tag Manager'dan bir şey indirmemiştir. Projeye koyduğunuz dosya o boşluğu doldurur. Uygulama internete bağlanıp güncel sürümü indirdikten sonra varsayılan container bir daha kullanılmaz.
Pratik sonuç: o dosyayı güncel tutmanın uzun vadede bir anlamı yok, ama uygulamanın ilk açılışında ölçüm yapılmasını istiyorsanız boş bırakılamaz.
Adım 3: GTM'in gerçekten işe yaradığı yer
Buraya kadarki kurulum tek başına ölçümü iyileştirmez. Değeri şurada ortaya çıkıyor.
Diyelim ki uygulamanın 4.2 sürümünde satın alma olayı gelir bilgisini kuruş olarak gönderiyor. Analytics'te ciro yüz kat yüksek görünüyor, Google Ads yanlış değere göre teklif veriyor.
- eventpurchase
- value254.90
- currencyTRY
- düzeltmecontainer yayını
Düzeltme container'da. Değişken değeri yüze böler, container yayınlanır, uygulama sonraki yenilemede alır. Kod dokunulmadan kalır.
Google'ın dokümanında bu yetenek açıkça yazılı: Tag Manager, olayları Firebase SDK kaydetmeden önce değiştirebilir veya engelleyebilir, parametre değerlerini ekleyebilir, çıkarabilir, değiştirebilir ve olay adlarını uygulama güncellemesi olmadan düzeltebilir.
Yapamadığı şey de aynı netlikte: otomatik toplanan olaylar
engellenemez. first_open veya session_start sizin kontrolünüzde
değil.
Bu neyi mümkün kılıyor
Uygulama tarafında sürüm döngüsü yavaştır. Ölçüm tarafında ise düzeltme ihtiyacı sık çıkar: bir parametre yanlış tipte gelir, bir olay adı standarda uymaz, bir kampanya için geçici olarak ek parametre gerekir.
GTM kurulu bir projede bunların hepsi container yayınıyla çözülür. Kurulu olmayan projede her biri ayrı bir sürüm planlama toplantısına dönüşür. Fark budur, başka bir şey değil.
Adım 4: Satın almayı Google Ads'e dönüşüm olarak göndermek
Ölçüm kurulumunun para tarafına bağlandığı yer burası ve çoğu kurulumun yarım kaldığı yer de burası.
Analytics'e akan bir olay, kendiliğinden Google Ads'te dönüşüm olmaz. Bunun için iki şeyin yapılması gerekiyor: hesapların bağlanması ve olayın dönüşüm eylemi olarak seçilmesi.
Google Ads tarafında yeni bir dönüşüm eylemi oluştururken App türü seçilir ve kaynak olarak Google Analytics (Firebase) bağlantısı kullanılır. Bağlantı kurulduktan sonra hangi olayların dönüşüm eylemi olacağını listeden seçersiniz.
Bu adımda uygulamaya yeni kod yazılmaz. Google'ın ifadesi net: dönüşüm takibi Firebase için zaten kurulmuş olan kodu kullanır. Ajansınız bu aşamada sizden yeni bir sürüm istiyorsa nedenini sorun.
Satın alma olayında ürün kimliğini gönderiyorsanız item_id değerinin
Merchant Center feed'indeki item_id ile aynı olması gerekir. Aynı
değilse ürün seviyesinde raporlama ve feed'e bağlı kampanya tipleri
eşleşmez.
Doğrulama: kurulmuş saymak yetmez
Doğrulanmamış kurulum, kurulmamış kurulumdur. Dört madde, dört ayrı konsol.
- Nerede
- Firebase konsolunda DebugView. Cihazda hata ayıklama modunu açın ve uygulamada ilgili akışı baştan sona yapın.
- Doğru cevap
- Olay adı ve parametreleri saniyeler içinde akışta beliriyor.
- Yanlışsa
- Olay hiç görünmüyorsa kod tetiklenmiyor veya SDK kurulumu eksik. Bu noktada GTM'e bakmanın anlamı yok.
- Nerede
- Tag Manager'da Preview modu, ardından cihazı önizleme oturumuna bağlayın.
- Doğru cevap
- Önizleme ekranında olaylar listeleniyor ve tetikleyicilerin durumu görünüyor.
- Yanlışsa
- Bağlantı kurulmuyorsa container dosyası yanlış klasörde olabilir. iOS'ta Create folder references, Android'de containers klasör adını kontrol edin.
- Nerede
- Analytics'te Realtime raporu, uygulama veri akışı seçili.
- Doğru cevap
- Son 30 dakikada olay sayısı artıyor ve parametre değerleri doğru tipte.
- Yanlışsa
- DebugView'da görünüp burada görünmüyorsa olay filtreleniyor veya veri akışı yanlış seçilmiş.
- Nerede
- Google Ads'te Hedefler bölümünde dönüşüm eylemleri listesi.
- Doğru cevap
- Dönüşüm eyleminin durumu etkin ve son 30 günde sıfırdan büyük bir rakam var.
- Yanlışsa
- Rakam sıfırsa olay dönüşüm eylemi olarak seçilmemiş veya bağlantı kurulmamış olabilir.
Dördü de geçmeden kampanya optimizasyonuna geçmeyin. Yanlış veriyle çalışan bir kampanyanın öğrendiği her şey, sonradan silinmesi gereken yanlış bir öğrenmedir.
Sık yapılan altı hata
Firebase'i atlayıp GTM ile başlamak. Container kurulur, hata vermez, hiçbir şey de olmaz. GTM'in girdisi Firebase SDK'sının kaydettiği olaylardır.
Her ekrana ayrı özel olay adı vermek. 500 farklı olay adı sınırı bol görünür ama böyle bir kurulumda tükenir. Az olay adı, çok parametre.
Önerilen olay yerine kendi adını uydurmak. satin_alma yazan
kurulumda standart raporlar boş kalır, Ads eşleşmesi kurulmaz.
Klasör adını karıştırmak. Android containers, iOS container.
iOS'ta Create folder references seçeneğini atlamak. Dosya projede görünür, derlemeye girmez, uygulama container'ı bulamaz.
Otomatik olayları engellemeye çalışmak. Mümkün değil, dokümanda açıkça yazıyor. Rapor gürültüsünü olay engelleyerek değil, rapor tarafında filtreyle çözün.
Ne zaman GTM kurmaya değmez
Her uygulamanın GTM'e ihtiyacı yok ve gereksiz katman bakım maliyetidir. Şu üç durumda kurulumu ertelemek daha doğru:
Olay şeması henüz oturmadıysa. GTM var olan olayları yönetir, olmayanı üretmez. Önce hangi olayın hangi ekranda tetikleneceğini kağıt üstünde netleştirin, sonra kodlayın, sonra GTM'i düşünün.
Sürüm döngüsü zaten hızlıysa. İki haftada bir yayın yapan, mağaza incelemesini beklemeden dağıtabilen bir ekipte GTM'in getirdiği esneklik küçülür. Kazanç, kurulum ve bakım maliyetinin altında kalabilir.
Ölçümü yalnız bir kişi kullanıyorsa ve o kişi geliştiriciyse. GTM'in asıl faydası, kod yazmayan birinin ölçüm yapılandırmasını değiştirebilmesi. Pazarlama tarafında container'a dokunacak kimse yoksa aynı işi kodda yapmak daha az katman demektir.
Kurmaya değdiği durum bunların tersi: şeması oturmuş, sürüm döngüsü yavaş ve ölçüm yapılandırmasını pazarlama tarafının da değiştirmesi gereken bir uygulama.
Sonuç
Uygulamada ölçüm iki katmanlıdır ve karıştırıldığında kurulum yarım kalır. Firebase SDK olayı üretir, GTM onu yönetir. Birincisi olmadan ikincisinin okuyacağı veri yoktur, ikincisi olmadan her düzeltme bir sürüm bekler.
Doğru kurulmuş bir zincirde satın alma olayı uygulamada tetiklenir, GTM'de standarda çekilir, Analytics'te raporlanır ve Google Ads'te dönüşüm olarak sayılır. Bu dört halkanın hepsi ayrı ayrı doğrulanabilir ve doğrulanmadan kurulmuş sayılmaz.
Sık sorulan sorular
Evet. Firebase SDK tek başına olayları toplar ve Analytics'e gönderir. GTM'in kattığı şey ölçümün kendisi değil, ölçümü uygulama sürümünden bağımsız yönetebilmektir: olay adını ve parametre değerini container yayınıyla değiştirebilirsiniz.
Yayınladığınız sürüm uygulamaya yaklaşık 12 saatte bir iner. Bu yüzden container değişikliği anında yayına girmez. Test ederken Preview modu kullanın, o anlık çalışır.
Hayır. Google'ın dokümanında açıkça yazıyor: otomatik toplanan olaylar engellenemez. Rapor tarafında filtre ile veya ilgili olayı dönüşüm olarak işaretlememekle yönetebilirsiniz.
Hayır. Firebase projesi Google Ads ile bağlandıktan sonra hangi olayların dönüşüm eylemi olacağını arayüzden seçersiniz. Dönüşüm takibi zaten kurulu olan Firebase kodunu kullanır.
Evet. Tag Manager'da iOS ve Android ayrı container tipleridir, her platform kendi container kimliğini taşır ve dosya projede farklı klasöre konur.