Server-Side Rendering (SSR) di Situs Web: Panduan Jelas
Pelajari apa itu SSR (server-side rendering) untuk situs web, bagaimana cara kerjanya, dan kapan memilihnya dibanding CSR atau SSG untuk SEO, kecepatan, dan pengalaman pengguna.

SSR di Situs Web: Definisi Singkat
Server-side rendering (SSR) adalah cara membangun halaman web di mana server menghasilkan HTML untuk sebuah halaman pada saat seseorang memintanya, lalu mengirimkan HTML yang sudah siap tampil itu ke browser.
Dengan kata lain, SSR membalik pola “shell kosong dulu”: alih-alih mengirim halaman yang sebagian besar kosong dan meminta browser merangkainya segera, server melakukan pekerjaan render awal.
Apa yang pengguna rasakan
Dengan SSR, orang biasanya melihat konten halaman lebih cepat—teks, judul, dan tata letak dapat muncul lebih cepat karena browser menerima HTML nyata langsung.
Setelah itu, halaman masih memerlukan JavaScript agar menjadi sepenuhnya interaktif (tombol, menu, form, filter dinamis). Jadi alur umumnya adalah:
- HTML tiba dan ditampilkan (Anda bisa membaca konten)
- JavaScript dimuat dan dijalankan
- Halaman menjadi interaktif
Polanya “tampilkan konten dulu, lalu tambahkan interaktivitas” inilah yang membuat SSR sering dibicarakan dalam konteks performa (terutama kecepatan yang dirasakan).
SSR adalah strategi rendering, bukan jenis hosting
SSR bukan berarti “di-host di server” (hampir semuanya memang begitu). Ini khusus tentang di mana HTML awal diproduksi:
- Dengan server-side rendering, HTML diproduksi di server per permintaan (atau saat cache miss).
- Pendekatan lain mungkin menghasilkan HTML di browser, atau sebelum waktu saat build.
Jadi Anda bisa memakai SSR pada banyak konfigurasi hosting—server tradisional, fungsi serverless, atau runtime edge—tergantung framework dan deployment.
Apa yang akan dibandingkan artikel ini
SSR hanyalah salah satu opsi di antara strategi rendering umum. Selanjutnya, kita akan membandingkan SSR vs CSR (client-side rendering) dan SSR vs SSG (static site generation), serta menjelaskan apa yang berubah untuk kecepatan, UX, strategi caching, dan hasil SEO.
Bagaimana Server-Side Rendering Bekerja
SSR berarti server menyiapkan HTML halaman sebelum sampai ke browser. Alih-alih mengirim shell HTML yang sebagian besar kosong dan membiarkan browser membangun halaman dari nol, server mengirim versi halaman yang “siap dibaca”.
Alur permintaan SSR (langkah demi langkah)
- Permintaan: Seseorang mengunjungi URL (misalnya,
/products/123). Browser mengirim permintaan ke server web Anda. - Pengambilan data: Server menentukan data apa yang dibutuhkan halaman. Ia mungkin meng-query database, memanggil layanan internal, atau mengambil dari API eksternal.
- Render HTML di server: Menggunakan template atau renderer framework (React/Vue/dll yang berjalan di server), server menggabungkan layout dengan data yang diambil untuk menghasilkan HTML penuh untuk rute itu.
- Respons: Server mengembalikan HTML itu ke browser, sehingga konten dapat muncul dengan cepat.
Mengapa Anda masih mengirim JavaScript
SSR biasanya mengirim HTML plus sebuah bundel JavaScript. HTML untuk tampilan segera; JavaScript memungkinkan perilaku di sisi klien seperti filter, modal, dan tindakan “tambahkan ke keranjang”.
Setelah HTML dimuat, browser mengunduh bundel JavaScript dan memasang event handler ke markup yang sudah ada. Penyerahan tugas inilah yang banyak framework sebut sebagai hidratasi.
Apa arti ini dalam praktik
Dengan SSR, server melakukan lebih banyak pekerjaan per permintaan—mengambil data dan merender markup—jadi hasilnya sangat bergantung pada kecepatan API/database dan seberapa baik Anda melakukan caching output.
SSR dan Hydration: Mengapa Interaktivitas Masih Membutuhkan JavaScript
SSR mengirimkan halaman HTML “siap dibaca” dari server. Itu bagus untuk menampilkan konten dengan cepat, tetapi tidak serta-merta membuat halaman menjadi interaktif.
Pola umum: SSR + hydration
Pengaturan yang sangat umum adalah:
- Server merender HTML untuk rute (teks, link, detail produk, layout).
- Browser menampilkan HTML itu segera.
- JavaScript diunduh dan dijalankan untuk meng-hydrate halaman—menghubungkan event handler dan state ke HTML yang sudah dirender.
SSR dapat meningkatkan seberapa cepat orang melihat halaman, sementara hydration-lah yang membuat halaman berperilaku seperti aplikasi.
Apa arti “hydration” (dan mengapa menambah kerja di browser)
Hydration adalah proses di mana JavaScript sisi-klien mengambil alih HTML statis dan memasang interaktivitas: handler klik, validasi form, menu, filter dinamis, dan UI yang menyimpan state.
Langkah tambahan itu membutuhkan waktu CPU dan memori di perangkat pengguna. Di ponsel lambat atau tab yang sibuk, hydration bisa tertunda—meskipun HTML sudah tiba cepat.
Jika JavaScript lambat—atau gagal
Ketika JavaScript lambat dimuat, pengguna mungkin melihat konten tetapi mengalami UI yang “mati” untuk sementara: tombol tidak merespons, menu tidak terbuka, dan input tertunda.
Jika JavaScript gagal sepenuhnya (terblokir, kesalahan jaringan, atau script crash), SSR tetap memungkinkan konten inti muncul. Namun fitur seperti aplikasi yang bergantung pada JavaScript tidak akan berfungsi kecuali Anda merancang fallback (mis. link yang menavigasi normal, form yang submit tanpa kode klien).
SSR bukan berarti “tanpa JavaScript”
SSR adalah tentang di mana HTML dihasilkan. Banyak situs SSR masih mengirim JavaScript yang signifikan—terkadang hampir sebanyak aplikasi CSR—karena interaktivitas tetap memerlukan kode yang berjalan di browser.
SSR vs CSR: Apa yang Berubah untuk Kecepatan dan UX
Server-side rendering (SSR) dan client-side rendering (CSR) dapat menghasilkan halaman yang tampak sama, tetapi urutan pekerjaan berbeda—dan itu mengubah seberapa cepat halaman terasa.
Apa yang diterima browser terlebih dahulu
Dengan CSR, browser biasanya mengunduh bundle JavaScript dulu, lalu menjalankannya untuk membangun HTML. Sampai pekerjaan itu selesai, pengguna mungkin melihat layar kosong, spinner, atau UI “shell”. Itu bisa membuat tampilan pertama terasa lambat meski aplikasinya kuat setelah dimuat.
Dengan SSR, server mengirim HTML siap-tampil segera. Pengguna dapat melihat judul, teks, dan tata letak lebih cepat, yang sering meningkatkan kecepatan yang dirasakan—terutama di perangkat atau jaringan yang lambat.
Interaktivitas dan “waktu sampai bisa digunakan”
CSR sering unggul setelah muatan awal: navigasi antar-layar bisa sangat cepat karena aplikasi sudah berjalan di browser.
SSR terasa lebih cepat pada awalnya, tetapi halaman tetap memerlukan JavaScript agar sepenuhnya interaktif (tombol, menu, form). Jika JavaScript berat, pengguna mungkin melihat konten cepat tetapi masih mengalami jeda sebelum semuanya merespons.
Trade-off yang memengaruhi UX
- Keuntungan SSR: visibilitas konten lebih cepat, kesan pertama lebih halus, sering baik untuk halaman kaya konten.
- Keuntungan CSR: hosting lebih sederhana, lebih sedikit perhatian pada rendering server, cocok untuk pengalaman sangat interaktif setelah muatan.
- Biaya SSR: beban server lebih tinggi, lebih banyak bagian yang harus dikelola (caching, personalisasi, penanganan error).
Contoh sederhana
- Halaman pemasaran, blog, dokumentasi: SSR sering meningkatkan tampilan awal dan keterbacaan.
- Dashboard, alat internal: CSR bisa cocok karena pengguna masuk dan berinteraksi intens, dan navigasi dalam aplikasi yang cepat lebih penting daripada paint pertama.
SSR vs SSG: Kapan Halaman Dibuat
SSR dan SSG bisa tampak serupa bagi pengunjung—keduanya sering mengirim HTML nyata ke browser. Perbedaan kuncinya adalah kapan HTML itu dibuat.
SSG: halaman dibuat saat deploy
Dengan SSG, situs Anda menghasilkan HTML di muka—biasanya selama langkah build saat Anda deploy. File-file itu dapat disajikan dari CDN seperti aset statis lainnya.
Itu membuat SSG:
- Sangat cepat disajikan (cacheable)
- Dapat diandalkan saat lonjakan trafik
- Sederhana dalam keamanan dan operasional (tanpa kerja render per permintaan)
Trade-off-nya adalah kesegaran: jika konten sering berubah, Anda harus rebuild dan redeploy, atau memakai teknik inkremental untuk memperbarui halaman.
SSR: halaman dibuat saat permintaan
Dengan SSR, server menghasilkan HTML pada setiap permintaan (atau setidaknya saat cache miss). Ini berguna ketika konten harus mencerminkan data terbaru untuk pengunjung tertentu atau momen tertentu.
SSR cocok untuk:
- Halaman yang sering berubah (harga, inventori, dashboard live)
- Tampilan yang dipersonalisasi (status login, rekomendasi user)
- Konten yang bergantung pada konteks permintaan (lokasi, A/B test)
Trade-off adalah waktu build vs waktu permintaan: Anda menghindari rebuild panjang untuk konten yang berubah, tetapi memperkenalkan pekerjaan per-permintaan di server—yang memengaruhi TTFB dan biaya operasi.
Situs hybrid: mencampur SSG dan SSR
Banyak situs modern bersifat hybrid: halaman pemasaran dan dokumentasi SSG, sementara area akun atau hasil pencarian SSR.
Cara praktis untuk memutuskan:
- Apakah halaman ini perlu segar setiap kunjungan?
- Bisakah halaman di-cache dengan aman selama menit/jam?
- Apakah membangun ulang seluruh situs setiap perubahan dapat diterima?
Memilih strategi rendering per rute sering memberikan keseimbangan terbaik antara kecepatan, biaya, dan konten yang up-to-date.
SSR dan SEO: Apa yang Membantu (dan Apa yang Tidak)
Server-side rendering sering meningkatkan SEO karena mesin pencari dapat melihat konten nyata segera setelah meminta halaman. Daripada menerima shell HTML hampir kosong yang memerlukan JavaScript untuk mengisinya, crawler mendapatkan teks, judul, dan link penuh langsung.
Hal yang dibantu SSR
Penemuan konten lebih awal. Ketika HTML sudah berisi konten halaman, crawler dapat mengindeksnya lebih cepat dan lebih konsisten—terutama untuk situs besar di mana anggaran crawl dan waktu penting.
Rendering yang lebih andal. Mesin pencari modern bisa mengeksekusi JavaScript, tetapi itu tidak selalu segera atau dapat diprediksi. Beberapa bot merender lambat, menunda eksekusi JS, atau melewatinya saat ada keterbatasan sumber daya. SSR mengurangi ketergantungan Anda pada “mudah-mudahan crawler menjalankan JS saya.”
Sinyal SEO di halaman. SSR memudahkan untuk menyertakan sinyal penting di respons HTML awal, seperti:
- Title tag dan meta description
- Metadata Open Graph/Twitter untuk preview berbagi
- Canonical tag untuk menghindari kebingungan konten duplikat
- Structured data (JSON-LD) yang hadir segera
Apa yang tidak diperbaiki SSR secara otomatis
Kualitas dan relevansi konten. SSR membantu mesin pencari mengakses konten Anda, tetapi tidak membuat konten itu berguna, orisinal, atau sesuai dengan apa yang dicari orang.
Struktur situs dan linking internal. Navigasi yang jelas, struktur URL logis, dan internal link yang kuat tetap penting untuk penemuan dan peringkat.
Kebersihan SEO teknis. Masalah seperti halaman tipis, URL duplikat, canonical yang rusak, sumber daya yang diblokir, atau aturan noindex yang salah masih bisa menghambat hasil—meskipun menggunakan SSR.
Anggap SSR sebagai peningkatan keandalan saat crawl-and-render. Ini fondasi kuat, bukan jalan pintas untuk peringkat.
Dasar-dasar Performa: TTFB, LCP, dan Kecepatan yang Dirasakan
Pembicaraan performa terkait SSR biasanya berkutat pada beberapa metrik kunci—dan satu perasaan pengguna: “Apakah halaman muncul cepat?” SSR bisa memperbaiki apa yang dilihat pengguna lebih awal, tetapi juga memindahkan pekerjaan ke server dan ke hydration.
Metrik yang penting
TTFB (Time to First Byte) adalah berapa lama server mulai mengirim sesuatu kembali. Dengan SSR, TTFB sering menjadi lebih penting karena server mungkin perlu mengambil data dan merender HTML sebelum merespons. Jika server lambat, SSR sebenarnya bisa memperburuk TTFB.
FCP (First Contentful Paint) adalah saat browser pertama kali me-render konten apa pun (teks, background, dll.). SSR sering membantu FCP karena browser menerima HTML siap-tampil alih-alih shell kosong.
LCP (Largest Contentful Paint) adalah saat elemen “terbesar” yang mewakili konten utama (sering hero, gambar, atau judul produk) menjadi terlihat. SSR dapat membantu LCP juga—jika HTML tiba cepat dan CSS/asset kritis tidak memblokir render.
Di mana SSR bisa menjadi bottleneck
SSR menambah pekerjaan server pada setiap permintaan (kecuali di-cache). Dua bottleneck umum adalah:
- Latensi server: waktu CPU untuk merender template/komponen, ditambah waktu antrean saat beban tinggi.
- Pengambilan data: menunggu database dan API. Jika halaman SSR Anda butuh tiga panggilan backend, waktu respons bisa menjadi “panggilan paling lambat yang menang.”
Kesimpulan praktis: performa SSR sering lebih soal jalur data Anda. Mengurangi ronde API, memakai query lebih cepat, atau prekomputasi bagian halaman dapat berdampak lebih besar daripada mengutak-atik kode frontend.
Kecepatan yang dirasakan vs. interaktivitas aktual
SSR unggul pada “tampilan pertama”: pengguna bisa melihat konten lebih cepat, menggulir, dan merasa situs responsif. Namun hydration masih perlu JavaScript untuk menghubungkan tombol, menu, dan form.
Itu menciptakan trade-off:
- Paint awal lebih cepat (baik untuk kecepatan yang dirasakan)
- Kemungkinan penundaan sampai interaksi bekerja (biaya hydration), terutama pada perangkat kelas bawah atau halaman berat
Caching adalah tuas utama
SSR tercepat sering kali adalah SSR yang dicache. Jika Anda dapat meng-cache HTML yang dirender (di CDN, reverse proxy, atau level aplikasi), Anda menghindari merender ulang dan pengambilan data berulang di setiap permintaan—memperbaiki TTFB dan, pada gilirannya, LCP.
Kuncinya adalah memilih strategi caching yang sesuai dengan sifat konten Anda (publik vs dipersonalisasi) sehingga Anda mendapatkan kecepatan tanpa keliru menyajikan data user lain.
Caching Halaman SSR Tanpa Menyajikan Konten yang Salah
SSR terasa lambat jika setiap permintaan memaksa server merender HTML dari nol. Caching memperbaiki itu—tetapi hanya jika Anda hati-hati tentang apa yang aman untuk di-cache.
Lapisan caching umum (dan kegunaannya)
Kebanyakan stack SSR berakhir dengan beberapa cache:
- Cache CDN: menyimpan HTML penuh dekat pengguna. Bagus untuk halaman publik (pemasaran, docs, kategori).
- Reverse proxy cache (mis. Nginx/Varnish): berdiri di depan aplikasi, meng-cache respons dan melindungi server SSR saat lonjakan trafik.
- App cache: kode Anda meng-cache komputasi mahal atau fragmen (biasanya di Redis atau memori) agar rendering lebih cepat meski Anda tidak bisa cache seluruh halaman.
- Database cache: indeks, query cache, atau read replica mengurangi biaya pengambilan data saat rendering.
Cache key: apa yang membuat satu “halaman” berbeda dari yang lain
Respons SSR yang dicache hanya benar jika cache key mencakup semua hal yang mengubah output. Selain path URL, variasi umum meliputi:
- Locale (bahasa/wilayah)
- Device class (mobile vs desktop) jika markup berbeda
- Status auth (logged in vs logged out)
- Eksperimen (bucket A/B test)
HTTP membantu di sini: gunakan header Vary ketika output berubah berdasarkan header permintaan (mis. Vary: Accept-Language). Berhati-hatilah dengan Vary: Cookie—itu bisa merusak hit rate cache.
Header dan pola revalidasi
Gunakan Cache-Control untuk mendefinisikan perilaku:
public, max-age=0, s-maxage=600(cache di CDN/proxy selama 10 menit)stale-while-revalidate=30(sajikan HTML sedikit usang sambil menyegarkan di latar)- ETag atau Last-Modified untuk permintaan kondisional (respons 304 yang cepat)
Peringatan besar: halaman yang dipersonalisasi
Jangan pernah meng-cache HTML yang menyertakan data pribadi kecuali cache betul-betul per-user. Pola yang lebih aman adalah: cache shell publik SSR, lalu ambil data personal setelah muat (atau render server-side tapi beri header private, no-store). Satu kesalahan di sini bisa membocorkan detail akun antar pengguna.
Kekurangan SSR dan Kesalahan Umum
SSR bisa membuat halaman terasa lebih cepat dan lengkap pada muatan pertama, tetapi juga memindahkan kompleksitas kembali ke server. Sebelum berkomitmen, penting mengetahui apa yang bisa salah—dan apa yang sering mengejutkan tim.
Lebih banyak bagian yang harus diurus: runtime, deploy, monitoring
Dengan SSR, situs Anda bukan lagi hanya file statis di CDN. Kini Anda punya server (atau fungsi serverless) yang merender HTML on-demand.
Itu berarti Anda bertanggung jawab untuk konfigurasi runtime, deployment yang lebih aman (rollbacks penting), dan monitoring perilaku real-time: tingkat error, request lambat, penggunaan memori, dan kegagalan dependency. Rilis buruk bisa mematahkan setiap permintaan halaman segera, bukan hanya satu unduhan bundle.
Biaya infrastruktur lebih tinggi
SSR sering meningkatkan compute per permintaan. Bahkan jika rendering cepat, itu tetap pekerjaan yang harus dilakukan server untuk setiap kunjungan.
Dibanding hosting statis murni, biaya dapat naik akibat:
- Lebih banyak CPU (merender template/komponen)
- Lebih banyak instance server atau peningkatan penggunaan serverless
- Lapisan caching tambahan untuk menjaga performa stabil
Mode kegagalan yang tidak terlihat pada halaman statis
Karena SSR terjadi saat permintaan, Anda bisa menghadapi kasus tepi seperti:
- Timeouts saat rendering berlangsung terlalu lama
- Batasan laju (rate limits) di bawah lonjakan trafik
- API pihak ketiga yang lambat menunda pembuatan halaman
Jika kode SSR Anda memanggil API eksternal, satu dependency yang lambat bisa membuat homepage melambat. Karena itu timeout, fallback, dan caching bukanlah opsional.
Hydration dan bug “UI tidak sinkron”
Kesalahan pengembang yang umum adalah ketika server merender HTML yang tidak persis sama dengan apa yang dirender browser saat hydration. Hasilnya bisa berupa warning, flicker, atau interaktivitas yang rusak.
Penyebab tipikal: nilai acak, cap waktu (timestamp), data khusus pengguna, atau API khusus browser saat render awal tanpa penjagaan yang tepat.
Framework SSR Populer dan Istilah Terkait
Memilih “SSR” biasanya berarti memilih framework yang bisa merender HTML di server dan kemudian membuatnya interaktif di browser. Berikut opsi umum dan istilah yang sering Anda temui.
Framework populer yang mendukung SSR
Next.js (React) adalah pilihan default untuk banyak tim. Mendukung SSR per-rute, static generation, streaming, dan beberapa target deployment (server Node, serverless, dan edge).
Nuxt (Vue) menawarkan pengalaman serupa untuk tim Vue, dengan routing berbasis file dan mode rendering yang fleksibel.
Remix (React) menekankan standar web dan routing bersarang. Sering dipilih untuk aplikasi data-heavy di mana routing dan pemuatan data ingin dipasangkan erat.
SvelteKit (Svelte) menggabungkan SSR, output statis, dan adapter untuk host berbeda, dengan nuansa ringan dan pemuatan data yang sederhana.
Istilah terkait (definisi singkat)
- SSR (Server-Side Rendering): HTML dibuat di server untuk setiap permintaan (atau untuk banyak permintaan lewat caching).
- SSG (Static Site Generation): HTML dibuat saat build.
- ISR (Incremental Static Regeneration): halaman “statis” disegarkan setelah deploy secara jadwal atau on-demand.
- Streaming: server mengirim HTML dalam potongan sehingga pengguna bisa melihat konten lebih cepat.
- Edge rendering: SSR berjalan lebih dekat ke pengguna (lokasi CDN/edge) untuk mengurangi latensi.
Routing dan pemuatan data: apa yang berbeda
- Next.js / Nuxt / SvelteKit: sering menggunakan routing berbasis file; data biasanya diambil di hook server-spesifik yang terkait dengan rute.
- Remix: memakai nested routes dengan loader/action per-rute, sehingga setiap rute menyatakan bagaimana ia mengambil data dan menangani form.
Cara memilih
Pilih berdasarkan library UI tim Anda, bagaimana Anda ingin hosting (server Node, serverless, edge), dan seberapa banyak kontrol yang Anda butuhkan terhadap caching, streaming, dan pemuatan data.
Jika ingin cara cepat bereksperimen sebelum berkomitmen ke stack SSR penuh, platform seperti Koder.ai bisa membantu membuat prototipe aplikasi berbentuk produksi dari antarmuka chat—biasanya dengan frontend React dan backend Go + PostgreSQL—lalu iterasi dengan fitur seperti planning mode, snapshots, dan rollback. Untuk tim yang mengevaluasi trade-off SSR, loop “prototipe-ke-deploy” semacam itu memudahkan mengukur dampak TTFB/LCP riil alih-alih menebak.
Pertanyaan umum
What is server-side rendering (SSR) in simple terms?
SSR (server-side rendering) berarti server Anda menghasilkan HTML halaman saat pengguna meminta sebuah URL, lalu mengirimkan HTML yang siap ditampilkan itu ke browser.
Ini berbeda dari sekadar “di-host di server” (hampir semua hal di web memang begitu). SSR secara spesifik menjelaskan di mana HTML awal diproduksi: di server per permintaan (atau saat cache miss).
How does SSR work step by step?
Alur SSR tipikal terlihat seperti ini:
- Browser meminta sebuah rute (mis.
/products/123). - Server mengambil data yang diperlukan (DB/API/layanan internal).
- Server merender HTML menggunakan framework/template Anda.
- Browser menampilkan HTML secara langsung, lalu mengunduh JavaScript untuk mengaktifkan interaktivitas.
Perbedaan UX yang besar adalah pengguna sering dapat membaca konten lebih cepat karena HTML nyata tiba lebih dulu.
Does SSR eliminate the need for JavaScript?
SSR terutama mempercepat bagaimana cepat pengguna dapat melihat konten, tetapi JavaScript masih diperlukan untuk perilaku seperti aplikasi.
Kebanyakan situs SSR mengirimkan:
- HTML untuk tampilan awal yang cepat
- sebuah bundel JS yang berjalan di browser untuk menghubungkan event handler dan state
Jadi SSR biasanya berarti “konten dulu, interaktivitas kemudian”, bukan “tanpa JavaScript”.
What is hydration, and why can SSR pages still feel slow to interact with?
Hydration adalah langkah di sisi klien di mana JavaScript Anda “mengaktifkan” HTML yang dirender oleh server.
Secara praktis, hydration:
- menghubungkan handler klik, logika form, dan state ke markup yang sudah ada
- membutuhkan CPU/memori di perangkat pengguna
Pada perangkat lambat atau dengan bundle besar, pengguna mungkin melihat konten dengan cepat tetapi mengalami periode “UI mati” singkat sampai hydration selesai.
How is SSR different from CSR (client-side rendering)?
CSR (client-side rendering) biasanya mengunduh bundle JavaScript dulu lalu membangun HTML di browser, yang dapat menghasilkan layar kosong atau UI kerangka sampai JS selesai.
SSR mengirimkan HTML siap-tampil terlebih dahulu, sehingga sering kali meningkatkan kecepatan yang dirasakan pada kunjungan awal.
Aturan praktis:
- SSR: tampilan awal lebih baik untuk halaman berfokus konten/SEO
- CSR: penyebaran lebih sederhana dan navigasi di dalam aplikasi cepat setelah app selesai dimuat
How is SSR different from SSG (static site generation)?
SSG (static site generation) membuat HTML pada waktu build/deploy dan menyajikannya seperti file statis—sangat mudah di-cache dan dapat diandalkan saat trafik tinggi.
SSR membuat HTML pada waktu permintaan (atau saat cache miss), berguna ketika halaman harus selalu segar, dipersonalisasi, atau tergantung konteks permintaan.
Banyak situs menggabungkan keduanya: SSG untuk pemasaran/dokumentasi yang stabil, SSR untuk hasil pencarian, inventaris, atau halaman ber-konteks pengguna.
Does SSR improve SEO, and what doesn’t it fix?
SSR dapat membantu SEO dengan menempatkan konten bermakna dan metadata langsung di respons HTML awal, sehingga crawling dan pengindeksan menjadi lebih andal.
SSR membantu dengan:
- penemuan konten lebih cepat (lebih sedikit tergantung pada eksekusi JS)
- menempatkan elemen penting seperti title, canonical, dan JSON-LD segera
SSR tidak memperbaiki:
- kualitas konten yang lemah
- struktur situs dan linking internal yang buruk
- masalah teknis seperti
noindex, duplikat, atau canonical yang salah
How does SSR affect TTFB, LCP, and perceived performance?
Metrik paling relevan adalah:
- TTFB: bisa meningkat dengan SSR jika fetching/rendering lambat
- FCP/LCP: sering membaik karena HTML tiba siap untuk dirender
- Time to interactive/usable: bisa tertunda oleh hydration dan bundle JS yang besar
Performa SSR sering bergantung lebih pada jalur data Anda (latensi API/DB, jumlah ronde) dan strategi caching daripada framework UI semata.
How do you cache SSR pages without leaking personalized content?
Caching output SSR sangat efektif, tetapi Anda harus menghindari menyajikan HTML pengguna A kepada pengguna B.
Langkah-langkah praktis:
- Cache halaman publik di CDN/proxy dengan
Cache-Control(mis.s-maxage,stale-while-revalidate). - Definisikan cache key dengan hati-hati (URL + locale, device class, bucket eksperimen).
- Gunakan header
Varybila output berubah berdasarkan header permintaan (mis.Vary: Accept-Language), dan berhati-hatilah denganVary: Cookie. - Untuk halaman personal, gunakan
private, no-storeatau cache per-user saja jika benar-benar perlu.
Jika ragu, cache shell publik dan ambil detail yang dipersonalisasi setelah halaman dimuat.
What are the biggest downsides or common pitfalls of SSR?
Masalah umum SSR meliputi:
- Dependency upstream yang lambat: satu API/kueri DB yang lambat membuat seluruh halaman melambat.
- Timeout dan lonjakan trafik: rendering saat permintaan bisa membebani server tanpa caching.
- Hydration mismatch: HTML server berbeda dari apa yang dirender klien (sering karena nilai acak, cap waktu, atau API khusus browser saat render awal).
- Kompleksitas operasional: monitoring, rollback, dan kegagalan runtime memengaruhi setiap permintaan halaman.
Mitigasi: tetapkan timeout/fallback, kurangi ronde data, tambahkan lapisan caching, dan pastikan render server/klien deterministik.