Panduan

SSG vs SSR vs CSR

Penjelasan perbedaan static site generation, server-side rendering, dan client-side rendering — beserta ISR dan mode hibrida, dan cara memilih untuk tiap halaman.

Tiga singkatan ini menjawab satu pertanyaan: kapan HTML halamanmu dibuat?

ModeHTML dibuatOleh
SSGSaat build, sebelum ada yang berkunjungKomputer build
SSRSaat halaman dimintaServer
CSRSetelah halaman termuatBrowser pengunjung

Itu inti seluruh perbedaannya. Sisanya adalah konsekuensi.

SSG — dirender saat build

Semua halaman dirender jadi berkas HTML saat kamu menjalankan npm run build. Hasilnya diunggah ke CDN, dan pengunjung menerima berkas jadi.

Kelebihannya: paling cepat yang mungkin — tidak ada yang dihitung saat pengunjung datang, cuma berkas dikirim dari lokasi terdekat. Paling murah, karena tidak ada server yang berjalan. Paling sedikit yang bisa rusak. Dan paling ramah mesin pencari, karena isinya sudah ada di HTML sejak awal.

Kekurangannya: setiap perubahan isi butuh build ulang. Untuk situs 100 halaman itu hitungan detik. Untuk 50.000 halaman, build-nya bisa berpuluh menit.

Cocok untuk: blog, dokumentasi, landing page, portofolio, situs perusahaan — semua yang isinya sama untuk setiap pengunjung.

SSR — dirender saat diminta

Tiap kali ada permintaan, server menjalankan kodemu, mengambil data terbaru, dan menyusun HTML saat itu juga.

Kelebihannya: isinya selalu mutakhir, dan bisa berbeda untuk tiap pengunjung — dasbor yang menampilkan data pribadi, harga yang berubah tiap menit, halaman di balik login. Mesin pencari tetap menerima HTML yang lengkap.

Kekurangannya: lebih lambat, karena pengunjung menunggu server bekerja. Lebih mahal, karena tiap kunjungan memanggil function. Dan lebih banyak yang bisa rusak — kalau databasemu lambat, situsmu ikut lambat.

Cocok untuk: halaman yang isinya bergantung pada siapa yang membuka, atau data yang berubah dalam hitungan detik.

CSR — dirender di browser

Server mengirim HTML nyaris kosong plus berkas JavaScript. Browser menjalankan JavaScript itu, mengambil data, lalu menyusun halamannya sendiri.

Ini yang dilakukan aplikasi React atau Vue biasa tanpa framework tambahan.

Kelebihannya: setelah termuat, perpindahan antar halaman terasa instan — tidak ada permintaan halaman penuh lagi. Servernya sesederhana mungkin: cuma berkas statis.

Kekurangannya: tampilan pertama paling lambat, karena pengunjung menunggu JavaScript diunduh dan dijalankan sebelum melihat apa pun. Dan untuk mesin pencari, ini yang paling berisiko.

Soal CSR dan mesin pencari

Google memang menjalankan JavaScript saat merayapi halaman, jadi situs CSR bisa terindeks. Tapi prosesnya tertunda dan tidak dijamin — dan mesin pencari lain, serta perayap AI, sering tidak menjalankan JavaScript sama sekali. Kalau kamu bergantung pada trafik pencarian, jangan pilih CSR.

Cocok untuk: aplikasi di balik login — dasbor admin, alat internal, papan kerja. Halaman yang memang tidak perlu ditemukan mesin pencari.

ISR — jalan tengah yang paling sering benar

Incremental Static Regeneration menggabungkan yang terbaik dari SSG dan SSR: halaman disajikan dari cache seperti berkas statis, tapi dibangun ulang secara berkala di latar belakang.

// Next.js
export const revalidate = 600;
// Nuxt
routeRules: {
  '/blog/**': { isr: 600 }
}

Pengunjung selalu mendapat respons instan dari cache. Servermu hanya bekerja sesekali, bukan tiap kunjungan.

Untuk sebagian besar situs berbasis konten yang datanya berubah — toko, portal berita, blog dengan CMS — ini biasanya jawaban yang benar, bukan SSR penuh. Banyak orang memilih SSR padahal yang mereka butuhkan cuma ISR, lalu membayar biaya function untuk halaman yang isinya sama sepanjang jam.

Kamu tidak harus memilih satu untuk seluruh situs

Ini yang paling sering disalahpahami. Framework modern membiarkan kamu menentukan mode per halaman.

Situs toko yang wajar kira-kira begini:

HalamanModeAlasan
BerandaSSGJarang berubah, harus cepat
Tentang, kontakSSGNyaris tidak pernah berubah
Daftar produkISRBerubah, tapi tidak tiap detik
Detail produkISRSama
Keranjang belanjaCSRKhas tiap pengguna, tidak perlu diindeks
Riwayat pesananSSRDi balik login, data pribadi

Aturan praktisnya satu kalimat: pakai mode paling statis yang masih memenuhi kebutuhan halaman itu.

Cara memutuskan

Untuk tiap halaman, jawab berurutan:

  1. Apakah isinya sama untuk semua pengunjung? Kalau tidak — SSR atau CSR.
  2. Kalau sama, seberapa sering berubah?
    • Jarang, dan build ulang tidak masalah → SSG
    • Sering, tapi telat beberapa menit tidak apa-apa → ISR
    • Harus mutakhir tiap detik → SSR
  3. Perlu ditemukan mesin pencari? Kalau ya, hindari CSR.

Cara mengecek mode halamanmu sekarang

Jangan menebak. Ada dua cara memastikannya.

Lihat sumber halaman. Klik kanan lalu View Page Source — bukan Inspect, karena Inspect menampilkan hasil setelah JavaScript berjalan. Kalau isi artikelmu ada di situ, halamanmu SSG, ISR, atau SSR. Kalau yang terlihat cuma <div id="root"></div>, itu CSR.

curl -s https://situsku.com/ | grep -c "kata-dari-artikelmu"

Hasil 0 berarti isinya tidak ada di HTML awal.

Baca keluaran build. Next.js mencetak tabel mode tiap rute setelah npm run build. Di situ ketahuan kalau ada halaman yang kamu kira statis ternyata dinamis.

Ringkasan

SSGISRSSRCSR
Kecepatan tampil pertamaTerbaikTerbaikSedangPaling lambat
Kesegaran dataSaat buildBerkalaSelaluSelalu
Biaya per kunjunganNolNyaris nolSatu functionNol
Ramah mesin pencariYaYaYaBerisiko
Isi per penggunaTidakTidakYaYa

Untuk memahami arsitektur yang membuat SSG jadi pilihan utama, lihat apa itu Jamstack. Untuk dampaknya pada kecepatan yang diukur Google, lihat optimasi Core Web Vitals di situs statis.