Aylarca Kör Uçuyorduk: Analytics Kodunda Unutulan Placeholder ID
Aylarca Kör Uçuyorduk: Analytics Kodunda Unutulan Placeholder ID'
Geçen ay rutin bir performans kontrolü yaparken mideme oturan bir şey fark ettim: Google Analytics 4 panelimiz bomboştu. Sıfır oturum, sıfır kullanıcı, sıfır sayfa görüntüleme. Oysa Search Console'da günlük binlerce gösterim görüyorduk. İlk düşüncem "belki Analytics'i yanlış hesaba bağlamışızdır" oldu, ama gerçek çok daha utanç vericiydi.
Sorunun Fark Edilişi: İki Panel, İki Gerçek
AICompatible.com'u 11 dilde yayınladığımızdan beri Search Console düzenli olarak trafik gösteriyordu. İngilizce versiyonumuz günde 2-3 bin gösterim alıyor, Türkçe ve diğer diller de yavaş yavaş tırmanıyordu. Ama Analytics paneline her girdiğimde aynı manzarayla karşılaşıyordum: "No data received in the last 48 hours."
İlk başta bunun geçici bir gecikme olduğunu düşündüm. Belki Google'ın veri işleme pipeline'ında bir sorun vardır diye bekledim. Bir hafta geçti, iki hafta geçti. Sonunda kaynak koduna bakmaya karar verdim.
Chrome DevTools'u açtım, <head> bölümüne göz attım ve işte oradaydı:
<script async src="https://www.googletagmanager.com/gtag/js?id=G-MEASUREMENT_ID"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-MEASUREMENT_ID');
</script>
Yüzüm kızardı. Dokümantasyondan kopyala-yapıştır yapmıştım ama G-MEASUREMENT_ID placeholder'ını gerçek ID ile değiştirmeyi unutmuşum. Kod tekniken çalışıyordu, JavaScript hatası vermiyordu, ama hiçbir veri göndermiyor, Google'ın sunucularında böyle bir property olmadığı için tüm istekler boşa gidiyordu.
Teşhis: Kaç Dil Etkilendi?
Hemen diğer dil versiyonlarını kontrol ettim. İngilizce, Almanca, Fransızca, İspanyolca, İtalyanca, Portekizce, Rusça, Japonca, Korece, Çince, Türkçe... Hepsinde aynı placeholder. 11 dil, muhtemelen 3 aylık trafik verisi, tamamen kayıp.
Network sekmesinde collect?v=2 isteklerini inceledim. İstekler gidiyordu ama Google'dan dönen yanıt her zaman boştu. Gerçek bir Measurement ID olsaydı, yanıtta en azından bir tracking cookie set edilirdi.
Çözüm: Gerçek Property Oluşturma ve Otomatik Dağıtım
İlk adım gerçek bir GA4 property oluşturmaktı. Manuel olarak Google Analytics arayüzünden yapabilirdim ama 11 dil için ayrı property'ler mi yoksa tek bir property'de çoklu dil mi kullanmalıyım sorusu vardı. Raporlama kolaylığı için tek property, çoklu data stream yaklaşımını seçtim.
Google Analytics Admin API'yi kullanarak property'yi programatik olarak oluşturdum:
from google.analytics.admin import AnalyticsAdminServiceClient
from google.analytics.admin_v1beta.types import Property
client = AnalyticsAdminServiceClient()
property = Property()
property.display_name = "AICompatible.com - Multi-language"
property.time_zone = "Europe/Istanbul"
property.currency_code = "USD"
created_property = client.create_property(property=property)
measurement_id = created_property.name # G-XXXXXXXXXX formatında
Ardından her dil için ayrı data stream oluşturdum, böylece raporlarda dil bazlı segmentasyon yapabilecektim:
for lang in ['en', 'de', 'fr', 'es', 'it', 'pt', 'ru', 'ja', 'ko', 'zh', 'tr']:
stream = client.create_data_stream(
parent=created_property.name,
data_stream={
'display_name': f'AICompatible - {lang}',
'type': 'WEB_DATA_STREAM',
'web_stream_data': {
'default_uri': f'https://aicompatible.com/{lang}'
}
}
)
Sonra gerçek Measurement ID'yi tüm şablon dosyalarına dağıtmam gerekiyordu. Manuel olarak 11 dosyayı düzenlemek yerine, build script'ime bir adım ekledim:
MEASUREMENT_ID="G-ABC123XYZ" # Gerçek ID
for lang in locales/*; do
sed -i "s/G-MEASUREMENT_ID/${MEASUREMENT_ID}/g" "${lang}/index.html"
sed -i "s/G-MEASUREMENT_ID/${MEASUREMENT_ID}/g" "${lang}/base.html"
done
Deploy ettikten 10 dakika sonra Analytics panelinde ilk gerçek zamanlı kullanıcıları görmeye başladım. Rahatladım ama aynı zamanda 3 aylık veri kaybının acısını hissettim.
Genel Ders: Placeholder'lar Sessiz Katillerdir
Bu sorun sadece bize özgü değil. Çok sayıda site şablonu, starter kit ve hatta bazı CMS temaları Analytics kodunu placeholder ID ile birlikte geliyor. Geliştirici kodu kopyalıyor, "sonra değiştiririm" diyor ve unutuyor. Kod hata vermiyor, console temiz görünüyor, ama veri toplanmıyor.
Kendi sitenizde bunu kontrol etmek için:
- Kaynak kodunuzu açın ve
G-MEASUREMENT_ID,UA-XXXXX-Ygibi generic ID'ler arayın - Network sekmesinde
google-analytics.com/collectveyaanalytics.google.com/g/collectisteklerini inceleyin - Analytics panelinizdeki gerçek zamanlı raporun çalışıp çalışmadığını test edin
- Search Console trafiğiniz varsa ama Analytics'te yoksa, büyük ihtimalle bu sorun sizde de var
AICompatible.com'un site tarayıcısını geliştirirken bu deneyimden ders aldık. Tarayıcımız artık sadece Analytics kodunun varlığını değil, ID'nin gerçek bir Google property'ye ait olup olmadığını da kontrol ediyor. Placeholder ID'ler, yanlış format, hatta süresi dolmuş Universal Analytics (UA-) kodları için uyarı veriyor. Çünkü kör uçmak, hiç uçmamaktan daha tehlikeli.
3 aylık veri kaybını geri getiremiyorum ama en azından bundan sonraki her ziyaretçiyi sayabiliyorum. Ve bu hatayı başkalarının yapmaması için elimden geleni yapıyorum.