SPA(React)をRenderでデプロイしたらF5リロード時に404エラーが発生する問題を即解決

React/VueなどのSPAをRenderでデプロイした直後、F5キーでリロードしたりURLを直接入力すると404エラーが表示される問題の解決方法を解説します。3分でRender Dashboardから設定可能です。

🚨 こんな症状で困っていませんか?

  • Renderでデプロイしたら /about ページでF5リロードすると404エラー
  • React Routerで作ったページのURLを直接入力すると「Page Not Found」
  • ホームページは表示されるが、他のページをリロードできない
目次

【緊急】まず確認:なぜRenderでデプロイしたSPAで404エラーが起きるのか

Renderにデプロイ直後に404エラーが起きる根本的な原因を理解しましょう。

Render
Static Sites Deploy your static sites on Render in just a few clicks. Includes a global CDN, automatic TLS certificates, auto-deploys from Git, and custom domains, all for f...

SPAとサーバーの仕組みの違い

動作SPA(クライアント側)サーバー(Render側)
ページ遷移JavaScriptでURLを変更
/aboutに見える)
実際のファイルはindex.htmlのみ
F5リロードブラウザがサーバーに/aboutを要求/aboutフォルダが存在しない→404エラー
直接URL入力サーバーは物理ファイルを探す→見つからない

問題の本質

  • SPA:すべてのページが実際はindex.htmlの1つのファイル
  • React Router:JavaScript内でURLを管理(クライアントサイドルーティング)
  • サーバー/aboutという物理フォルダ/ファイルを探そうとする
  • 結果:ファイルが見つからず404エラー

問題の特定:本当に404エラーかを確認する方法

まず、問題が確実に404エラーかを確認しましょう。

簡単な確認手順

  1. デプロイしたサイトのホームページ(/)を開く → ✅ 正常表示されるはず
  2. React Routerで設定したページ(例:/about)にリンクで移動 → ✅ 正常表示されるはず
  3. そのページでF5キーを押す → ❌ 404エラーまたは「Page Not Found」
  4. ブラウザのアドレスバーに直接https://yoursite.onrender.com/aboutを入力 → ❌ 404エラー

ブラウザ開発者ツールでの確認

  1. F12キーで開発者ツールを開く
  2. Networkタブを選択
  3. 404エラーのページでF5リロード
  4. Status列で404が表示されることを確認

【解決手順】Render Dashboardでリライトルール設定(3分で完了)

Renderの管理画面から、すべてのリクエストをindex.htmlにリダイレクトする設定を行います。

Render
Static Site Redirects and Rewrites Learn how to define redirect and rewrite rules for your static sites right from your Render Dashboard.

ステップ1:Render Dashboardにアクセス

  1. Render Dashboardにログイン
  2. 対象のStatic Siteをクリック
  3. 左サイドバーの「Redirects/Rewrites」をクリック

ステップ2:リライトルールの追加

  1. 「Create Rule」ボタンをクリック
  2. 以下の設定を入力:
フィールド入力値説明
Source/*すべてのパスにマッチ
Destination/index.htmlリダイレクト先
ActionRewriteURLを変更せずに内容を返す
  1. 「Save Changes」をクリック
  2. 数分待ってデプロイが完了するのを確認

⚠️ 重要:RedirectではなくRewriteを使う理由

設定結果問題
RedirectURLが/に変更されるページの識別ができない
RewriteURL:/aboutのまま
内容:index.htmlを返す
✅ 正常動作

React Router側で必要な確認事項

サーバー側の設定が完了したら、React Routerの設定も確認しましょう。

React Router v6での正しい設定例

// App.js
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import Home from './components/Home';
import About from './components/About';
import NotFound from './components/NotFound';

function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
        {/* 404ページ用のキャッチオール */}
        <Route path="*" element={<NotFound />} />
      </Routes>
    </BrowserRouter>
  );
}

export default App;

NotFoundコンポーネントの作成

// components/NotFound.js
import { Link } from 'react-router-dom';

function NotFound() {
  return (
    <div>
      <h1>404 - ページが見つかりません</h1>
      <p>お探しのページは存在しません。</p>
      <Link to="/">ホームに戻る</Link>
    </div>
  );
}

export default NotFound;

✅ 設定確認チェックリスト

  • BrowserRouterを使用している(HashRouterではない)
  • path="*"でキャッチオールルートを設定
  • 各Routeにelementプロパティが正しく設定されている
  • コンポーネントが正しくexportされている

代替案:_redirectsファイルでの設定方法

Render Dashboardからの設定が上手くいかない場合の代替手段として、_redirectsファイルを使う方法もあります。

_redirectsファイルの作成手順

  1. プロジェクトのpublicフォルダに_redirectsファイルを作成
  2. 以下の内容を記述:
/*    /index.html   200
  1. ファイルを保存してGitにcommit & push
  2. Renderが自動でデプロイを実行

⚠️ 注意点

  • _redirectsファイルはRenderでは実験的サポートの可能性
  • ビルド後のフォルダ(distbuild)に確実にコピーされることを確認
  • Render Dashboardでの設定を優先推奨

よくある設定ミスと即座に解決する方法

問題原因解決方法
設定したのに404エラーが続くキャッシュが残っているブラウザのハードリロード(Ctrl+Shift+R)
ホームページも表示されないPublish Directoryが間違いSettings→Build設定でdistまたはbuildを確認
リライトルールが保存できないSource形式が間違い/*(先頭にスラッシュ必須)
無限リダイレクトが発生ActionがRedirectになっているActionをRewriteに変更

動作確認の手順

  1. 設定変更後、数分待つ(デプロイに時間がかかる)
  2. ブラウザのハードリロード:Ctrl + Shift + R(Windows)/ Cmd + Shift + R(Mac)
  3. シークレットモードで確認(キャッシュの影響を除外)
  4. React Router のページでF5リロードを実行
  5. ✅ 正常にページが表示されればOK

設定完了!SPA routing問題を根本解決

これでRenderでデプロイしたSPAの404エラー問題が解決しました。

🎉 解決できたこと

  • F5リロード:どのページでもリロード可能
  • 直接URL/aboutなどのURLを直接入力して表示
  • ブックマーク:特定ページのブックマークが正常動作
  • シェア:SNSでページURLをシェア可能
  • SEO:検索エンジンがページを正しく認識

重要なリンク集

次のステップ

  1. カスタムドメインの設定:独自ドメインでの運用
  2. 環境変数の活用:API URLなどの設定
  3. ビルド最適化:デプロイ時間の短縮
  4. 監視設定:サイトの稼働状況確認

SPAをRenderでデプロイする際の404エラーは、リライトルール1つで確実に解決できます。今後新しいプロジェクトでも同じ設定を行えば、最初から404エラーを防げます!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次