Next.jsでChunkLoadErrorがキャッシュクリアしても直らない原因【本番だけ壊れた時の対処法】
結論|キャッシュクリアで直らないChunkLoadErrorの正体
ChunkLoadErrorが出たとき、まずキャッシュを削除しようとしますよね。でも、それで直らない場合があります。
結論から言うと、この種のエラーの原因はブラウザキャッシュではなく「デプロイ済みのHTMLが古いchunkファイルを参照している」という不整合です。
ブラウザがどれだけ新鮮な状態でも、サーバー側が古いJSファイルを指し示していれば、読み込みは必ず失敗します。キャッシュクリアで直らないのは当然で、根本の原因が別の場所にあるからです。
この記事は以下に当てはまる方向けです。
- Next.jsを本番環境(Cloudflare等)にデプロイしている
- ChunkLoadErrorが本番だけで発生している(ローカルは正常)
- キャッシュ削除・再ビルド・再デプロイを試したが直らない
原因の多くはchunkとHTMLの不整合
Next.jsはビルドのたびにJSファイル名にハッシュを付与します。たとえば _next/static/chunks/page-abc123.js のような形式です。HTMLにはそのハッシュ付きファイル名が埋め込まれます。
ここで問題が起きるのは、HTMLは新しいのにJSチャンクが古いまま、あるいはその逆の状態になったときです。Cloudflareのようなエッジキャッシュが絡むと、このズレが静かに発生します。
ブラウザキャッシュが原因でないケース
ブラウザの「ハードリロード(Ctrl+Shift+R)」や「キャッシュを空にして再読み込み」は、ブラウザが保持しているファイルを破棄する操作です。しかし配信元のサーバーやCDNが古いファイルを返している場合、ブラウザ側をいくら綺麗にしても意味がありません。
まず確認すべき症状
以下の症状があれば、この記事のケースに当てはまる可能性があります。
- ローカル(
npm run dev)では正常に動作している - 本番環境(Cloudflare等にデプロイ後)でのみChunkLoadErrorが発生する
- エラーログに
Failed to load chunk server/chunks/ssr/...のような行がある - 再デプロイしても症状が変わらない
最初に試したが効果がなかった対処
詰まっているときは手当たり次第に試してしまうものですよね。私もそうでした。試したがまったく効かなかった対処を正直に書きます。ここが一般的な解説記事と最も差別化されている部分だと思います。
ハードリロード・キャッシュ削除
Ctrl+Shift+R でのハードリロードと、Chromeの設定から「閲覧履歴データの削除」を実施しました。結果は変わらず。前述の通り、原因がブラウザ側にないので当然の結果でした。
.nextフォルダ削除と再ビルド
次に試したのは .next フォルダの削除です。
Remove-Item -Recurse -Force .next
npm run buildビルドは通りました。しかし再デプロイ後も症状は変わりませんでした。
CDNキャッシュのパージ
Cloudflareのダッシュボードからキャッシュのパージも試みました。「すべてをパージ」を選択して実行しましたが、ChunkLoadErrorは解消されませんでした。
再デプロイ
npm run deploy を何度か繰り返しましたが、結果は同じでした。同じビルド環境(Windows)で作ったものをデプロイし続けても、問題の根本が変わらないので当然です。
発生した環境と症状
私が実際に直面したのはどんな状況だったでしょうか。環境と症状を正直に書きます。
Next.jsのバージョンと構成
構成はこのような状態でした。
- Next.js 16.2.4(Turbopack)
- ホスティング:Cloudflare Workers(OpenNextjs経由)
- ビルド環境:Windows 11(PowerShell)
- デプロイコマンド:
npm run deploy(npx @opennextjs/cloudflare build && wrangler deploy)
ローカルでは正常・本番のみエラー
npm run dev でローカル確認したときは完全に正常でした。トップページも記事ページも問題なく表示されていました。しかし npm run deploy で本番環境にデプロイした後、トップページを開くと白画面になり、Cloudflareのログに以下のエラーが流れてきました。
"level": "error",
"message": "⨯ ChunkLoadError: Failed to load chunk server/chunks/ssr/[root-of-the-server]__13i22a4._.js from runtime for chunk server/app/page.js"表示崩れ・白画面の発生
エラーページではなく、ただの白画面でした。コンソールにはChunkLoadErrorのみで、それ以外のヒントはありませんでした。記事ページ(/[slug])は問題なく表示されていたので、トップページ(/)のSSRチャンクに問題が絞り込まれました。
原因を特定するためにやった切り分け
エラーが一向に解消されない中で、正直かなり困りました。一度立ち止まって、エラーログをもう一度じっくり読み返しましたよね。キーになったのはこの部分です。
Failed to load chunk server/chunks/ssr/[root-of-the-server]__13i22a4._.jsserver/chunks/ssr というパスが気になりました。これはSSR(サーバーサイドレンダリング)用のチャンクファイルです。
.open-nextのアセットを確認する
OpenNextjsのビルド結果は .open-next フォルダに生成されます。その中のアセットディレクトリを確認してみました。
Get-ChildItem .open-next\assets\_next\static\chunks\ssr -Recurse | Measure-Object結果は Count: 0 でした。SSRチャンクが0件です。
次に .next フォルダ側を確認しました。
Get-ChildItem .next\server\chunks\ssr -Recurse | Measure-Objectこちらは Count: 90 でした。ビルドは正常に完了しているのに、OpenNextjsがSSRチャンクをアセットフォルダにコピーしていなかったのです。
Cloudflareキャッシュではなくビルドの問題
ここで原因がCDNやブラウザではなく、Windowsビルド環境とOpenNextjsの相性問題であることが確定しました。OpenNextjsの公式ドキュメントにも「WindowsとはOpenNextは完全に互換性がない」という旨の警告が存在します。
WARN OpenNext is not fully compatible with Windows.
WARN For optimal performance, it is recommended to use Windows Subsystem for Linux (WSL).デプロイのたびにこの警告は出ていましたが、動いているように見えたので無視していました。これが原因でした。
実際に効いた解決方法
原因が特定できたので、解決方法はシンプルでした。WSL(Windows Subsystem for Linux)でビルドとデプロイを行うことです。ホッとしました。
WSLを起動してクリーンビルドする
# PowerShellからWSLを起動
wsl
# プロジェクトフォルダに移動
cd /mnt/c/Users/[ユーザー名]/[プロジェクトフォルダ]
# ビルドキャッシュを完全に削除
rm -rf .open-next .next
# 依存関係をLinux用に再インストール
rm -rf node_modules
npm install
# デプロイ実行
npm run deploynode_modules の削除と再インストールが重要です。WindowsとLinuxではネイティブモジュールのバイナリが異なります。Windows用のバイナリのままWSLで動かそうとすると、別のエラーが発生します。
SSRチャンクが正しく生成されているか確認する
デプロイ前に以下で確認できます。
ls .open-next/assets/_next/static/chunks/ssr | wc -l0件であればビルドが正常に完了していません。WSLでの npm install と npm run deploy をやり直してください。
判断基準
- ChunkLoadErrorが本番のみで発生している → ビルド環境を疑う
.open-next/assets/_next/static/chunks/ssrが0件 → WindowsビルドのOpenNextjs問題- WSLで再ビルド後も0件 →
node_modulesを削除してnpm installからやり直す - ローカルでも同じエラーが出る → 別の原因(コードのエラー等)
再発防止のためにやったこと
解決した後、同じ問題が二度と起きないように手順を固定しました。
デプロイはWSLで行うルールを固定する
ローカル確認(npm run dev)はWindowsのPowerShellで行っても問題ありません。しかしビルドとデプロイに関しては必ずWSLで行うというルールを自分の中に作りました。
具体的には以下のコマンドを定型化しています。
# デプロイ手順(WSLで実行)
wsl
cd /mnt/c/Users/[ユーザー名]/[プロジェクトフォルダ]
npm run deployWSLが使えるか事前に確認する
# バージョン確認(WSL2が入っていればOK)
wsl --versionWSLが入っていない場合は Microsoft Store からインストールできます。Windows 10以降であれば追加費用なしで使えます。
作業環境のメモを残す
「デプロイはWSLで」という一行をプロジェクトのREADMEやメモに残しておくことをおすすめします。数ヶ月後に別のPCで作業するときや、他の人が引き継ぐときに同じ問題で詰まらないようにするためです。
まとめ
ChunkLoadErrorがキャッシュクリアで直らない場合の原因と対処法をまとめます。
原因: WindowsでOpenNextjsをビルドするとSSRチャンクが .open-next/assets に正しくコピーされない。
解決: WSLでビルド環境ごと切り替えて node_modules から再インストールし直す。
再発防止: ビルドとデプロイはWSLで行う運用ルールを固定する。
表面のエラーメッセージだけを見ていると「キャッシュの問題」に見えますが、実際はビルド環境とデプロイツールの相性という構造的な問題でした。同じエラーで詰まっている方の参考になれば幸いです。
こうした「表面のエラーではなく構造の問題」は、単発の対処ではなく設計から見直す必要があります。bizinets.bizでは、こうした再現性のある仕組みづくりの判断軸を体系化して公開しています。[判断軸について読む](https://bizinets.biz/judgment-axis/)
WindowsでのデプロイとOpenNextjsの非互換については、[CloudflareデプロイがWindowsだけ失敗して本番が白画面になる原因とWSLで解決した手順](https://bizinets.life/cloudflare-deploy-fail-windows)でSSRチャンクが0件になる仕組みから詳しく解説しています。ChunkLoadErrorの根本原因を構造で理解したい方はあわせて読んでみてください。
環境を整えた後は、GSCのデータをAPIで自動取得してSEO改善のサイクルを回すことが次のステップになります。[Search Console APIでCSV出力する方法【初心者でもコピペで動いた最小コード】](https://bizinets.life/search-console-api-csv-export)では、コマンド1つで検索データを取得できる仕組みの作り方を解説しています。
bizinets.biz
記事を読んで「もっと知りたい」と思ったあなたへ
bizinets.biz では、ビジネスの仕組みづくりを体系的に学べるコンテンツを用意しています。まずは一度、覗いてみてください。
bizinets.biz へ行く →