SvelteKitのページオプション(prerender・ssr・csr)を整理した話

SvelteKitはページごとにレンダリング方式を切り替えられます。実務でパフォーマンスやSEOの要件に応じて使い分けます。


3つのレンダリング方式

SSR(サーバーサイドレンダリング) → デフォルト。毎回サーバーでHTMLを生成
prerender(静的生成)            → ビルド時にHTMLを生成して静的ファイルとして配信
CSR(クライアントサイドレンダリング)→ ブラウザ側でJSが動いてページを描画

prerender — 静的ページとして生成する

// src/routes/about/+page.ts
export const prerender = true;

ビルド時にHTMLが生成されるため、サーバー処理が不要になり高速です。

重要な挙動:開発中は404になる

開発中(wrangler dev / npm run dev)
  → prerender されていない → 404

ビルド後(npm run build)
  → about.html が生成される → ページが表示される

prerender = true のページはサーバーが毎回処理するのではなく、ビルド時に生成されたHTMLファイルをそのまま返すだけになります。DBへのアクセスも不要になるため、静的コンテンツとして最速で配信できます。

ビルド後に .svelte-kit/output/prerendered/pages/about.html が生成されていれば正しく動いています。

向いているページ:
  ✅ トップページ
  ✅ Aboutページ・プライバシーポリシーなど(静的な内容)
  ✅ 内容が変わらないブログ記事

向いていないページ:
  ❌ ログインが必要なページ
  ❌ リアルタイムデータを表示するページ
  ❌ URLパラメータで内容が変わるページ

ssr — サーバーサイドレンダリングを無効化する

export const ssr = false;

サーバーでのHTMLレンダリングをスキップして、ブラウザのみで動かします。

向いているページ:
  ✅ localStorage・windowなどブラウザAPIを使うページ
  ✅ 認証後のダッシュボードなど(SEO不要なページ)

向いていないページ:
  ❌ SEOが必要なページ(検索エンジンに読まれない)
  ❌ 初期表示速度が重要なページ

csr — クライアントサイドのJSを無効化する

export const csr = false;

ページのJavaScriptを読み込まなくなります。HTMLとCSSだけで動く静的ページにできます。

向いているページ:
  ✅ 完全な静的コンテンツ(プライバシーポリシーなど)
  ✅ JSが不要なページ(ページ表示の高速化)

④ 組み合わせて使う

// ビルド時に生成 + ブラウザJS不要 → 最速の静的ページ
export const prerender = true;
export const csr = false;
// SSRなし + クライアントのみ → SPAページ
export const ssr = false;

+layout.ts に書くと配下全体に適用される

// src/routes/+layout.ts
export const prerender = true;  // サイト全体を静的生成
// src/routes/dashboard/+layout.ts
export const ssr = false;  // dashboard配下はSSR無効

まとめ

オプション デフォルト 主な用途
ssr = true 通常のSSR(デフォルト)
ssr = false ブラウザAPIを使う・SEO不要なページ
prerender = true 変更のない静的コンテンツ
csr = false JS不要の完全静的ページ
← トップページに戻る