
Next.js'te SSR ve SSG farklarını, hangi yöntemi ne zaman kullanacağını ve projen için doğru render yöntemini nasıl seçeceğini öğren.
Next.js, geliştiricilerin hızlı ve SEO dostu web uygulamaları oluşturmasını sağlayan güçlü bir React framework'üdür. Onu öne çıkaran en önemli özelliklerden biri de esnek veri çekme stratejileridir — yani SSR (Server-Side Rendering) ve SSG (Static Site Generation). Bu yazıda, modern Next.js (App Router) standartlarıyla bu kavramların ne anlama geldiğini ve hangisini ne zaman seçmeniz gerektiğini inceleyeceğiz.
SSR ile bir sayfanın HTML çıktısı, her bir istek (request) geldiğinde sunucuda sıfırdan oluşturulur. Bu sayede veriler her zaman taze ve günceldir.
Güncel App Router mimarisinde, önbelleğe alma (caching) yapmadığınız veya dinamik fonksiyonlar kullandığınız her sunucu bileşeni varsayılan olarak dinamiktir. İsterseniz bunu açıkça belirtebilirsiniz:
// app/products/page.tsx
import React from 'react';
// Her istekte sunucuda yeniden oluşturulmasını zorlar
export const dynamic = 'force-dynamic';
async function getProducts() {
const res = await fetch('[https://api.example.com/products](https://api.example.com/products)', { cache: 'no-store' });
return res.json();
}
export default async function ProductsPage() {
const products = await getProducts();
return (
<div>
<h1>Canlı Ürün Listesi (SSR)</h1>
<ul>
{products.map((p: any) => (
<li key={p.id}>{p.name}</li>
))}
</ul>
</div>
);
}
SSG ile HTML, site derlendiği anda (build time) bir kez oluşturulur. Oluşturulan bu statik sayfa, gelen tüm isteklere anında servis edilir.
Next.js'te standart fetch istekleri varsayılan olarak önbelleğe alınır, bu da kutudan çıktığı gibi SSG desteği sunar:
// app/blog/page.tsx
import React from 'react';
async function getPosts() {
// Varsayılan olarak önbelleklenir (SSG)
const res = await fetch('[https://api.example.com/posts](https://api.example.com/posts)');
return res.json();
}
export default async function BlogPage() {
const posts = await getPosts();
return (
<div>
<h1>Statik Blog Yazıları (SSG)</h1>
<ul>
{posts.map((post: any) => (
<li key={post.id}>{post.title}</li>
))}
</ul>
</div>
);
}
Next.js, tüm siteyi yeniden derlemeden, statik sayfaların arka planda güncellenmesine olanak tanıyan ISR yapısını destekler.
async function getPosts() {
const res = await fetch('[https://api.example.com/posts](https://api.example.com/posts)', {
next: { revalidate: 60 }, // Her 60 saniyede bir arkaplanda yenile
});
return res.json();
}
| Senaryo | Önerilen Strateji |
|---|---|
| Canlı stok takipli e-ticaret ürün sayfaları | SSR |
| Blog yazıları ve teknik dokümantasyonlar | SSG veya ISR |
| Kullanıcı panelleri ve profilleri | SSR (Dynamic) |
| Pazarlama ve tanıtım sayfaları (Landing pages) | SSG |
| Sık güncellenen haber içerikleri | ISR veya SSR |
SSR ve SSG arasında seçim yapmak tamamen verinizin karakterine bağlıdır. Kararsız kaldığınızda basit bir kural izleyin: İçerik sabitse SSG, verinin her tıklamada taze olması gerekiyorsa SSR kullanın. Modern Next.js ile her iki yaklaşımı tek projede harmanlamak artık çok kolay!