Next.js, Gatsby ve Statik Siteler için Çerez İzni: Geliştiriciler İçin Entegrasyon Rehberi

Statik Site İzin Sorunu

Next.js, Gatsby ve Nuxt.js gibi modern JavaScript framework’leri, web sayfalarının oluşturulma ve sunulma biçiminde bir paradigma değişimi getirdi. Sayfalar, derleme anında veya sunucuda önceden oluşturulur, ardından istemci tarafında hydrate edilir. Bu durum çerez izni için benzersiz bir zorluk yaratır: izin banner’ı, herhangi bir takip script’i çalışmadan önce hazır olmalıdır, ancak sayfanın kendisi çoktan oluşturulmuş ve edge’de cache’lenmiş olabilir.

Geleneksel CMP’ler, belgenin yukarıdan aşağıya doğrusal biçimde yüklendiği, sunucu taraflı render edilen PHP veya basit HTML sayfalar için tasarlandı. Kod bölme, lazy loading ve streaming server-side rendering kullanılan bir framework dünyasında bu varsayımlar bozulur. Bu ortamlarda doğru izin yönetimi için render hattını (rendering pipeline) anlamak gerekir.

Zamanlamanın Düşündüğünüzden Daha Önemli Olmasının Nedeni

Standart bir HTML sayfasında, bir CMP script’ini diğer script’lerden önce <head> içine yerleştirmek basittir. Next.js App Router veya Gatsby’de durum daha karmaşıktır:

Temel ilke şudur: izin, bileşen seviyesinde değil, script seviyesinde tesis edilmelidir. Bir izin banner’ı render eden React bileşeni, yalnızca hydration’dan sonra etkileşimli hale geliyorsa çok geç kalmış demektir.

Next.js App Router Entegrasyonu

App Router’lı Next.js 13+ script’leri ele almak için yeni bir yol sundu. İzin entegrasyonu için önerilen yaklaşım şöyledir:

Adım 1: CMP Script’ini Kök Layout’ta Yükleyin

Kök layout.tsx dosyanızda, Next.js Script bileşenini beforeInteractive stratejisiyle kullanın. Bu, Next.js’e script’i, hydration başlamadan önce, ilk HTML belgesine enjekte etmesini söyler:

beforeInteractive stratejisi kritiktir. Varsayılan afterInteractive stratejisi script’leri hydration’dan sonra yükler; bu da izin için çok geçtir. beforeInteractive ile CMP script’i sunucu taraflı oluşturulan HTML’ye dahil edilir ve sayfa yüklenirken çalışır.

Adım 2: Google Etiketlerinden Önce Varsayılan İzinleri Ayarlayın

Google Tag Manager veya gtag.js snippet’inizden önce, varsayılan izin durumlarını ayarlayan bir inline script ekleyin. Böylece GTM, CMP banner’ı görünmeden önce bile yüklense, reddedilmiş varsayılanlara saygı duyar:

Bu inline script, kök layout’unuzun <head> kısmına, CMP ve GTM script’lerinden önce yerleştirilmelidir. Next.js’te bu amaçla layout’unuzun <head> elemanı içinde normal bir <script> etiketi kullanabilirsiniz.

Adım 3: Route Değişimlerini Yönetin

Single-page application gezinmesinde CMP script’i bir kez yüklenir, ancak route değişimleri tam sayfa yenilemesi tetiklemez. CMP’niz istemci taraflı gezinmeler boyunca kalıcı olmalıdır. FlexyConsent bunu otomatik olarak halleder — bir kez yüklendikten sonra, yeniden başlatmaya gerek kalmadan tüm route değişimlerinde etkin kalır.

Next.js Pages Router Entegrasyonu

Hâlâ Pages Router kullanan projeler için yaklaşım benzerdir, ancak kök layout yerine _document.tsx kullanılır. CMP script’ini özel Document sınıfınızın <Head> bileşenine yerleştirin. beforeInteractive stratejisi Pages Router’da da aynı şekilde çalışır.

Temel fark, _document.tsx’in yalnızca sunucuda render edilmesidir; bu nedenle buradaki tüm izin mantığının ilk HTML yükünde yer alacağı garanti edilir.

Gatsby Statik Site Entegrasyonu

Gatsby, derleme anında tamamen statik HTML üretir. İstek anında sunucu taraflı render yoktur; bu bazı yönleri basitleştirirken bazılarını zorlaştırır:

Gatsby’nin derleme zamanı yaklaşımı, CDN’nizdeki her HTML dosyasının izin script’ini içereceği anlamına gelir. Bu aslında idealdir — bozulacak veya yanlış cache’lenecek bir sunucu mantığı yoktur.

Nuxt.js İçin Dikkat Edilecekler

Vue tabanlı Nuxt.js’in kendine özgü kalıpları vardır. Nuxt 3’te, CMP script’ini global olarak eklemek için useHead composable’ını veya nuxt.config.ts içindeki app head yapılandırmasını kullanın. Nuxt, script’leri head’e yerleştiren body: false seçeneğini ve engelleyici olmayan yükleme için async özniteliğini destekler.

Nuxt’ün server-side rendering modunda da aynı ilke geçerlidir: CMP script’i, mount sonrası bir Vue bileşeni tarafından dinamik olarak enjekte edilmek yerine, ilk HTML yanıtında yer almalıdır.

Layout Shift’ten Kaçınma

İzin banner’ları, SEO sıralamalarını etkileyen bir Core Web Vital olan Cumulative Layout Shift (CLS)’e neden olmalarıyla ünlüdür. Banner sayfa render edildikten sonra ortaya çıktığında, içeriği aşağı iter veya beklenmedik şekilde üzerine biner.

İzin banner’larından kaynaklanan CLS’yi en aza indirme stratejileri:

FlexyConsent’in Framework’ten Bağımsız Yaklaşımı

FlexyConsent, bileşen seviyesinde değil script seviyesinde çalışarak, herhangi bir framework ile — hatta hiçbir framework olmadan — çalışacak şekilde tasarlandı. Bunun neden önemli olduğuna bakalım:

Geliştirici ipucu: Doğru CMP entegrasyonunun en basit testi, tarayıcınızın Network sekmesini açmak, Google alan adlarına göre filtrelemek ve sayfayı yeniden yüklemektir. İzin varsayılan komutu konsolda görünmeden önce hiçbir Google isteği tetiklenmemelidir. Eğer tetikleniyorsa, CMP’niz çok geç yükleniyor demektir.

FlexyConsent’in ücretsiz planı, sınırsız sayfa görüntülemesini destekler ve Next.js, Gatsby, Nuxt, Astro, SvelteKit, Remix ve düz HTML ile çalışır. Entegrasyon hepsinde aynıdır: doğru yere yerleştirilmiş tek bir script etiketi.

← Blog Tümünü Oku →