Önbellek ve önizleme
Site şablonunun ISR ve önbellek katmanları, panelin tetiklediği yenileme, önizleme sitesi, yönlendirmeler, dil önekleri ve sitemap.
Bu sayfada sitenin içeriği nasıl önbelleğe aldığını, panelde yapılan bir değişikliğin siteye nasıl ulaştığını ve önizleme sitesinin canlı siteden farkını öğreneceksin.
İki önbellek katmanı
Site şablonunda iki ayrı önbellek vardır. İkisi de temizlenmezse eski içerik görünmeye devam eder.
| Katman | Ne tutar | Süre |
|---|---|---|
| Fetch önbelleği | CMS yanıtları. Hepsi cms-api etiketiyle yazılır. | 300 saniye |
| ISR önbelleği | Sayfalardan üretilen HTML. | 300 saniye (revalidate = 300) |
export const CMS_CACHE_TAG = "cms-api";
export const CMS_REVALIDATE_SECONDS = 300;Kimse yenileme tetiklemese bile bir sayfa en geç beş dakika içinde kendini tazeler. sitemap.xml, robots.txt ve yönlendirme haritası da aynı süreyle önbellekte durur.
Yenileme
/api/revalidate rotası iki katmanı birlikte temizler: cms-api etiketini bayatlatır, ardından sayfaları geçersiz kılar. ?path=/blog/yazi verilirse yalnızca o yol, verilmezse tüm sayfalar geçersiz kılınır.
revalidateTag(CMS_CACHE_TAG, "max");
const path = new URL(request.url).searchParams.get("path");
if (path) revalidatePath(path);
else revalidatePath("/", "layout");Panel; sayfa kaydı, onaya gönderme, onay, ret, silme ve sıralama işlemlerinden sonra hem önizleme sitesinin hem canlı sitenin /api/revalidate adresini çağırır. Bu çağrı her zaman tüm siteyi yeniler. Paneldeki Cache Yenile düğmesi aynı yenilemeyi elle tetikler; düğme kullanıldıktan sonra 60 saniye bekletilir. Panel sayfası farklı bir alan adında olduğu için çağrıyı yapabilecek kökenler REVALIDATE_ALLOWED_ORIGINS ile tanımlanır.
Site birden çok sunucu örneğinde çalışıyorsa her örneğin ISR önbelleği kendi diskindedir. Bu durumda diğer örnekleri REVALIDATE_NODES listesine yaz. Yenileme isteği bu örneklere de iletilir.
Zamanlanmış yayın
Zamanlanmış yayın ve yayından kaldırma CMS'te bir arka plan görevinde çalışır ve siteyi çağırmaz. Bu değişiklikler sitede ISR süresi dolunca görünür. API'nin GET /api/v1/page/public-revision ucu yayındaki içeriğin parmak izini döner. Bir site bu değeri izleyerek değişikliği daha erken fark edebilir.
CMS erişilemezse
CMS'e ulaşılamadığında site "sayfa yok" demez. Hata yukarı iletilir ve ISR son iyi kopyayı sunmaya devam eder. Bir kesintiden sonra site kısa bir süre CMS'e hiç gitmez. Böylece ziyaretçi zaman aşımı beklemez.
Sitenin kendi sağlık ucu /api/health her zaman 200 döner. CMS'e erişilip erişilemediği gövdede yazar:
{ "status": "ok", "preview": false, "cms": { "reachable": true, "unreachableSince": null, "lastSuccessAt": "…" } }Üretimde site açılırken sayfaları sitemap.xml üzerinden ısıtır.
Önizleme sitesi ve canlı site
Aynı şablon iki kez dağıtılır: biri önizleme sitesi, biri canlı site.
| Önizleme sitesi | Canlı site | |
|---|---|---|
PREVIEW_MODE | true | ayarlı değil |
| İçerik | Önizleme kopyası (taslak) | Yayındaki |
| Önbellek | Her istekte dinamik render, önbellek yok | ISR ve fetch önbelleği |
NEXT_PUBLIC_INSPECTOR_ENABLED | true | ayarlı değil |
robots.txt | Tüm siteyi engeller | CMS parametrelerinden üretilir |
PREVIEW_MODE yalnızca sunucuda okunur. Denetleyici bayrağı kapalıyken denetleyici kodu canlı pakete hiç girmez. Sitenin panelde iframe içinde açılabilmesi için frame-ancestors başlığı site adresinden türetilir. Farklı alan adındaki paneller next.config.ts içinde tanımlanır.
Yönlendirme kuralları önizleme sitesinde de aynen çalışır. Yönlendirmesi tanımlı bir sayfa önizlemede de kendi adresinde açılmaz.
Yönlendirmeler
Yönlendirmeler render'dan önce, proxy'de yapılır. Harita CMS'in GET /api/v1/redirect/all/{dil} listesinden kurulur. Zincirler tek adıma indirilir, döngüler atılır. Proxy sırası şöyledir:
Statik dosyalar atlanır.
Bozuk URL artıkları 301 ile temizlenir.
Yönlendirme haritası uygulanır.
Büyük harfli yollar küçük harfe 301 ile yönlendirilir.
Dil öneki çözülür ve istek içerik rotasına geçer.
Yalnızca gezinme istekleri yönlendirilir. Bir form POST'u eski adreste 301 almaz. Yönlendirme sorgusu başarısız olursa gezinme engellenmez.
Proxy'nin kaçırdığı bir istek için içerik rotasında bir güvenlik ağı vardır. redirectTo alanı dolu bir sayfa içerikle çizilmez, aynı harita üzerinden hedefe yönlendirilir.
Dil önekleri
Öneksiz dil src/lib/template-config.ts içindeki DEFAULT_LANGUAGE'dır. Diğer diller URL önekiyle gelir, örneğin /en/about. Açık diller src/lib/middleware/languages.ts içindeki TEMPLATE_LANGUAGES listesindedir.
export const TEMPLATE_LANGUAGES: TemplateLanguage[] = [
{ code: "en", name: "English" },
{ code: "tr", name: "Turkish" },
];DEFAULT_LANGUAGE bu listede yoksa modül açılışta hata verir. Bu bilinçli bir tercih: yanlış dil öneki sessizce yönlendirmeleri bozardı.
Sitemap, robots ve IndexNow
sitemap.xmlCMS'in sayfa ağacından üretilir. Yayında olmayan, yayın tarihi gelmemiş veya geçmiş,noIndexişaretli, önizleme kopyası olan ve yönlendiren sayfalar girmez. Elle dışarıda tutmak istediğin yollarıSITEMAP_EXCLUDED_PATHSlistesine ekle.robots.txtCMS'in herkese açık parametrelerinden üretilir:ROBOTS_AI_CRAWLERSyapay zekâ tarayıcılarının politikasını,ROBOTS_EXTRA_DISALLOWek engelli yolları belirler.public/robots.txtdosyası ekleme, rotayı geçersiz kılar./indexnow.txtCMS'tekiINDEXNOW_KEYparametresini düz metin olarak döner. CMS, IndexNow açıksa değişen adresleri arama motorlarına bildirir. Arama motoru anahtarı bu dosyadan doğrular.
İlgili sayfalar
Geliştirici dokümantasyonu
Journey AI ile site geliştirme ve teknik entegrasyon rehberleri.
Kurulum
API, yönetim paneli ve site şablonunu yerelde kurma, ayarlama ve birbirine bağlama.
Mimari
Yönetim paneli, API ve sitelerin birbiriyle nasıl konuştuğunu ve bir değişikliğin canlıya nasıl ulaştığını öğrenin.