0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Next.jsのSSGデプロイで503が大量に発生した話

Last updated at Posted at 2025-12-19

起きたこと

Next.js(SSG)で構築したサイトをバージョンアップしてレンタルサーバー環境にデプロイしたあと、次のような現象が起きました。

  • 通常のリロードでは問題なく表示される

  • シークレットウィンドウでも問題なし

  • しかし Cmd + Shift + R(スーパーリロード)をすると

    • コンソールに 503エラーが数十件表示される

    • フォントや画像が読み込まれず、ページが一部表示されなくなる

サーバーは、
ロリポップのレンタルサーバー(スタンダードプラン)
を使用していました。

エラーが出ていたのは主に次のようなパスです。

/_next/static/media/*.woff2

いずれも Next.js が SSG ビルドで生成した静的ファイルでした。

結論

原因は Next.js やコードの不具合ではなく、
サーバー側のキャッシュを無効化していたことでした。

スーパーリロードではブラウザキャッシュが無視され、
Next.js が生成した大量の静的アセットを 一斉に取得します。

その際、キャッシュ層を通らず オリジンサーバに直接アクセスが集中し、
サーバーが耐えきれず 503(Service Unavailable)を返していました。

サーバ側キャッシュ(ロリポップ!アクセラレータ)を ON にしたところ、
503エラーは完全に解消しました。

503はコードエラーではない

503(Service Unavailable)は、

「サーバは存在するが、今は処理できない」

という意味です。

今回503になっていたのは API や HTML ではなく、
/_next/static/* 配下の 静的ファイルでした。

つまり、

  • ファイルが存在しない(404)わけではない

  • アプリケーションエラーでもない

    サーバの一時的な過負荷や制限

が原因です。

実際、同じURLを curl で以下のように単発取得すると常に 200 が返りました。

curl -I https://test.com/_next/static/media/0123456789abcde-s.p.123c456b.woff2

なぜスーパーリロードでだけ503が出るのか

通常リロード

  • ブラウザキャッシュを利用

  • すでに取得済みの JS / CSS / フォントは再取得しない

  • サーバへの負荷が低い

スーパーリロード(Cmd + Shift + R)

  • ブラウザキャッシュを完全に無視

  • JS / CSS / 画像 / フォントを 同時に大量取得

  • Cache-Control: no-cache が付与される

つまりスーパーリロードは、

「キャッシュなし初回アクセスを、最大並列で叩く操作」

になります。

Next.js(SSG)はキャッシュ前提で設計されている

Next.js の SSG が出力する静的アセットには、重要な特徴があります。

ファイル名にハッシュが付く

例:

90d33ae700474423-s.23b6629a.woff2
180c9ce3ba6f4bb0.css
  • 中身が変わるとファイル名が変わる

  • 古いキャッシュが残っても問題にならない

  • キャッシュ更新は自動

つまり Next.js の SSG は、

静的アセットを強くキャッシュする前提

で設計されています。

今回の原因

本番環境では ロリポップ!アクセラレータ(サーバキャッシュ)を OFF にしていました。

その結果、

  1. スーパーリロードで大量の静的ファイルを同時取得

  2. すべてオリジンサーバに直接到達

  3. 瞬間的に処理しきれない

  4. 一部リクエストを 503 で間引く

  5. フォントや画像が一部読み込まれない

という挙動になっていました。

解決策

ロリポップ!アクセラレータを ON(初期設定)に変更

これだけで、

  • スーパーリロード時の 503 → 0

  • フォント・画像欠落 → 解消

  • ページ表示 → 安定

しました。

※ 拡張子限定モードでは woff2 が対象外になる可能性があるため、
Next.js(SSG)では 初期設定 が無難です。

まとめ

  • 大量の503は コードのバグではなかった

  • 原因は キャッシュなしでの大量静的取得

  • Next.js SSGは キャッシュ前提の設計

  • サーバ側キャッシュを有効にして解決

参考

採用拡大中!

アシストエンジニアリングでは一緒に働くフロントエンド、バックエンドのエンジニア仲間を募集しています!
少しでも興味ある方は、カジュアル面談からでもぜひお気軽にお話ししましょう!

お問い合わせはこちらから↓
https://official.assisteng.co.jp/contact/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?