Ölçüm ve Analiz

Tag Manager Performansı Yavaşlatır mı?

Tag manager container'ından çıkan birden fazla script bağlantısı ve yük etkisini gösteren teknik diyagram

Tag manager, teknik bilgisi olmayan ekiplerin kolayca script ekleyebilmesi için tasarlanmış bir araçtır. Bu kolaylık beraberinde yaygın bir yanılgı getiriyor: tag manager eklenince script yönetimi düzene girdiğinden performans sorunları da azalıyor gibi algılanıyor. Oysa tag manager performansı iyileştirmez — scriptlerin merkezi bir noktadan yönetilmesini sağlar. Arada önemli bir fark vardır.

Tag manager olmadan 10 script ayrı ayrı sayfaya ekleniyorsa, tag manager ile aynı 10 script container üzerinden tetiklenir. Toplam JavaScript miktarı değişmez; üstüne bir de container'ın kendi yükü eklenir. Google Tag Manager'ın container scripti yaklaşık 30–40 KB (sıkıştırılmış) boyutundadır. Bu başlangıç olarak makul görünür, ama her tag'in tetiklediği zincirleme yükle birlikte toplam maliyet önemli bir boyuta ulaşabilir.

Sorun tag manager'ın varlığında değil, içinin nasıl dolduğundadır. Doğru yönetilen bir container performansı kabul edilebilir sınırlarda tutar; yönetilmeyen bir container ise fark edilmeden büyür ve bir noktada sayfanın en ağır bileşeni haline gelir.

Container içinden kaç bağlantı açılıyor

Container'ın kendi boyutu tek başına anlamlı bir kriter değildir. Asıl soru, içinden kaç bağlantı açıldığıdır: her tag kendi kaynaklarını yükler, bu kaynaklar farklı domain'lere bağlanır ve her biri ayrı bir DNS çözümlemesi, TLS el sıkışması ve ağ gecikmesi taşır.

Tipik bir e-ticaret sitesinde şu tag'ler bir arada bulunabilir: Google Analytics 4, Google Ads dönüşüm izleme, Meta Pixel, bir ısı haritası aracı, canlı destek widget'ı, bir A/B test platformu. Bunların her biri container'dan tetiklenir ve toplamda 500 KB ile 1 MB arasında ek JavaScript yükleyebilir. Container'ın kendi 40 KB'ı bu tabloda küçük kalır; asıl yük içindeki tag'lerden gelir. Third-party scriptlerin genel ölçüm yöntemlerini incelediğinizde bu bağlantı maliyetinin nasıl izole edileceği daha net görünür.

Tag birikimi nasıl görünmez hale gelir

Tag manager'ın en büyük tehlikesi kontrolsüz büyümesidir. Her kampanya için eklenen bir piksel, her yeni özellik için eklenen bir script, her ajans değişikliğinde geride kalan eski tag'ler zamanla birikerek görünmez bir yük oluşturur. Bir siteye yıllar içinde eklenen tag'lerin toplamı, başlangıçta planlanandan çok farklı bir profil oluşturur.

Bu birikim genellikle fark edilmez çünkü her ekleme ayrı ayrı küçük görünür. Tek başına 50 KB'lık bir tag zararsız gibi görünebilir; ama 20 benzer tag'in toplamı 1 MB'a yaklaşır. Üstelik tag'lerin bir kısmı kampanya bitince kaldırılmaz — yalnızca "pause" yapılır ya da tamamen unutulur. Container boyutu sessizce büyümeye devam eder ve kimse toplam maliyetin ne olduğunu bilmez.

Bu durumu görünür kılmanın en basit yolu, container'daki tag sayısını ve her tag'in son tetiklenme tarihini periyodik olarak gözden geçirmektir. Çoğu tag manager platformu bu bilgiyi raporlamaz; elle yapılan bir denetim gereklidir.

Tetikleme kurallarının yükleme sırasına etkisi

Her tag bir tetikleme kuralıyla çalışır: "tüm sayfalar", "belirli bir URL", "form gönderimi", "scroll derinliği". Bu kurallar tag'in ne zaman ateşleneceğini belirler. "All Pages — DOM Ready" tetikleyicisi olan bir tag, her sayfada DOM hazır olur olmaz çalışır; bu, kullanıcı ilk içerikle etkileşime girmeden önce main thread'i meşgul etmesi anlamına gelir.

Tetikleme zamanını değiştirmek — "Window Loaded" ya da özel bir event'e bağlamak — bazı tag'ler için anlamlı kazanım sağlayabilir. Bir ısı haritası aracı ya da yeniden hedefleme pikseli, sayfa tam yüklendikten sonra çalışmaya başlasa da işlevini yerine getirir. Fark yaratan tetikleme kurallarını belirlemek, container audit'inin en değerli adımlarından biridir.

Tetikleme kurallarının performans etkisi tag manager arayüzünde görünmez. Hangi tag'in hangi anda ne kadar main thread tuttuğunu anlamak için DevTools Performance panelinin açılması gerekir. Kayıt alınırken sayfanın yüklenmesi, her tetiklenme anını zaman çizelgesinde gösterir.

dataLayer push maliyeti

dataLayer, tag manager ile sayfa arasındaki veri köprüsüdür. Her e-ticaret olayı, her form etkileşimi, her sayfa görüntüleme dataLayer üzerinden iletilir. Bu mekanizma gereklidir ama kendi maliyeti vardır.

Her dataLayer.push() çağrısı, container'ın dinlediği event'i tetikler ve ilgili tag'lerin ateşlenmesine yol açar. Çok sayıda tag bu olayı dinliyorsa her push, birden fazla tag'i eş zamanlı çalıştırır. Kullanıcı scroll ettikçe, sayfalarda gezinirken her adımda dataLayer olayları tetikleniyorsa bu zincir birikimli bir yük üretir.

dataLayer kullanımını sadeleştirmek — yalnızca gerçekten ihtiyaç duyulan olayları push etmek, aynı olayı birden fazla kez tetikleyen kuralları temizlemek — bu maliyeti azaltır. Tag manager debug modunda her push'u ve tetiklenen tag'leri görmek, hangi zincirlerin beklenenden uzun sürdüğünü anlamayı kolaylaştırır.

Async yükleme gerçekte ne anlama gelir

Google Tag Manager varsayılan olarak async yüklenir. Bu, container script'inin sayfanın geri kalanını bloke etmediği anlamına gelir; render blocking sorun yaratmaz. Ancak async yükleme, tag'lerin maliyetini ortadan kaldırmaz — yalnızca bu maliyetin ne zaman ödeneceğini değiştirir.

Async yüklenen bir container, ilk boyamayı engellemez ama yüklendiği anda main thread üzerinde çalışmaya başlar. Eğer bu an, kullanıcının sayfayla etkileşime girdiği ana denk geliyorsa INP üzerinde olumsuz etki bırakır. "Async yüklüyorum, sorun yok" varsayımı, yük miktarı arttıkça geçerliliğini yitirir.

Container'ın async olması, içindeki her tag'in de async davrandığını garanti etmez. Bazı tag'ler kendi scriptlerini senkron yükler ya da başka scriptlerin yüklenmesini bekler. Bu durum, container snippet'inin async olduğunu görüp "sorun yok" diye geçmeyi yanıltıcı kılar.

Preview ve debug modu ile gerçek yükü görmek

Tag manager'ın yerleşik preview/debug modu, container'ın bir sayfada ne zaman neyin tetiklendiğini gösterir. Bu arayüzde her tag'in hangi tetikleyiciyle, hangi sırayla ateşlendiği izlenebilir. Beklenmedik tetiklemeleri — yanlış kuralla çalışan tag'leri, her sayfada tetiklenmemesi gereken olayları — bulmak için pratik bir başlangıç noktasıdır.

Ancak preview modu yalnızca tetiklenme zamanını ve kuralını gösterir; performans maliyetini ölçmez. Bir tag'in ne kadar JavaScript yüklediği, bu JavaScript'in ne kadar süre main thread'i tuttuğu burada görünmez. Bu bilgiye ulaşmak için DevTools'u paralel açmak gerekir: preview modunda sayfayı yüklerken Performance kaydı alındığında, her tag'in tetiklenme anında main thread'de ne olduğu açıkça görünür.

İki aracın birlikte kullanımı tamamlayıcıdır. Debug modu "hangi tag, hangi anda" sorusunu yanıtlar; DevTools "o anda ne kadar maliyet" sorusunu yanıtlar. Birinin cevabı diğerinin analizini yönlendirir.

Container audit: aktif, pasif ve ölü tag'ler

Container audit, tag'leri üç gruba ayırarak başlar. Aktif tag'ler düzenli olarak tetiklenen ve ürettiği veriye dayanarak karar alınan araçlardır. Pasif tag'ler teknik olarak çalışıyor ama son 90 günde verilerine bakılmamış, hiçbir kararda kullanılmamış olanlardır. Ölü tag'ler ise kampanyası bitmiş, entegrasyon değişmiş ya da tamamen unutulmuş olanlardır.

Pasif ve ölü tag'lerin birlikte container'ın otuzdan kırk yüzdesini oluşturduğu nadir değildir. Bu oranı azaltmak, tag sayısını düşürmenin en kolay ve en risksiz yoludur — mevcut herhangi bir scripti düzenlemek gerekmez, yalnızca kullanılmayanlar kaldırılır.

Audit için pratik bir yöntem: her tag'i sorumlu bir kişiye veya kampanyaya bağlamak. "Bu tag kim için eklendi, son ne zaman kontrol edildi?" sorusuna yanıt verilemeyen tag'ler muhtemelen kaldırılabilir demektir. Büyük ekiplerde bu sahiplik bilgisi tag'in açıklamasına yazılabilir; küçük ekiplerde sözlü bir hafıza bile bu soruyu yanıtlamak için yeterlidir.

Container'ı devre dışı bırakarak fark ölçme

Tag manager'ın gerçek performans maliyetini izole etmenin en doğrudan yöntemi, container'ı geçici olarak devre dışı bırakarak karşılaştırma testi yapmaktır. Tarayıcıda container snippet'ini engellemek için bir request blocker uzantısı kullanılabilir ya da test ortamında container kodu geçici olarak kaldırılabilir.

İki durumda alınan Lighthouse testlerinin karşılaştırılması, tag manager'ın net maliyetini LCP, TBT ve toplam JavaScript boyutu üzerinden sayısal olarak verir. Bu karşılaştırma olmadan "tag manager ne kadar yavaşlatıyor?" sorusunun cevabı tahmine dayanır; testle birlikte somut bir rakama dönüşür.

Aynı yöntemi bireysel tag'lere uygulamak da mümkündür: container'da tek bir tag'i duraklat, testi tekrarla, farkı ölç. En ağır tag'leri bu yöntemle tespit etmek optimizasyon önceliğini belirler ve hangi tag'in kaldırılmasının ya da geciktirilmesinin daha büyük etki yaratacağını sayısal olarak ortaya koyar.

GDPR ve benzeri yasal gereklilikler nedeniyle pek çok site tag manager ile birlikte bir consent management platform kullanır. Bu entegrasyon performans açısından ek bir katman ekler: kullanıcı tercihini bildirene kadar bazı tag'ler bekletilir, tercih iletildikten sonra bağlı tag'ler sırayla tetiklenir.

Bu tetiklenme zinciri sayfanın ilk yükleme anında değil kullanıcı etkileşiminden sonra gerçekleşir — ama bu gecikme her zaman avantaj değildir. Kullanıcı hemen kabul ederse, sayfa hâlâ yüklenirken tüm tag'ler aynı anda ateşlenir ve main thread üzerinde yoğun bir iş yükü oluşur.

Consent platformunun kendisi de bir script olarak çalışır ve kendi yükünü taşır. Container + consent platformu + her tag'in bağlandığı sağlayıcı bir arada değerlendirildiğinde toplam ağ maliyeti önemli bir boyuta ulaşabilir. Bu üçlü yapının bütünleşik olarak ölçülmesi gerekir; parça parça değerlendirme gerçek tablonun görülmesini engeller.

Server-side tagging alternatifi

Server-side tagging, tag'lerin tarayıcıdan değil sunucudan çalıştırılması yaklaşımıdır. Kullanıcının tarayıcısına yalnızca tek bir endpoint isteği gönderilir; bu istek sunucu tarafında ilgili analitik sağlayıcılara iletilir. Tarayıcıda çalışan JavaScript miktarı önemli ölçüde azalır.

Performans avantajı belirgindir: her sağlayıcıyla ayrı ayrı kurulan bağlantılar ortadan kalkar, third-party script yükü minimize edilir. Ancak beraberinde getirdiği maliyet de vardır: sunucu altyapısı kurulumu, bakım gerekliliği ve genellikle ek maliyet. Trafik hacmi düşük sitelerde bu maliyet karşılığını vermeyebilir.

Google Tag Manager'ın server-side modu bu yapının en yaygın uygulamasıdır. Mevcut container'ı tamamen değiştirmeden kademeli geçiş mümkündür: bazı tag'ler tarayıcı tarafında kalırken kritik ölçüm tag'leri sunucu tarafına taşınabilir. Bu yaklaşım, tam geçişin yatırımını üstlenemeyenler için orta yol sunar.

Geciktirme ve önceliklendirme

Her tag aynı önceliği taşımaz. Bazı tag'ler sayfanın ilk anından itibaren çalışmak zorundadır — consent yönetimi ve temel analitik bunların başında gelir. Diğerleri — ısı haritaları, davranışsal segmentasyon araçları, yeniden hedefleme pikselleri — sayfa tam yüklendikten sonra da aynı işlevi görür.

Bu ayrımı tetikleme kurallarıyla hayata geçirmek mümkündür. "Window Loaded" tetikleyicisi, sayfa tam yüklendikten sonra tag'i başlatır. Özel bir event tetikleyici, kullanıcı belirli bir eylem gerçekleştirene kadar tag'i bekletir. Bu önceliklendirme performance budget çerçevesiyle birleştirildiğinde hangi tag'in ne zaman çalışmasına izin verildiği sistematik bir kurala bağlanmış olur.

Geciktirme kararı veri kaybı riskini de beraberinde getirir. Geç yüklenen bir analitik script, kullanıcı erken ayrıldığında o oturumu kaydedemeyebilir. Bu trade-off her tag için ayrı değerlendirilmeli; hangi araç için kabul edilebilir, hangisi için değil kararı bilinçli biçimde verilmelidir.

Tag manager kalsın mı, gitsin mi

Bu soru teknik değil, operasyonel bir sorudur. Tag manager bir ekip yapısına ve iş akışına hizmet eder. Geliştirici erişimi olmadan script eklemek, kampanya tag'lerini yönetmek ve analitik araçları test etmek gerekiyorsa tag manager bu ihtiyacı karşılar.

Ama şu senaryo da gerçektir: küçük bir ekipte, geliştirici erişimi kolay olan bir sitede, her scriptin zaten kaynak kodunda yönetildiği bir yapıda tag manager ek değer üretmiyor olabilir. Bu durumda container kaldırılıp scriptler doğrudan sayfaya async veya defer ile eklenmek, hem gereksiz bir katmanı ortadan kaldırır hem de yönetim karmaşıklığını azaltır.

Her iki seçeneği değerlendirmek için tek kriter şudur: tag manager bu sitede gerçekten hangi ihtiyacı karşılıyor? Bu sorunun net bir cevabı yoksa araç büyük ihtimalle ihtiyaçtan değil alışkanlıktan kullanılıyordur.

Tag manager performansın düşmanı değildir. Ama fark edilmeden büyüyen, denetlenmeyen bir container, optimize ettiğiniz her şeyin önüne geçebilir. Container audit'i, tetikleme kurallarının gözden geçirilmesi ve düzenli karşılaştırma testi bu riski yönetilebilir kılar.

En basit kontrol sorusu şudur: container'daki her tag'i listeleyin ve her biri için "bu son 30 günde hangi kararı etkiledi?" diye sorun. Cevap verilemeyen tag'ler temizleme listesine girer. Bu süreç kod değişikliği gerektirmez; yalnızca bir kullanım alışkanlığı değişikliğidir.

Araç iyi yönetildiğinde değerini korur. Tag manager da bu kuralın dışında değildir.