HTTP ステータスコード完全ガイド|よくあるエラーの原因と対処法
API を開発していて 422 が返ってきた。本番で突然 502 が出始めた。リダイレクトが 301 なのか 302 なのかで SEO への影響が変わる。HTTP ステータスコードは Web 開発の共通言語であり、正しく理解することがトラブルシューティングの第一歩です。
ステータスコードの 5 つのカテゴリ
| レンジ | カテゴリ | 意味 |
|---|---|---|
| 1xx | Informational | リクエストを受信し処理中 |
| 2xx | Success | リクエスト成功 |
| 3xx | Redirection | 追加アクションが必要 (リダイレクト) |
| 4xx | Client Error | クライアント側の問題 |
| 5xx | Server Error | サーバー側の問題 |
開発者が最もよく遭遇するコード
200 OK — 成功
最も基本的な成功レスポンス。API が期待通りに動いている。
301 Moved Permanently — 永続リダイレクト
URL が恒久的に変わった場合に使う。SEO 上、旧 URL の評価が新 URL に引き継がれるため、サイト移転やHTTPS化で必須。Google は 301 を「シグナルの転送」として扱う。
よくある問題: 301 のつもりで 302 を返しているケース。Apache の Redirect はデフォルト 302。Redirect 301 と明示する。
302 Found — 一時リダイレクト
一時的な転送。A/B テストやメンテナンス中の迂回に使う。SEO 評価は転送されない。
304 Not Modified — キャッシュ有効
ブラウザが If-Modified-Since や If-None-Match ヘッダで条件付きリクエストを送った結果、リソースが変わっていない場合に返す。ボディは送信されないため帯域を節約できる。
400 Bad Request — リクエスト不正
サーバーがリクエストを解析できない。原因: 不正な JSON、必須パラメータ欠落、Content-Type 不一致。
# よくあるミス: Content-Type を指定していない
curl -X POST https://api.example.com/users -d '{"name":"Alice"}'
# → 400 (Content-Type: application/json が必要)
# 正しい
curl -X POST https://api.example.com/users \
-H 'Content-Type: application/json' \
-d '{"name":"Alice"}'
401 Unauthorized — 認証必要
認証情報が無いか無効。Bearer トークンの期限切れ、API Key の誤り。
403 Forbidden — アクセス拒否
認証は通ったが権限が無い。管理者専用エンドポイントに一般ユーザーがアクセスした場合など。401 との違いは「認証の有無」vs「権限の有無」。
404 Not Found — リソースなし
最も有名なエラー。URL のタイプミス、削除されたページ、ルーティング設定ミス。SEO 上は 410 Gone で「意図的に削除した」と示す方が望ましいケースもある。
413 Payload Too Large — サイズ超過
ファイルアップロードで頻出。Nginx の client_max_body_size (デフォルト 1MB)、PHP の upload_max_filesize、API Gateway の制限を確認。
422 Unprocessable Entity — バリデーションエラー
JSON の構文は正しいがビジネスロジック上不正 (メールアドレスの形式が不正、必須フィールドの値が空、など)。REST API のバリデーションエラーはこれを返すのが主流。
429 Too Many Requests — レート制限
短時間にリクエストを送りすぎた。Retry-After ヘッダに待つべき秒数が示される。対策: 指数バックオフ (exponential backoff) を実装。
500 Internal Server Error — サーバー内部エラー
未処理の例外、NULL 参照、設定ファイルの誤り。最も危険なエラー。サーバーログを必ず確認。
502 Bad Gateway — 上流サーバー異常
リバースプロキシ (Nginx) が上流の PHP-FPM / Node.js / Python WSGI に接続できないか不正な応答を受けた。上流プロセスの再起動、メモリ不足、ソケット接続のタイムアウトを確認。
503 Service Unavailable — サービス一時停止
メンテナンス中や過負荷。Retry-After ヘッダを付けてクライアントに待機を伝える。
504 Gateway Timeout — 上流タイムアウト
上流サーバーが時間内に応答しなかった。重い DB クエリ、外部 API の遅延。Nginx の proxy_read_timeout を確認。
DevLab のステータスコード検索ツール
HTTP ステータスコード検索ツール では、コード番号やキーワード (例: "redirect", "forbidden", "timeout") で即座に検索でき、各コードの意味・原因・対処法を一覧で確認できます。ブラウザ完結で登録不要。
関連ツール: HTTP ヘッダー検証、リダイレクトチェーン追跡、セキュリティ診断。
まとめ
HTTP ステータスコードはサーバーとクライアントの共通言語。特に 301 vs 302 の SEO 影響、400 vs 422 のバリデーション使い分け、500 系のインフラ診断は頻出知識です。困ったらまずステータスコードを確認し、上記の対処法を当てはめてください。