İçeriğe geç
ceaksan
gtm

Server-Side GTM (sGTM) Kurulum Rehberi: Cloud Run, Stape ve Alternatifleri

Server-Side Google Tag Manager kurulumu, altyapı seçenekleri ve yapılandırma rehberi. Cloud Run, Stape ve Docker ile sGTM kurulumu, GA4 ve Google Ads tag yapılandırması, Meta CAPI entegrasyonu, Enhanced Conversions, Consent Mode v2 server-side yönetimi ve 1st-party cookie stratejisi adım adım ele alınıyor.

15 dk okuma Güncellendi:
TL;DR

Server-Side GTM (sGTM), etiket yönetimini tarayıcıdan sunucu tarafına taşıyarak veri kalitesini, gizliliği ve performansı artırabiliyor. Bu rehberde Cloud Run, Stape ve Docker ile kurulum, GA4/Google Ads/Meta CAPI tag yapılandırması, Enhanced Conversions, 1st-party cookie stratejisi, Consent Mode v2 server-side yönetimi ve debug süreçlerini ele aldım.

sGTM Neyi Çözer, Ne Zaman Gerekir?

Server-Side Google Tag Manager (sGTM), etiket yönetimini tarayıcıdan sunucu tarafına taşıyarak veri toplama sürecinin kontrolünü site sahibine veriyor. Safari’nin ITP (Intelligent Tracking Prevention) ve fingerprinting korumaları ile EEA trafiği için Consent Mode v2 gereksinimi, client-side tracking’in tek başına yeterliliğini zayıflattı. Bu değişimlerin detaylarını ve farklı tracking yaklaşımlarının karşılaştırmasını ilgili yazıda ele aldım. sGTM her site için gerekli değil; eşik tartışması aşağıda, “Taşınma Eşiği” başlığında.

Bu rehberde sGTM’nin nasıl kurulacağını, hangi altyapı seçeneklerinin mevcut olduğunu ve GA4, Google Ads, Meta CAPI (Conversions API) gibi platformlara yönelik tag yapılandırmasını ele alacağım.

Kullanıcı tarayıcısı
  -> Client-side GTM (web container)
    -> sGTM (server container)
      -> GA4, Google Ads, Meta CAPI, TikTok, Klaviyo...
not

Google, sGTM’de script serving’i Web Container client’ta topladı. Haziran 2025’ten sonra oluşturulan GA4 client’larında gtag.js yükleme seçenekleri yok; daha önce oluşturulan GA4 client’ları mevcut kurulumlar bozulmasın diye bu seçenekleri koruyor12. Kurulum adımları aşağıda, GA4 bölümünde.

İstek Akışı ve Mimari

sGTM’nin nerede çalışacağına karar vermeden önce, tek bir isteğin içinden nasıl geçtiğini anlamak gerekir. Model kağıt üzerinde sade, pratikte ince detaylarla dolu: client’lar priority sırasına göre değerlendirilir, isteği ilk claim eden client bir veya birden fazla event üretir, bu event’ler de web container’daki gibi trigger ve tag’lerden geçer3.

Tarayıcı / Uygulama / Backend
    |  (measurement request: GA4 /collect, MP, custom webhook)
    v
Tagging Server (Cloud Run, Stape, Docker)
    |  1. Client'lar priority sırasına göre çalışır, ilk eşleşen isteği claim eder
    |  2. Claim eden client, isteği event'lere dönüştürür
    |  3. Trigger'lar event'lere bakar, eşleşenler tag'leri ateşler
    |  4. Tag'ler payload'ı vendor'lara iletir (GA4, Ads, Meta CAPI, BigQuery)
    v
Vendor endpoint'leri

Bu diyagramın açığa çıkardığı üç şey:

  • Client’lar adapter’dır, endpoint değil. Bir client gelen HTTP isteğini (şekli fark etmez) okur ve GTM event’lerine çevirir. Custom client yazılarak Shopify webhook’ları, CRM (Customer Relationship Management) event’leri ya da native app SDK (Software Development Kit) payload’ları gibi standart dışı veri de işlenebilir.
  • Priority kritik. İki client aynı isteği claim edebiliyorsa, priority’si yüksek olan kazanır. Üst üste binen client’lar (stock GA4 + custom GA4 varyantı gibi) fark edilmesi zor yönlendirme hatalarına yol açabilir.
  • Bir istek birden fazla event üretebilir. GA4 batch payload’ı N tane event doğurur; her event trigger’lardan bağımsız geçer. Tag ateşlemesi event başına, istek başına değil.

Yeni bir server container’da yalnızca Google Analytics (GA4) client’ı hazır gelir; Measurement Protocol client’ı Clients > New ile ayrıca eklenir4. Client gelen isteği event’e çevirir, tag ise event’i vendor’a gönderir. Bu yüzden Meta CAPI veya TikTok Events API için yeni bir client değil, ilgili tag template’i gerekir; custom client yalnızca standart dışı bir istek formatını (webhook, CRM event’i) karşılamak için yazılır.

Altyapı Seçenekleri

sGTM bir Docker container olarak çalışır. Nerede çalıştığı, maliyet, bakım yükü ve 1st-party cookie yeteneklerini doğrudan etkiler.

Google Cloud Run (Varsayılan)

Google’ın önerdiği yol5.

Kurulum adımları:

  1. GTM’de yeni bir Server tipinde container oluştur
  2. Otomatik seçeneği ile GCP projeni bağla ve ödeme yöntemini seç
  3. Container oluşturulduğunda tagging server URL’si (Uniform Resource Locator) verilir
  4. Web container’daki Google tag’inde bu URL’yi server_container_url parametresi olarak gir4

Özellikler:

  • Otomatik ölçekleme (Google production için en az 2 instance öneriyor; her instance en fazla 1 vCPU, fazlası kullanılmıyor ve autoscaling’i olumsuz etkiliyor56)
  • Kullanıma göre faturalandırma (request + CPU/memory)
  • GCP ekosistemi ile entegrasyon (BigQuery, Logging)
  • Docker image: gcr.io/cloud-tagging-10302018/gtm-cloud-image:stable

Dikkat: Cloud Run faturaları trafik artışıyla birlikte öngörülemeyen şekilde yükselebilir. Maliyet izleme ve uyarı mekanizmaları kurulmalı.

Stape (Managed Hosting)

Altyapı kurmak istenmiyorsa Stape gibi managed hosting çözümleri kurulum ve bakım yükünü büyük ölçüde azaltıyor7.

Kurulum adımları:

  1. Stape hesabı oluştur
  2. sGTM container’ını bağla ve DNS (Domain Name System) yapılandırmasını yap
  3. Dakikalar içinde çalışmaya başlar

Özellikler:

  • Sabit aylık ücretlendirme; plan site başınadır ve istek kotasına script yüklemeleri (gtm.js, gtag.js) ile preview istekleri de sayılır8
  • Otomatik sGTM imaj güncellemeleri
  • Own CDN (Content Delivery Network): sGTM trafiğini sitenin kullandığı IP üzerinden geçirir; Stape’e göre bu sayede Safari’nin kısaltmadığı cookie’ler set edilebiliyor9
  • Log ve monitoring sistemi (anomali bildirimleri dahil)
  • Chrome extension ile debug kolaylığı

Docker Self-Hosted (Lokal Geliştirme ve Production)

Google, sGTM’yi resmi Docker image olarak yayınlar (gcr.io/cloud-tagging-10302018/gtm-cloud-image:stable) ve bu image Docker çalışan her yerde çalışır, localhost dahil. Client template’leri üzerinde denemeler yapmak, consent akışını test etmek veya production bug’ını tekrar üretmek için GCP’ye dokunmadan en hızlı yol budur.

Simo Ahava, Aralık 2025’te yayınladığı docker-compose stack’i ile tagging server ve preview server’ı lokalde ayağa kaldırıyor10:

# docker-compose.yml ve doldurulmuş .env dosyası ile
docker-compose up -d

# Tagging server:  https://localhost:8888
# Preview server:  https://localhost:8889

.env dosyasına iki değer gerekli:

  • CONTAINER_CONFIG, GTM Admin, Container Settings ekranından kopyalanır
  • GA4_PROPERTY, GA4 Measurement ID (örn. G-ABC123XYZ)
öneri

macOS’ta Docker Desktop belirli bir şirket büyüklüğünün üstünde ücretli lisans ister. Colima ücretsiz ve açık kaynak bir alternatif: Lima üzerine kurulu, standart Docker CLI’ını kullanır ve brew install colima docker docker-compose ile kurulur. Resmi sGTM imajı yalnızca linux/amd64 olarak yayımlandığı için Apple Silicon Mac’lerde emülasyon gerekir; Colima’da bu, macOS 13 ve üstünde colima start --vm-type=vz --vz-rosetta ile açılır.

Lokal Docker ne zaman işe yarar:

  • Custom client template’leri üzerinde deneme yaparken preview push’a gerek kalmadan
  • Public staging URL’ye erişemeyen servislerden gelen webhook’ları debug ederken
  • Production bug’ını bilinen çalışan bir container config’e karşı reprodüce ederken
  • Cloud Run ayağa kaldırmadan CI’da integration test çalıştırırken

Dikkat: Simo’ya göre server_container_url isteği göndermeden önce host’taki port’u siliyor, bu yüzden lokal stack’te (localhost:8888) kullanılamıyor. transport_url workaround’u event gönderimini kurtarıyor, ama tüm server-side özellikleri çalışmıyor10.

Production self-hosting (Hetzner, bare-metal, managed olmayan her ortam) için aynı image kullanılır; DNS, TLS, autoscaling, log retention ve sGTM versiyon upgrade’leri ekibin sorumluluğunda kalır. Minimum iki container: bir preview server, bir veya daha fazla tagging server6. Preview production’ın yedeği değildir; production yedekliliği için birden fazla tagging server gerekir.

Diğer Alternatifler

SeçenekUygunlukNot
AWS ECS/FargateEvetECS Express Mode servis, load balancer ve autoscaling’i otomatik kurar11. AWS’nin resmi rehberindeki API Gateway ve Kinesis katmanı analytics hattı içindir, temel hosting için gerekmez12
Azure Container AppsEvetResmi imaj Container Apps ve App Service üzerinde çalıştırılabilir; hazır kurulum betikleri mevcut13
Cloudflare WorkersHayırsGTM Docker/Node.js uygulaması, Workers V8 isolate ortamı uyumsuz. Proxy olarak kullanılabilir
Cloudflare ContainersBelgelenmemişlinux/amd64 imaj çalıştırabiliyor, ama instance’lar boşta durup farklı bir lokasyonda yeniden başlayabiliyor; sGTM için belgelenmiş bir kurulum yok14

Maliyet Modeli Karşılaştırması

Cloud RunStapeDocker Self-host
Maliyet modeliKullanıma göre (request+CPU)Sabit aylık paketSunucu maliyeti (kapasite ve trafik kotası içinde sabit)
ÖlçeklenmeOtomatik, trafikle artarPaket sınırına kadarManuel
Kurulum zorluğuOrtaDüşükYüksek
BakımOrtaDüşük (managed)Yüksek
1st-party cookieCustom domain + IP alignmentOwn CDN dahilManuel yapılandırma
sGTM güncellemeleriManuel redeployOtomatikManuel

Hosting seçenekleri arasında karar verirken bakım kapasitesi, veri egemenliği ve trafik öngörülebilirliği eksenlerine dayalı detaylı karşılaştırma, AWS ve Azure seçenekleri ve ajans multi-client kurulumu için sGTM Hosting Karar Matrisi yazısına bakabilirsin. sGTM’nin ajans marketing stack içindeki yerini (consent, analytics, attribution, governance katmanlarıyla birlikte) ele alan pillar: Ajanslar için Marketing Stack 2026.

Safari ITP 2.1’den (2019) bu yana JavaScript ile oluşturulan cookie’lerin ömrü 7 günle sınırlı. Server-set cookie’ler (Set-Cookie header) de iki durumda 7 güne indiriliyor. Birincisi IP kontrolü: yanıtı veren sunucunun IP’si sitenin IP’siyle aynı aileden değilse ya da ortak ön ekleri adresin yarısından kısaysa (IPv4’te 16, IPv6’da 64 bit)1516. İkincisi CNAME kontrolü: subdomain sitenin domain’inden farklı bir domain’e CNAME ile çözümleniyorsa17. Custom domain bu yüzden gerekli ama tek başına yetmez; ayrıntı aşağıda, “Safari ITP Tam Olarak Kaybolmaz” başlığında. Detaylı tarayıcı cookie davranışı tablosu için etkinlik verileri yazısına bakabilirsin.

DNS Yapılandırması

  1. sGTM için daha önce kullanılmamış bir subdomain (örn. ss.siteadi.com) ya da same-origin bir yol (örn. siteadi.com/metrics) seç. Google’ın custom domain rehberi iki yöntemi de anlatıyor18.
  2. DNS kaydı hosting’e göre değişir: Cloud Run’da load balancer veya domain mapping, Stape’te varsayılan olarak CNAME (istenirse A ve AAAA)19, self-host’ta sunucunun IP’sine A ve AAAA kaydı.
  3. Safari için iki koşul birlikte sağlanmalı: sGTM’nin yanıt verdiği IP yukarıdaki IP kontrolünden geçmeli, subdomain de üçüncü taraf bir domain’e CNAME ile çözümlenmemeli. Bunu sağlamanın yolları same-origin proxy, Stape Own CDN veya siteyle aynı altyapıda barındırma.
not

Stape’in varsayılan kurulumu CNAME kullanır ve Safari’nin CNAME kontrolüne takılır17. Own CDN ise trafiği sitenin IP’si üzerinden geçirerek IP ve CNAME koşullarını birlikte sağlamayı hedefler9.

SSL Sertifikası

DNS kayıtları yönlendirildikten sonra SSL sertifikası oluşturulmalı. Cloud Run otomatik sertifika sağlar. Stape’te bu süreç otomatiktir. Self-host senaryosunda Let’s Encrypt veya mevcut sertifika aktarılmalı.

Doğrulama

GTM Preview modunda custom domain’in çalıştığını doğrula. Preview sayfası sorunsuz açılıyorsa DNS ve SSL yapılandırması tamamdır.

Tag Yapılandırması

GA4

Google, script serving’i Web Container Client’ta topladı. Haziran 2025’ten sonra oluşturulan GA4 client’larında gtag.js yükleme seçenekleri yok; daha önce oluşturulanlar mevcut kurulumlar bozulmasın diye bu seçenekleri koruyor12. Web Container Client oluşturmak ve server_container_url ayarlamak, tarayıcının script’i nereden yüklediğini kendiliğinden değiştirmez; bunun için script adresi sGTM’ye çevrilmeli.

Kurulum:

  1. Sunucu container’ında Clients bölümünde GA4 client’ının aktif olduğunu kontrol et (varsayılan olarak yüklü gelir4)
  2. Web Container Client oluştur ve yükleme yoluna göre ID’leri allowlist’e ekle: gtag.js yolunda Google tag ID’leri (G-XXXXXX), GTM yolunda web container ID’si (GTM-XXXXXXX)
  3. Script’i sGTM üzerinden yükle. İki yol var: sitedeki gtag.js adresini sGTM domain’ine çevirmek (https://ss.siteadi.com/gtag/js?id=G-XXXXXX) ya da GTM web container’ını sGTM üzerinden yüklemek
  4. İkinci yolu seçtiysen “Automatically serve all dependent Google scripts” seçeneğini aktifleştir; web container’ın yüklediği Google script’leri de sGTM üzerinden gelir. Hit’lerin sGTM’ye gitmesi için web container’daki Google tag’lerine server_container_url parametresi de eklenmeli1
  5. Tags bölümünde GA4 tag’i oluştur
  6. Tetikleyici olarak Client Name = GA4 değerini ver

gtag.js ile doğrudan kurulumda script adresi sGTM’ye çevrilir, server_container_url parametresi de hit’lerin sGTM’ye gitmesini sağlar4:

<script async src="https://ss.siteadi.com/gtag/js?id=G-XXXXXX"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag() {
    dataLayer.push(arguments);
  }
  gtag("js", new Date());
  gtag("config", "G-XXXXXX", {
    server_container_url: "https://ss.siteadi.com",
  });
</script>

Remarketing

Sunucu container’ında Google Ads Remarketing tag’ini oluştur ve Ads panelindeki Conversion ID’yi gir. Tetikleyici: All Pages20.

Conversion Tracking

Dönüşüm tag’i için ilgili event’in (örn. purchase) sunucu container’ına iletilmesi gerekir. Client-side GTM’de bu event için bir GA4 Event tag’i oluştur, ardından sunucu container’ında Google Ads Conversion Tracking tag’ini yapılandır21.

Enhanced Conversions

Enhanced Conversions, dönüşüm anında toplanan müşteri verisini (e-posta, telefon, ad, adres) SHA-256 ile hash’leyerek Google’ın oturum açmış kullanıcı veritabanıyla eşleştiriyor. Bu eşleşme, cookie’nin eksik kaldığı ve cihaz değişen dönüşümlerin ölçümünü iyileştirebiliyor22.

Server-side kurulum:

  1. Google Ads’te ilgili dönüşümün ayarlarından Enhanced Conversions’ı aktifleştir
  2. Client-side GTM’de GA4 tag’ine user_data nesnesi ekle (e-posta, phone, name, address)
  3. Veri sGTM container’ına GA4 hit ile akar
  4. sGTM’deki Google Ads Conversion Tracking tag’i user_data’yı Event Data’dan okur, hash’ler ve dönüşüm ile birlikte gönderir
// Client-side dataLayer push örneği
dataLayer.push({
  event: "purchase",
  user_data: {
    email: "müşteri@ornek.com",
    phone_number: "+905001234567",
    address: {
      first_name: "Ali",
      last_name: "Yılmaz",
      country: "TR",
    },
  },
});

Tüm PII (Personally Identifiable Information) verileri hash’lenmeden önce normalize edilmeli: küçük harf, boşluk temizleme, telefon için E.164 formatı.

Meta Conversions API (CAPI)

sGTM üzerinden Meta CAPI entegrasyonu, sunucudan sunucuya dönüşüm verisi gönderiyor23.

Kurulum:

  1. Meta Events Manager’da Partner Integrations > Google Tag Manager > “Set up with Google” seçeneğini kullan
  2. GTM web ve server container’larını bağla
  3. Tagging server URL’sini ve GA4 Measurement ID’yi gir
  4. Meta otomatik olarak server-side tag’leri oluşturur
  5. Events Manager > Settings > Conversions API bölümünden access token oluştur

Alternatif olarak, GTM Community Template Gallery’den Facebook Conversions API şablonu kullanılabilir.

Event Deduplication (Kritik):

Browser Pixel ve server CAPI event’leri aynı event_id ve aynı event_name göndermelidir. Meta bu iki alanı kullanarak event’leri eşleştirir ve tekilleştirir. Deduplication doğru yapılandırılmazsa dönüşümler çift sayılır ve reklam optimizasyonu yanlış sinyalle beslenir24.

Event Match Quality (EMQ):

Meta’nın 0-10 ölçeğindeki eşleştirme kalitesi skorudur. TAGGRS’e göre minimum 6, ideal 8+ hedeflenmeli. Optimize etmek için: hash’lenmiş e-posta, telefon, IP adresi, user agent, fbp cookie, fbc cookie ve external_id gönderilmeli25.

Scout ile Çoklu Platform Dağıtımı

sGTM tek başına GA4, Google Ads ve Meta CAPI için yeterli olsa da, e-ticaret sitelerinde TikTok, Pinterest, Klaviyo gibi birden fazla platforma veri dağıtmak gerektiğinde yönetim karmaşıklaşabiliyor. Bu noktada dnomia bünyesinde geliştirdiğim Scout, sGTM veya Zaraz’dan toplanan event’leri alıp batch olarak işliyor, profil verileriyle zenginleştiriyor ve birden fazla hedefe tek noktadan dağıtıyor.

sGTM Container
  -> Scout Collector (batch işleme, zenginleştirme, tekilleştirme)
    -> Meta CAPI, GA4 MP, Google Ads, Klaviyo, TikTok, Pinterest...

Bu yaklaşım özellikle çoklu reklam platformu kullanan e-ticaret siteleri için tek tek sGTM tag’i oluşturmak yerine merkezi bir dağıtım katmanı sağlıyor.

Google, Mart 2024’ten beri EEA’daki kullanıcılar için ölçüm, reklam kişiselleştirme ve remarketing özelliklerinde Consent Mode v2 sinyallerini bekliyor26. sGTM’de consent sinyalleri Google hit’leriyle birlikte taşınıyor27.

Nasıl çalışıyor:

  1. Client-side CMP (Cookiebot, Usercentrics vb.) sayfa yüklendiğinde gtag('consent', 'default', {...}) ile tüm sinyalleri denied olarak set eder
  2. Kullanıcı consent banner’ı ile etkileşir
  3. CMP gtag('consent', 'update', {...}) ile kullanıcının tercihlerini gönderir
  4. Event’ler tetiklendiğinde consent durumu gcs ve gcd parametreleri olarak request payload’ına eklenir: gcs ad_storage ve analytics_storage durumunu, gcd dört sinyalin tamamını ve sinyalin nasıl oluştuğunu taşır28
  5. sGTM bu sinyalleri otomatik olarak alır

Dört consent sinyali:

SinyalKontrol ettiği alan
ad_storageReklam cookie’leri (Google Ads, Floodlight)
analytics_storageAnalitik cookie’leri (GA4)
ad_user_dataKullanıcı verisinin Google’a reklam amaçlı gönderilmesi
ad_personalizationKişiselleştirilmiş reklamcılık

sGTM’deki Google GA4 ve Google Ads tag’leri consent sinyallerini native olarak anlar. Consent reddedildiğinde Google davranışsal modelleme ile kayıp verinin bir kısmını tahmin edebiliyor; ama bu her property’de devreye giren bir garanti değil.

Debug ve Hata Ayıklama

Preview Modu

sGTM debug süreci, Seresa’nın “Two-Tab Dance” adını verdiği bir akış izler29:

  1. Server-side GTM container’ında Preview’a tıkla (debug sekmesi açılır)
  2. Client-side GTM container’ında da Preview’ı aktifleştir
  3. Web siteni üçüncü bir sekmede açıp işlemleri gerçekleştir
  4. Server-side preview sekmesinde gelen istekleri kontrol et

Yaygın sorunlar:

  • Preview cookie’leri engelleniyor: Tarayıcı eklentileri, VPN veya gizlilik ayarları preview cookie’lerini engelleyebilir
  • “No Client Claimed the Request”: Hiçbir client şablonu gelen istek formatını eşleştiremiyor. Client yapılandırması kontrol edilmeli
  • Load balancer timeout: Google’a göre load balancer veya CDN timeout’u 20 saniyeden uzun olmalı; daha kısa bir timeout preview modunu bozar6
  • Yayına alınmamış değişiklikler: Server container Preview dışında yalnızca yayınlanmış sürümü çalıştırır; yayınlanmamış bir tag değişikliği gerçek trafikte hiç devreye girmez

X-Gtm-Server-Preview ile Web Dışı İstekleri Debug Etme

Preview modu yalnızca tarayıcının doğru cookie’lerle gönderdiği istekleri yakalar. Cookie kuramayan her şey için, Shopify, Paddle veya CRM webhook’ları, native mobil uygulama event’leri, server-to-server Measurement Protocol çağrıları, X-Gtm-Server-Preview HTTP header’ı köprü görevi görür30.

Header değeri nasıl alınır:

  1. sGTM Preview modunu aç
  2. Sağ üstteki menü, Send requests manually
  3. X-Gtm-Server-Preview değerini kopyala (base64 kodlu token, env-XXX|...|... biçiminde)

curl ile kullanım (webhook payload’ı debug etmek için tipik):

curl -X POST https://ss.ornekdomain.com/mp/collect \
  -H "X-Gtm-Server-Preview: ZW52LTI1NXx2RVNkYnBiSFdzTVRTZXB..." \
  -H "Content-Type: application/json" \
  -d '{"client_id":"test.1","events":[{"name":"purchase","params":{"value":49.9,"currency":"USD"}}]}'

Backend fetch çağrısından (Node, integration test):

await fetch(`${SGTM_URL}/events`, {
  method: "POST",
  headers: {
    "X-Gtm-Server-Preview": process.env.SGTM_PREVIEW_HEADER,
    "Content-Type": "application/json",
  },
  body: JSON.stringify(payload),
});

Dikkat edilmesi gerekenler:

  • Token oturum ölçeklidir. Preview kapandığında, workspace değiştiğinde, cookie temizlendiğinde veya Preview başka tarayıcıda açıldığında yeniden üretilir.
  • Kaynak koda commit etme, production client’lara gömme. Bu yalnızca geliştirme zamanı debug aracıdır.
  • Takım halinde paylaşılan debug oturumlarında, başka biri Preview açtığında token’ı yeniden kopyalamak gerekebilir.
  • Mobil uygulamalarda header’ı yalnızca debug build’lerine enjekte et. Preview etkin binary’nin production’a çıkması, gerçek trafiği debug sekmene gönderir.

Bu header, sGTM’yi uçtan uca debug edilebilir kılan parçadır: yalnızca tarayıcı değil, tagging server’a veri besleyen her sistem dahil.

Debug Araçları

  • Chrome Extension: “sGTM - add X-Gtm-Server-Preview Header” ile X-Gtm-Server-Preview header’ı ve _dbg=1 parametresi otomatik eklenir
  • Stape Debugger: Teknik olmayan kullanıcılar için kullanıcı dostu debug arayüzü
  • GTM Preview + console: Client ve server container’ları aynı anda preview edilerek uçtan uca veri akışı doğrulanabilir

sGTM’nin Sınırları: Gerçeklik Kontrolü

sGTM’yi “her şeyi çözen tek altyapı” olarak pazarlayan içerik çok. Bietolini’nin 2026 tarihli karşılaştırma analizinin öne çıkardığı üç pratik gerçek, karmaşıklık ve aylık faturayı üstlenmeden önce görülmesi gereken ayrımları netleştiriyor16.

Adblocker Bypass Tek Başına Çalışmıyor

Sunucu tarafı konteyner trafiği custom subdomain üzerinden aksa da, adblocker listeleri subdomain kalıplarını, payload yapısını ve davranışsal sinyalleri yakalıyor. DataUnlocker’ın kendi ürün verisine dayanan 2025 analizine göre yaygın adblocker yazılımının yaklaşık yüzde 80’i custom domain’li sGTM trafiğini hâlâ tespit edip engelleyebiliyor31. Asıl kazanç CAPI katmanında: Meta Conversions API, Google Ads Conversion API gibi sunucudan sunucuya entegrasyonlar blocker listelerinden bağımsız çalışıyor. Yorumum, conversion recovery için raporlanan rakamların da büyük ölçüde bu katmandan geldiği, sGTM’nin subdomain’e taşınmasından değil.

Performans İddiaları Bağlama Bağlı

Stape’in kendi sitesinde yaptığı benchmark mobil PageSpeed skorunda 56 vs 95, 39 puanlık fark gösteriyor32. Bu best case: GA4, Facebook Pixel, HubSpot, Klaviyo gibi ağır client-side tag’lerin tamamı sunucu tarafına taşındığında. Semetis’in WebPageTest ve PageSpeed Insights ile yaptığı kontrollü ölçümler sonucunu “anlamlı ama kesin değil” olarak yorumluyor: kazanç hangi tag’lerin ve kaç tanesinin taşındığına bağlı33. Yalnızca GA4 kullanan bir sitede taşınan tek tag GA4 olacağı için farkın küçük kalmasını beklemek gerekir.

Safari ITP Tam Olarak Kaybolmaz

Custom domain kurmak yetmiyor. Server-set cookie’ler de sGTM’nin yanıt verdiği IP, yukarıda Custom Domain bölümünde anlatılan IP kontrolünden geçmezse 7 güne iniyor15. Default bir Cloud Run kurulumu kendi IP aralığıyla geliyor ve Safari’de cookie’ler yine 7 güne düşüyor. Bietolini’ye göre doğru IP alignment ile bu süre 400 güne çıkıyor; bu adım atlanırsa sGTM’nin Safari üzerindeki temel satış argümanı gerçekleşmiyor1634. Bietolini’nin önerisi: GA4’teki Safari trafiği yüzde 15’in altındaysa bu kazanım tek başına yatırım gerekçesi olmuyor.

Taşınma Eşiği

Üç kısıtı birleştirince Bietolini’nin önerdiği pratik eşik ortaya çıkıyor: sGTM karmaşıklığı ve maliyeti aylık 5.000 dolar üzeri paid media harcayan, conversion sinyal kaybının gerçek bir bütçe kalemi olduğu siteler için anlamlı. Bu eşiğin altında, client-side GTM korunup server-side yalnızca conversion API’leri (Meta CAPI, Google Ads Enhanced Conversions, TikTok Events API) için kullanılan hibrit model çoğu durumda yeterli oluyor16. Yalnızca Google script’lerini first-party serve etmek isteniyorsa Google tag gateway, yönetilecek sunucu gerektirmeyen bir alternatif35.

Veri Egemenliği: Hosting Bölgesi Tek Başına Yetmiyor

“Avrupalı sağlayıcı kullandığımız için ABD yasalarından etkilenmiyoruz” cümlesi satın alma süreçlerinde sıkça duyuluyor. Sunucunun AB’de olması, altyapıyı işleten şirketin hangi yargıya tabi olduğunu ve verinin hangi alt işleyicilerden geçtiğini tek başına belirlemiyor. Hosting bölgesi, sağlayıcı ve alt işleyici zinciri birlikte değerlendirilmeli; hukuki erişim riski de sözleşmedeki tüzel kişi, yargı yetkisi ve alt işleyici zinciri üzerinden ayrıca ele alınmalı.

Sunucuyu belirli bir ülkede barındırmak, Google ve Meta gibi hedeflere yapılan veri aktarımını da ortadan kaldırmaz; sGTM’nin işi zaten veriyi bu platformlara iletmek. KVKK açısından sunucu AB’de olduğunda da veri Türkiye’den yurt dışına aktarılmış olur; hosting seçiminin bu yönü karar matrisinde ayrıca ele alınıyor.

Satın Alma Süreci İçin Üç Soru

Bir sGTM sağlayıcısı değerlendirilirken KVKK ve GDPR data processing agreement’larının ötesinde şu üç soru sorulmalı:

  1. Altyapıyı işleten yasal varlığın sahibi kim? Şirket merkezi değil, hisse sahipliği ve ultimate beneficial owner.
  2. Hosting sağlayıcısı hangi yargılarda disclosure order zorunluluğu altında?
  3. ABD sahipli olmayan deployment seçeneği var mı, varsa doğrulanabilir mi?

Schrems II kararı sonrası transfer impact assessment için sağlayıcı zincirinin tamamını sorgulamak gerekiyor. Sadece sunucu ülkesini değil.

Sonuç

sGTM 2026’da pek çok ölçüm kurulumunun parçası haline geldi. Client-side tracking’in tarayıcı kısıtlamaları nedeniyle zayıfladığı yeni dönemde, server-side yaklaşım veri kalitesi, gizlilik kontrolü ve platform entegrasyonları açısından güçlü bir seçenek. Ancak karar vermeden önce eşiği doğru kurmak gerekiyor: Bietolini’nin eşiğine göre aylık 5.000 doların altında paid media harcayan ve Safari trafiği yüzde 15’in altında kalan siteler için sGTM’nin getirdiği bakım yükü çoğu zaman hibrit bir CAPI kurulumundan daha pahalıya geliyor.

Altyapı seçimi bağlama bağlı:

  • Tam kontrol ve GCP deneyimi varsa: Cloud Run
  • Hızlı kurulum ve öngörülebilir maliyet: Stape
  • Kendi sunucu altyapısı: Docker self-host
  • Sunucunun bulunduğu ülke sözleşmede tanımlıysa: O ülkede self-host (sağlayıcı, alt işleyici zinciri ve destination aktarımı ayrıca değerlendirilir)

Hangi yol seçilirse seçilsin, custom domain ile IP alignment (1st-party cookie ve Safari için), Consent Mode v2 entegrasyonu, event deduplication (özellikle Meta CAPI) ve sağlayıcı zincirinin sorgulanması atlamanın çok pahalı olduğu dört kritik adım.

Footnotes

  1. How To Load Google Scripts From A Server Container. Simo Ahava 2 3
  2. How sGTM loads Google JavaScript libraries 2
  3. An Introduction to Server-Side Tagging. Google for Developers
  4. Send data to server-side Tag Manager. Google Tag Manager 2 3 4
  5. Cloud Run Setup Guide. Google Tag Manager 2
  6. Manual Setup Guide. Google Tag Manager 2 3
  7. Stape sGTM Hosting Documentation
  8. Pricing and plans. Stape
  9. Own CDN. Stape 2
  10. Run Server-side Google Tag Manager On Localhost. Simo Ahava 2
  11. Amazon ECS Express Mode. AWS Documentation
  12. Using Google Tag Manager for Server-Side Analytics on AWS
  13. sGTM Deployment on Azure Container Apps. Selnekovic
  14. Lifecycle of a Container. Cloudflare Containers Docs
  15. Private Browsing 2.0. WebKit 2
  16. Server-side vs Client-side GTM: 2026 Reality Check. Paolo Bietolini 2 3 4
  17. Tracking Prevention in WebKit. WebKit 2
  18. Custom domain configuration. Google Tag Manager
  19. Custom domain setup. Stape
  20. Google Ads Remarketing. Google Tag Manager
  21. Google Ads Conversions. Google Tag Manager
  22. About Enhanced Conversions. Google Ads Help
  23. Meta CAPI with Server-Side GTM
  24. Event Deduplication for Meta Conversions
  25. Event Match Quality Score
  26. Updates to consent mode for traffic in European Economic Area (EEA). Google Ads Help
  27. Implement Consent Mode with Server-Side Tag Manager
  28. Consent Mode V2 For Google Tags. Simo Ahava
  29. The Two-Tab Debugging Dance
  30. Preview Requests In Server-side Google Tag Manager. Simo Ahava
  31. Stop Thinking Server-Side GTM Protects You From Ad Blockers. DataUnlocker
  32. Improving Website Page Speed With Server-Side Tracking. Stape
  33. Does Server-Side Tagging Positively Impact Page Speed? Semetis
  34. Safari ITP and Server-Side Tagging. Stape
  35. Google Tag Gateway vs Server-Side GTM: Which One Do You Need? Paolo Bietolini
Önemli Noktalar
  • 01 Google, script serving'i Web Container client'ta topladı: Haziran 2025'ten sonra oluşturulan GA4 client'larında gtag.js yükleme seçenekleri yok; eski GA4 client'ları mevcut kurulumlar bozulmasın diye bu seçenekleri koruyor
  • 02 Stape gibi managed hosting çözümleri Cloud Run'a göre kurulum ve bakım yükünü önemli ölçüde azaltıyor
  • 03 Meta CAPI entegrasyonunda event deduplication (event_id + event_name) doğru yapılandırılmazsa dönüşümler çift sayılır
  • 04 Enhanced Conversions ile hash'lenmiş müşteri verisi (e-posta, telefon) server-side gönderilerek eşleşme oranı ve cihaz değişen dönüşümlerin ölçümü iyileştirilebiliyor
  • 05 Custom domain tek başına Safari ITP'yi aşmıyor: server-set cookie'lerin 7 gün sınırının dışında kalması için sGTM'nin yanıt verdiği IP'nin sitenin IP'siyle hizalanması (IP alignment) ve CNAME'in üçüncü taraf bir domain'e çözümlenmemesi gerekiyor
  • 06 Consent Mode v2 sinyalleri Google hit'lerinde gcs ve gcd parametreleriyle taşınıyor; server-side tag'ler consent durumuna göre tetiklenebiliyor
  • 07 sGTM adblocker'ı tek başına bypass etmez: DataUnlocker'ın kendi ürün verisine dayanan analizine göre yaygın adblocker yazılımının yaklaşık %80'i custom domain'li sGTM trafiğini hâlâ tespit ediyor. Gerçek kazanç Meta ve Google'ın sunucudan sunucuya Conversion API katmanında yatıyor
  • 08 Hosting bölgesi tek başına veri egemenliği sağlamıyor: bölge, sağlayıcı ve alt işleyici zinciri birlikte değerlendirilmeli. Sunucuyu belirli bir ülkede barındırmak, Google ve Meta gibi hedeflere yapılan veri aktarımını ortadan kaldırmıyor
Sık Sorulan Sorular (FAQ)
+ sGTM ücretsiz mi?

sGTM yazılımı ücretsiz, ancak çalıştırmak için altyapı gerekiyor. Google Cloud Run kullanıma göre faturalandırır. Stape gibi managed hosting çözümleri sabit aylık ücretlendirme sunar.

+ Cloud Run mu Stape mi tercih etmeliyim?

Cloud Run tam kontrol ve GCP ekosistem entegrasyonu sunar; automatic provisioning ile ilk kurulum birkaç adımda biter, ama custom domain, ölçekleme ve güncelleme ekipte kalır. Stape kurulumu dakikalar içinde tamamlanır, otomatik güncelleme ve Own CDN özelliği ile 1st-party cookie yönetimini kolaylaştırır. Teknik ekip kapasitesi ve öngörülebilir maliyet ihtiyacı belirleyici.

+ sGTM ile Zaraz arasındaki fark nedir?

sGTM, GTM container'ını sunucu tarafında çalıştırır; tam veri kontrolü, CAPI entegrasyonları ve karmaşık trigger mantığı sunar. Zaraz, Cloudflare edge'inde çalışır; sıfır JS yükü ve kolay kurulum avantajı var ama entegrasyon çeşitliliği ve trigger esnekliği sınırlı.

+ Custom domain zorunlu mu?

Teknik olarak zorunlu değil ama Safari için güçlü biçimde önerilir. Safari, cookie'yi set eden yanıt üçüncü taraf bir IP'den geliyorsa ya da subdomain üçüncü taraf bir domain'e CNAME ile çözümleniyorsa server-set cookie'leri de 7 güne indiriyor. Yani custom domain gerekli ama tek başına yetmez; same-origin proxy veya Stape Own CDN gibi bir IP alignment yöntemi de gerekir.

+ Meta CAPI sGTM olmadan kurulabilir mi?

Evet, Meta'nın kendi CAPI Gateway çözümü veya doğrudan API entegrasyonu ile kurulabilir. Ancak sGTM, tek bir container üzerinden birden fazla platforma (Meta, Google, TikTok) veri dağıtımı sağlayarak yönetim yükünü azaltır.

+ sGTM kurulumu ne kadar sürer?

Stape ile temel kurulum yaklaşık 30 dakikada tamamlanabilir. Cloud Run ile GCP deneyimine bağlı olarak birkaç saat. Custom domain, CAPI entegrasyonları ve Consent Mode yapılandırması dahil tam kurulum 1-2 gün sürebilir.

+ sGTM adblocker'ı bypass eder mi?

Tek başına hayır. DataUnlocker'ın kendi ürün verisine dayanan 2025 analizine göre yaygın adblocker yazılımının yaklaşık yüzde 80'i custom domain'li sGTM trafiğini bile tespit edip engelleyebiliyor. Adblocker'lar artık request kalıplarını, payload yapısını ve davranışsal sinyalleri inceliyor. Gerçek kazanım Meta Conversions API ve Google Ads Conversion API gibi sunucudan sunucuya entegrasyonlarda.

+ EU merkezli sGTM sağlayıcısı KVKK ve GDPR için yeterli mi?

Tek başına yeterli değil. Hosting bölgesi, sağlayıcı ve alt işleyici zinciri birlikte değerlendirilmeli; sağlayıcının kayıt ülkesi ya da sunucunun bulunduğu bölge bu değerlendirmenin yalnızca bir parçası. Sunucuyu belirli bir ülkede barındırmak, sGTM'nin veriyi Google ve Meta gibi hedeflere aktarmasını da ortadan kaldırmaz. KVKK açısından sunucu AB'de olduğunda da veri Türkiye'den yurt dışına aktarılmış olur.

+ sGTM her site için gerekli mi?

Hayır. Bietolini'nin önerdiği pratik eşik aylık 5.000 dolar üzeri paid media harcayan, conversion sinyal kaybının gerçek bir bütçe kalemi olduğu siteler. Safari trafiği yüzde 15'in altındaysa IP alignment yatırımı tek başına yeterli gerekçe değil. Bu eşiğin altında client-side GTM korunup server-side yalnızca conversion API'leri için kullanılan hibrit model çoğu durumda yeterli.

Geri bildirim

Seçtiğin paragraflar hakkında görüşünü ilet. Yanıt verebilmek için e-posta gerekli.

Tür