Bir e-ticaret müşterisinde hız şikayeti vardı. Lighthouse performans skoru 38’e inmişti. Kod incelemesinde bulduğum şaşırttı: temam tarafında ciddi sorun yoktu, ama 14 farklı üçüncü taraf script yüklüyorduk. GA, GTM, Facebook Pixel, Google Ads, Hotjar, Intercom, chat widget, review widget, stock plugin, recommendation engine. Her biri “ben hızlıyım” diye eklenmişti. Toplamda sayfa 38 MB JS indirip çalıştırıyordu.
Üçüncü taraf script’lerin performans etkisi genelde küçümseniyor. İki sebep var.
Bir: sağlayıcı dokümanı “sayfaya 2ms ekleriz” yazar. Bu ağırlıklı ağ koşullarında, boşta bir CPU’da, uncontested render’da ölçülmüş teorik sayıdır. Gerçek dünyada mobil cihazda, yavaş 4G’de, 15 script paralel indirilirken performans 2ms değil 300ms ekliyor.
İki: GTM tarihi gözünüze küçük geliyor. “Tek GTM script, sonrası async” deniyor. GTM aslında yükleyici. Asıl yük onun çağırdığı n sayıda sub-script. İçinde ne var göremiyorsunuz.
Ölçmek için kullandığım yöntem:
- Chrome DevTools Performance tab’ında Long Tasks’ı filtrele.
- Third-party origin’lerden gelen script’leri ayır.
- Main thread’i kim bloke ediyor gör.
- WebPageTest’te script’leri birer birer disable edip ölçüm yap.
Müşterinin sitesinde en kötü üç suçlu:
- Chat widget: 1.2MB JS, her sayfada iframe açıyor, ayrı CSS yüklüyor.
- Recommendation engine: sayfada 6 API isteği yapıyor, her biri 400-800ms.
- Stock plugin: A/B test yapıyor, bunun için DOM’u yeniden yazıyor, layout shift üretiyor.
Çözüm planı şu oldu:
1. Gerekli mi sorusu
Her script için “bu olmazsa ne kaybederiz” sorduk. Chat widget: sorun yok ama iletişim maili var. Intercom: kaldırıldı, mail’e yönlendirdik. Review widget: ayda 4 inceleme geliyordu, maliyeti buna değmiyordu, kaldırıldı. Recommendation engine: convert oranına katkı yüzde 0.3, kaldırıldı.
Google Ads pixel, Facebook pixel, GA kaldı.
2. GTM’yi akıllı yükleme
GTM’yi doğrudan head’e koymak yerine, ilk kullanıcı etkileşiminde (scroll, click, touchstart) yükleyen bir wrapper yazdık. Bot’lar zaten erişir, kullanıcının performans algısı bozulmaz. Analytics verisinde ufak kayıp oldu (bounce rate altındaki kullanıcılar sayılmadı ama zaten convert etmiyordu).
3. Consent-based yükleme
GDPR/KVKK cookie consent’i bekleyen script’leri, kullanıcı kabul etmezse hiç yüklemedik. Yasal zorunluluk zaten, performans bonus.
4. Resource hints
Kalacak olan script’lere ekledik. GA ve Facebook’a bağlantı erken açıldı.
5. Fetchpriority ve defer
Late-stage script’lere fetchpriority="low" verdik. Kritik olmayanlar CPU’yu önce vermiyor.
6. İzleme
Real User Monitoring ekledik. Sentry üzerinden LCP, INP metrikleri takip ediliyor. Üçüncü taraf bir sürüm yayınladığında metrikler bozulursa anında haberdar oluyoruz.
Sonuç: Lighthouse skoru 38’den 72’ye çıktı, mobilde LCP 5.2’den 2.4’e düştü. İleri optimizasyonlarla (theme tarafı) 85’e ulaştık.
Bir özel uyarı, Consent Mode v2 ile Google Ads pixel “consent yoksa da veri topla, sadece kimliksizleştir” diyor. Performans açısından yine script yüklüyor, tasarruf edemezsiniz. Consent olmayan kullanıcıdan pixel’i tamamen koparmak istiyorsanız manuel kodlamak zorundasınız.
Üçüncü taraf script’ler çoğu sitenin en büyük performans borcudur. Yarısı kaldırılsa hiçbir metrik bozulmaz.