HTTPステータスコードは、Webサーバがブラウザやアプリからのリクエストに対して「どう処理したか」を返す3桁の数字です。200(成功)や 404(見つからない)、500(サーバ内部エラー)などが有名ですが、先頭の桁で 5 つのクラスに分かれ、それぞれ意味が体系立っています。本記事ではクラスの読み方から、混同しやすい 301と302・401と403・404と410 の違い、リダイレクトと SEO の関係までを正確に整理します。
1xx=情報、2xx=成功、3xx=リダイレクト、4xx=クライアント側の誤り、5xx=サーバ側の誤り。この 5 分類を押さえれば、初めて見るコードでもおおよその意味が読めます。
1. HTTPステータスコードとは — 3桁と5つのクラス
Webページを開くと、ブラウザはサーバに「このURLをください」というリクエストを送り、サーバはレスポンスを返します。そのレスポンスの先頭には、必ず 3 桁のステータスコードと短い説明文(reason phrase、例:404 Not Found)が付きます。人が読むのは本文(HTML)ですが、ブラウザや検索エンジンのクローラは、まずこの数字を見て「成功したのか・転送されたのか・失敗したのか」を機械的に判断します。
コードは 100〜599 の範囲にあり、先頭の 1 桁がクラスを表します。
| クラス | 意味 | 代表例 |
|---|---|---|
| 1xx | 情報(処理を継続中) | 100 Continue, 101 Switching Protocols |
| 2xx | 成功 | 200 OK, 201 Created, 204 No Content |
| 3xx | リダイレクト(追加動作が必要) | 301, 302, 304, 307, 308 |
| 4xx | クライアントエラー(要求側の誤り) | 400, 401, 403, 404, 429 |
| 5xx | サーバエラー(サーバ側の誤り) | 500, 502, 503, 504 |
これらは RFC 9110(HTTP Semantics、従来の RFC 7231 等を統合した現行仕様)で定義されています。コードは拡張可能で、独自の数字を勝手に増やすことはできませんが、クライアントは知らないコードでも先頭桁のクラスとして扱うよう決められています(例:未知の 499 は 4xx=クライアントエラーとして扱う)。
2. 1xx・2xx — 情報レスポンスと成功
1xx(情報)は「リクエストは受け取った、処理を続けている」という中間的な通知で、最終的な結果ではありません。日常のWeb閲覧で目にすることはほとんどありませんが、101 Switching Protocols は HTTP から WebSocket へ切り替える際に使われる重要なコードです。
2xx(成功)は、リクエストが正しく受理・処理されたことを表します。
| コード | 名前 | 意味 |
|---|---|---|
| 200 | OK | 成功。GET なら本文にリソースが入る、最も一般的な成功応答 |
| 201 | Created | 新しいリソースを作成した。POST での登録成功などに使う |
| 204 | No Content | 成功したが返す本文が無い。削除や設定更新の応答に向く |
| 206 | Partial Content | 範囲指定(Range)に応じて一部だけ返した。動画のシークやダウンロード再開で使う |
API を設計するときは、「登録できたら 201、本文を返さない更新は 204」のように、意味に合ったコードを選ぶと、呼び出し側が結果を正しく解釈できます。
3. 3xx — リダイレクト(301/302/304/307/308)
3xx(リダイレクト)は「目的のものは別の場所にある、または再取得は不要」というクラスです。特に 301 と 302 は、URL の移転や SEO で頻繁に問題になるため、意味の違いを正確に押さえておく価値があります。
| コード | 名前 | 意味・使いどころ |
|---|---|---|
| 301 | Moved Permanently | 恒久的な移転。検索エンジンは新URLを正規とみなす。サイト移転・URL正規化に使う |
| 302 | Found | 一時的な転送。元URLはそのまま残す。キャンペーンや一時的な差し替えに使う |
| 303 | See Other | 別URLを GET で見に行かせる。POST 後にページ表示へ切り替える定番(PRG パターン) |
| 304 | Not Modified | キャッシュが最新。本文を送らず「変わっていない」と返し通信量を節約する |
| 307 | Temporary Redirect | 302 の厳密版。メソッドと本文を変えずに一時転送する |
| 308 | Permanent Redirect | 301 の厳密版。メソッドと本文を変えずに恒久転送する |
ETag や更新日時を条件付きリクエスト(If-None-Match / If-Modified-Since)で送り、変化が無ければサーバは 304 Not Modified だけを返します。ブラウザは手元のキャッシュを再利用するため、表示は正常なまま通信量を大きく減らせます。
4. 4xx — クライアントエラー(400/401/403/404/429)
4xxは「リクエストの側に問題がある」ことを表します。URL の打ち間違い、権限不足、送信データの不備など、原因は要求した側にあります。
| コード | 名前 | 意味 |
|---|---|---|
| 400 | Bad Request | リクエストの形式が不正。壊れたJSON、必須項目の欠落など |
| 401 | Unauthorized | 認証が必要(未ログイン/資格情報が無い)。名前に反して「未認証」の意味 |
| 403 | Forbidden | 認証済みだが権限が無い。ログインしても許可されない |
| 404 | Not Found | そのURLにリソースが見つからない。原因が一時的か恒久的かは示さない |
| 405 | Method Not Allowed | URLは存在するが、そのメソッド(例:POST)は許可されていない |
| 409 | Conflict | 現在の状態と矛盾。編集の競合や重複登録など |
| 410 | Gone | 恒久的に削除済み。404 と違い「今後も戻らない」と明示する |
| 422 | Unprocessable Content | 形式は正しいが内容が妥当でない。バリデーションエラーで使われる |
| 429 | Too Many Requests | リクエストが多すぎる。レート制限。Retry-After で再試行時期を伝える |
401 Unauthorized は「あなたが誰か分からない=ログインして」の意味で、サーバは WWW-Authenticate ヘッダで認証方式を示すべきとされています。403 Forbidden は「誰かは分かるが、その操作は許可されていない」。ログインすれば解決するのが 401、ログインしても解決しないのが 403 と覚えると迷いません。
5. 5xx — サーバエラー(500/502/503/504)
5xxは「リクエストは妥当だが、サーバ側で処理に失敗した」ことを表します。4xx と違い、原因はサーバの不具合・過負荷・上流サービスの障害などにあり、利用者側の操作では直せないことがほとんどです。
| コード | 名前 | 意味 |
|---|---|---|
| 500 | Internal Server Error | サーバ内部の想定外エラー。原因を特定できない汎用の失敗 |
| 501 | Not Implemented | サーバがその機能(メソッド)に未対応 |
| 502 | Bad Gateway | ゲートウェイ/プロキシが上流サーバから不正な応答を受け取った |
| 503 | Service Unavailable | 一時的に利用不可(過負荷・メンテナンス)。Retry-After を添えられる |
| 504 | Gateway Timeout | ゲートウェイが上流サーバの応答を待ち切れずタイムアウトした |
502 と 504 は、ロードバランサや CDN、リバースプロキシを挟んだ構成でよく出ます。「フロントのプロキシは動いているが、その奥のアプリサーバが不正応答(502)/時間内に応答しない(504)」という状況を切り分ける手がかりになります。計画メンテナンス中は、正しく 503 を返して Retry-After を添えると、検索エンジンに「一時的な停止」と正しく伝わり、インデックスからの誤った削除を避けられます。
6. 実務での使い分け — 301 vs 302・404 vs 410
最後に、運用で判断を迷いやすい代表的なケースを整理します。ステータスコードはクローラ向けのメッセージでもあるため、正しく選ぶことが SEO とキャッシュ効率に直結します。
- URLを恒久的に変える:
301(またはメソッド保持が必要なら308)。評価が新URLへ引き継がれます。 - 一時的に別ページを見せる:
302/307。元URLはインデックスに残ります。 - ページを完全に廃止し移転先も無い:
410。404より早くインデックスから外れます。 - 存在するが今は出せない:メンテナンスなら
503+Retry-After。恒久削除の410や単なる404と混同しないこと。 - アクセス過多を制御:
429+Retry-After。クライアントに再試行の間隔を伝えます。
ブラウザの開発者ツール(Network タブ)を開けば、各リクエストのステータスコードを実際に確認できます。想定と違うコードが返っていないか(例:本来 301 にしたい転送が 302 になっている、削除済みページが 200 を返している)を点検すると、SEO やキャッシュの取りこぼしに早く気づけます。
Free Tool HTTP Status Codes 一覧ツールで調べる コードや名前で検索して、各ステータスコードの意味とクラスをすばやく確認できます。ブラウザ内で完結し、登録不要です。よくある質問(FAQ)
301と302の違いは何ですか?
301 Moved Permanently は「恒久的に移転した」ことを表し、ブラウザや検索エンジンは新しいURLを正規とみなしてブックマークやインデックスを更新します。302 Found は「一時的に別の場所を返す」ことを表し、元のURLを残したまま一時的に転送するときに使います。SEO上、恒久的なURL変更(サイト移転・URL正規化)には必ず301を使い、キャンペーンやメンテナンス中の暫定転送には302を使い分けます。301と302はいずれも本来メソッドを変えないのが原則ですが、歴史的にPOSTがGETに変わる実装が多く、メソッドを保持したい場合は308(恒久)や307(一時)を使うのが確実です。
404と410の違いは何ですか?
404 Not Found は「そのURLに現在リソースが見つからない」ことを表し、原因が一時的か恒久的かは示しません。410 Gone は「そのリソースは恒久的に削除され、今後も戻らない」ことを明示します。検索エンジンは410を受け取ると、404よりも早くインデックスから削除する傾向があります。ページを完全に廃止し、移転先も無い場合は410を返すと、クロール資源の無駄や古いURLの残存を減らせます。
401と403の違いは何ですか?
401 Unauthorized は「認証が必要(あなたが誰か分からない、またはログインしていない)」ことを表し、サーバは WWW-Authenticate ヘッダで認証方式を示すべきとされています。403 Forbidden は「認証は済んでいるが、その操作は許可されていない(誰かは分かるが権限が無い)」ことを表します。ログインすれば解決するのが401、ログインしても解決しないのが403、と覚えると区別しやすいです。