HTTPステータスコード入門 — 200/301/404/500の意味

HTTPステータスコードは、Webサーバがブラウザやアプリからのリクエストに対して「どう処理したか」を返す3桁の数字です。200(成功)や 404(見つからない)、500(サーバ内部エラー)などが有名ですが、先頭の桁で 5 つのクラスに分かれ、それぞれ意味が体系立っています。本記事ではクラスの読み方から、混同しやすい 301と302401と403404と410 の違い、リダイレクトと SEO の関係までを正確に整理します。

まず結論:ステータスコードは先頭1桁でクラスが決まります1xx=情報、2xx=成功、3xx=リダイレクト、4xx=クライアント側の誤り、5xx=サーバ側の誤り。この 5 分類を押さえれば、初めて見るコードでもおおよその意味が読めます。

1. HTTPステータスコードとは — 3桁と5つのクラス

Webページを開くと、ブラウザはサーバに「このURLをください」というリクエストを送り、サーバはレスポンスを返します。そのレスポンスの先頭には、必ず 3 桁のステータスコードと短い説明文(reason phrase、例:404 Not Found)が付きます。人が読むのは本文(HTML)ですが、ブラウザや検索エンジンのクローラは、まずこの数字を見て「成功したのか・転送されたのか・失敗したのか」を機械的に判断します。

コードは 100599 の範囲にあり、先頭の 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(成功)は、リクエストが正しく受理・処理されたことを表します。

コード名前意味
200OK成功。GET なら本文にリソースが入る、最も一般的な成功応答
201Created新しいリソースを作成した。POST での登録成功などに使う
204No Content成功したが返す本文が無い。削除や設定更新の応答に向く
206Partial Content範囲指定(Range)に応じて一部だけ返した。動画のシークやダウンロード再開で使う

API を設計するときは、「登録できたら 201、本文を返さない更新は 204」のように、意味に合ったコードを選ぶと、呼び出し側が結果を正しく解釈できます。

3. 3xx — リダイレクト(301/302/304/307/308)

3xx(リダイレクト)は「目的のものは別の場所にある、または再取得は不要」というクラスです。特に 301302 は、URL の移転や SEO で頻繁に問題になるため、意味の違いを正確に押さえておく価値があります。

コード名前意味・使いどころ
301Moved Permanently恒久的な移転。検索エンジンは新URLを正規とみなす。サイト移転・URL正規化に使う
302Found一時的な転送。元URLはそのまま残す。キャンペーンや一時的な差し替えに使う
303See Other別URLを GET で見に行かせる。POST 後にページ表示へ切り替える定番(PRG パターン)
304Not Modifiedキャッシュが最新。本文を送らず「変わっていない」と返し通信量を節約する
307Temporary Redirect302 の厳密版。メソッドと本文を変えずに一時転送する
308Permanent Redirect301 の厳密版。メソッドと本文を変えずに恒久転送する
301と302、SEOでの使い分け。URLを恒久的に変える(http→https、末尾スラッシュの統一、ドメイン移転など)ときは 301 を使い、検索エンジンに「新URLへ評価を引き継いで」と伝えます。逆に一時的な差し替えで元URLをインデックスに残したいときは 302 です。恒久的な変更に誤って 302 を使うと、いつまでも古いURLが正規として残ってしまう恐れがあります。
304 は「エラー」ではありません。ブラウザは前回取得時の ETag や更新日時を条件付きリクエスト(If-None-Match / If-Modified-Since)で送り、変化が無ければサーバは 304 Not Modified だけを返します。ブラウザは手元のキャッシュを再利用するため、表示は正常なまま通信量を大きく減らせます。

4. 4xx — クライアントエラー(400/401/403/404/429)

4xxは「リクエストの側に問題がある」ことを表します。URL の打ち間違い、権限不足、送信データの不備など、原因は要求した側にあります。

コード名前意味
400Bad Requestリクエストの形式が不正。壊れたJSON、必須項目の欠落など
401Unauthorized認証が必要(未ログイン/資格情報が無い)。名前に反して「未認証」の意味
403Forbidden認証済みだが権限が無い。ログインしても許可されない
404Not FoundそのURLにリソースが見つからない。原因が一時的か恒久的かは示さない
405Method Not AllowedURLは存在するが、そのメソッド(例:POST)は許可されていない
409Conflict現在の状態と矛盾。編集の競合や重複登録など
410Gone恒久的に削除済み。404 と違い「今後も戻らない」と明示する
422Unprocessable Content形式は正しいが内容が妥当でない。バリデーションエラーで使われる
429Too Many Requestsリクエストが多すぎる。レート制限。Retry-After で再試行時期を伝える
401と403は「認証」と「認可」の違い。401 Unauthorized は「あなたが誰か分からない=ログインして」の意味で、サーバは WWW-Authenticate ヘッダで認証方式を示すべきとされています。403 Forbidden は「誰かは分かるが、その操作は許可されていない」。ログインすれば解決するのが 401、ログインしても解決しないのが 403 と覚えると迷いません。

5. 5xx — サーバエラー(500/502/503/504)

5xxは「リクエストは妥当だが、サーバ側で処理に失敗した」ことを表します。4xx と違い、原因はサーバの不具合・過負荷・上流サービスの障害などにあり、利用者側の操作では直せないことがほとんどです。

コード名前意味
500Internal Server Errorサーバ内部の想定外エラー。原因を特定できない汎用の失敗
501Not Implementedサーバがその機能(メソッド)に未対応
502Bad Gatewayゲートウェイ/プロキシが上流サーバから不正な応答を受け取った
503Service Unavailable一時的に利用不可(過負荷・メンテナンス)。Retry-After を添えられる
504Gateway Timeoutゲートウェイが上流サーバの応答を待ち切れずタイムアウトした

502504 は、ロードバランサや CDN、リバースプロキシを挟んだ構成でよく出ます。「フロントのプロキシは動いているが、その奥のアプリサーバが不正応答(502)/時間内に応答しない(504)」という状況を切り分ける手がかりになります。計画メンテナンス中は、正しく 503 を返して Retry-After を添えると、検索エンジンに「一時的な停止」と正しく伝わり、インデックスからの誤った削除を避けられます。

6. 実務での使い分け — 301 vs 302・404 vs 410

最後に、運用で判断を迷いやすい代表的なケースを整理します。ステータスコードはクローラ向けのメッセージでもあるため、正しく選ぶことが SEO とキャッシュ効率に直結します。

ブラウザの開発者ツール(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、と覚えると区別しやすいです。

← 技術ブログ一覧へ戻る