Skip to content

Analytics Ve Script'ler

Bu belge, sitenin izleme ve harici script katmanını anlatır: ziyaretçi sayımı, ısı haritası, reklam pikseli ve chat widget gibi araçlar.

Tüm script’ler tek dosyada tanımlanır (src/config/analytics.ts) ve tek yerden yüklenir (BaseLayout.astro). Sayfa dosyalarına (index.astro, blog vb.) analytics kodu yazılmaz.


AraçNe ölçer / yapar
Google Tag Manager (GTM)Bir konteynerden birden fazla etiketi yönetir (GA4, Ads, vb.)
Google Analytics 4 (GA4)Sayfa görüntüleme, trafik kaynağı, dönüşümler
Microsoft ClarityOturum kaydı, tıklama haritası, scroll davranışı
Meta PixelFacebook/Instagram reklam dönüşümleri
customScriptsHotjar, Crisp, özel embed — standart alanlara sığmayan script’ler

Neden merkezi?

  • Her sayfada aynı kodu tekrarlamazsınız.
  • Açıp kapatmak tek satır (enabled, boş ID).
  • Canlıya geçmeden önce dev ortamında script görmek isteyip istememeyi seçersiniz.

DosyaGörev
src/config/analytics.tsID’ler, aç/kapa, özel script listesi
src/layouts/BaseLayout.astroKoşullu snippet’leri <head> ve <body>’ye yerleştirir

Başka dosyaya dokunmanız gerekmez. Header, Footer, blog şablonları analytics’ten habersiz kalır.


export const analytics = {
enabled: true,
loadInDev: true,
googleTagManager: 'GTM-XXXXXXX',
googleAnalytics4: 'G-XXXXXXXXXX',
microsoftClarity: '',
metaPixel: '',
customScripts: [],
} as const;
  • true → (diğer koşullar sağlanıyorsa) script’ler yüklenir.
  • falsehiçbir izleme ve hiçbir customScripts render edilmez.

Staging veya yerel test için en hızlı kapatma yolu.

  • truenpm run dev sırasında da script’ler HTML’e girer (demo / test).
  • false → script’ler yalnızca production build’de gelir (import.meta.env.PROD).

Canlıya yakın ayar: loadInDev: false — geliştirme sırasında gereksiz istek ve konsol uyarıları olmaz.

AlanÖrnek değerBoş ('') olunca
googleTagManagerGTM-ABC123GTM yüklenmez
googleAnalytics4G-ABC123Doğrudan gtag yüklenmez *
microsoftClarityabcdefghijClarity yüklenmez
metaPixel1234567890Meta Pixel yüklenmez

* GTM doluysa GA4 doğrudan snippet atlanır. Aynı ziyaretçi iki kez sayılmasın diye. GA4’ü GTM konteyner’ından ekleyin; googleAnalytics4 alanını boş bırakın veya yalnızca GTM kullanmayacaksanız doldurun.


Script’ler yalnızca BaseLayout üzerinden tüm public sayfalara uygulanır.

<head> içinde (özet sıra):

  1. Tema script’i (flash önleme — analytics değil)
  2. SEO meta (title, canonical, Open Graph)
  3. GTM / GA4 / Clarity / Meta Pixel (koşullu)
  4. customScriptsposition: 'head'
  5. OrganizationSchema

<body> içinde:

  • Açılışta: GTM <noscript> iframe, Meta Pixel <noscript> img
  • İçerik: Header → main → Footer
  • Kapanıştan önce: customScriptsposition: 'body-end'
  • En sonda: motion (initMotion)

Sayfa bazlı analytics yok — blog yazısı da ana sayfa da aynı kabuğu kullanır.


  1. tagmanager.google.com → konteyner oluşturun.
  2. analytics.tsgoogleTagManager: 'GTM-XXXXXXX' (gerçek ID).
  3. googleAnalytics4'' bırakın (GTM’den GA4 etiketi ekleyin).
  4. Deploy sonrası View Source’da googletagmanager.com/gtm.js arayın.
  1. Google Analytics → Veri akışı → Ölçüm kimliği G-...
  2. googleTagManager: ''
  3. googleAnalytics4: 'G-...'

İkisini birden doldurmayın (GTM + doğrudan GA4).

  1. clarity.microsoft.com → proje → Project ID.
  2. microsoftClarity: 'proje-id'
  1. Meta Events Manager → Pixel ID.
  2. metaPixel: '1234567890'

Standart dört alana sığmayan harici script’ler için:

customScripts: [
{
id: 'hotjar',
position: 'head',
src: 'https://static.hotjar.com/c/hotjar-XXXX.js',
},
{
id: 'crisp',
position: 'body-end',
content: '<script>/* resmi Crisp snippet */</script>',
},
],
AlanAçıklama
idBenzersiz isim (debug / data-analytics-custom attribute)
position'head' veya 'body-end'
srcHarici JS URL — <script src="..." defer>
contentHam HTML (genelde platformun verdiği snippet)

src veya content — biri yeterli. İkisi de doluysa src önceliklidir (layout mantığı).

Güvenlik: content yalnızca güvendiğiniz platform snippet’leri için. Config dosyasına rastgele HTML koymak XSS riski taşır.

enabled: false iken customScripts de yüklenmez.


İstediğinNe yap
Tüm izlemeyi kapatenabled: false
Sadece canlıda çalışsınloadInDev: false + production deploy
Sadece GTMgoogleTagManager dolu, googleAnalytics4: ''
Sadece GA4googleTagManager: '', googleAnalytics4 dolu
Clarity eklemicrosoftClarity dolu
Hotjar eklecustomScripts + position: 'head'
Bir aracı geçici kapatİlgili ID’yi '' yap (dosyayı silmeyin)

Geliştirme (loadInDev: true):

  1. npm run dev
  2. Herhangi bir sayfa → sağ tık → Sayfa kaynağını görüntüle
  3. GTM- veya gtag / clarity.ms arayın

Production:

  1. npm run build && deploy
  2. Canlı URL’de aynı kontrol
  3. GTM/GA4 panelinde gerçek zamanlı ziyaretçi (ID doğruysa)

Test:

  • googleTagManager: '' → GTM satırları kaybolmalı
  • enabled: false → üçüncü parti script kalmamalı

Placeholder GTM-XXXXXXX istek atar ama veri toplamaz; demo yapısı için yeterlidir.


Analytics kullanıyorsanız:

  • Gizlilik politikası sayfanızda hangi araçların kullanıldığını belirtin.
  • AB / TR / UK gibi bölgelerde çerez onayı (CMP) gerekebilir — bu rehber hukuki danışmanlık değildir.
  • Falcon şablonu çerez banner’ı içermez; GTM üzerinden veya ayrı script ile eklersiniz.

  • Her .astro sayfasına ayrı <script> yapıştırmayın.
  • site.ts veya seo.ts içine analytics ID koymayın — analytics.ts kullanın.
  • GTM + doğrudan GA4’i aynı anda açmayın.
  • Production ID’leri commit ederken bilinçli olun (demo placeholder kalabilir).


ID’ler analytics.ts’te; yükleme BaseLayout’ta. Boş string = kapalı. GTM varsa doğrudan GA4 yok. customScripts ile Hotjar vb. Sayfa dosyalarına analytics yazmayın.