ネットを見ていると、ときどき「404 Not Found」とか「503 Service Unavailable」とか、英語の数字つきメッセージが出た真っ白な画面に出くわすことがあります。お気に入りのサイトを開いたのにこれが出ると、「壊れちゃったのかな」「自分のスマホがおかしいのかな」と不安になりますよね。私もWeb制作を四半世紀やっていますが、いまだにこの画面が出ると一瞬ドキッとします。
この数字、正体は「HTTPステータスコード」というものです。ものすごくかみ砕いて言うと、あなたが見ようとしたページについて、サーバー(ホームページを置いてあるコンピューター)が返してくる「お返事の番号」です。「ちゃんと表示できたよ=200」「そのページ無いよ=404」「いま混んでるから待ってね=503」といった具合に、状況を3桁の数字で教えてくれているわけです。
この番号の意味さえ知っておくと、エラー画面に出くわしたときに「これは自分側の問題なのか、それともサイト側の問題なのか」「少し待てば直るのか、それとも何かを直さないとダメなのか」の見当がつきます。サイトを運営している側にとっては、トラブルの原因を切り分ける最初の手がかりにもなります。この記事では、よく見かける主要なステータスコードを分類ごとに整理して、それぞれの意味・どんな場面で出るか・どう対処すればいいかを、見る側と運営する側の両方の目線でまとめました。数が多いので、リファレンスとして必要なところだけ拾い読みしてもらってもかまいません。困ったときにここを開けば意味がわかる、そんな一覧を目指して書いています。
そもそもHTTPステータスコードとは?番号の頭で大まかに判別できる
HTTPステータスコードは、ブラウザがサーバーに「このページください」とお願い(リクエスト)したときに、サーバーが結果を知らせるために返す3桁の数字です。ふだんは正常に表示されているので私たちが目にすることはありませんが、何か問題が起きたときにエラー画面として表に出てきます。
便利なのは、先頭の数字(百の位)を見るだけで、おおよその意味がつかめるようになっていることです。MDN Web Docsでは、ステータスコードは次の5つのグループに分類されています。
1xx(情報):処理を継続中、というお知らせ。ふだん目にすることはほぼありません2xx(成功):リクエストは無事に成功した3xx(リダイレクト):別の場所に移動した、または転送が必要4xx(クライアントエラー):リクエストした側、つまりこちら(ブラウザ・URL)の問題5xx(サーバーエラー):受け取ったサーバー側の問題
ざっくり言えば、4で始まれば「こちら側(URLの打ち間違い、権限不足など)」、5で始まれば「サーバー側」の問題と覚えておくだけでも、かなり役に立ちます。たとえば404が出たらURLを見直す、503が出たら時間を置いて待つ、といった次の一手が自然と見えてくるからです。
出典・参考:HTTP レスポンスステータスコード – MDN Web Docs
1xx・2xx:「処理中」と「成功」のお知らせ
まずは正常系から。エラーではないので普段は気にしなくていいグループですが、意味を知っておくと残りの理解が早くなります。
100 Continue(処理を継続)
クライアントが大きなデータを送る前に、サーバーに「このまま続けて送っていい?」と確認したときの「OK、続けて」という返事です。ファイルアップロードなどの裏側で使われるもので、画面に出てくることはまずありません。「こういう番号もあるんだな」程度の認識で十分です。
200 OK(成功)
もっとも基本的で、もっとも目にしているはずなのに、いちばん意識されないコードです。200は「リクエストは成功したよ」という意味で、いまあなたが普通に見られているページは、ほぼすべて裏で200を返しています。エラー画面が出ないのは200が返っている証拠、というわけです。Web制作の現場では、ブラウザの開発者ツール(F12キー)の「ネットワーク」タブを開くと、各ファイルがどのコードを返しているか確認できます。ここがずらりと200で並んでいれば、ひとまず正常です。
3xx:別の場所へ移動(リダイレクト)
ページの引っ越しや、キャッシュ(前に取得したデータの使い回し)に関わるグループです。サイト運営者にとっては避けて通れない、重要なコードが並びます。
301 Moved Permanently(恒久的に移動)
301は「このページは新しいURLに引っ越しました(もう元には戻りません)」という意味です。サイトのURL構成を変えたときや、http→httpsに切り替えたとき、古いURLから新しいURLへ自動で転送するために使います。検索エンジンに対しても「URLが恒久的に変わった」と伝わるため、過去に蓄積した評価(SEO)を新URLへ引き継げるのが大きなポイント。サイトをリニューアルするなら、まず押さえておきたいコードです。
関連記事:【WordPress】301リダイレクトを.htaccessで行う方法と注意点
302 Found(一時的に移動)
こちらは「一時的に別の場所へ移動している」という意味です。期間限定でメンテナンス用ページに飛ばす、といった一時的な転送に使います。301とよく混同されますが、301は「恒久的」、302は「一時的」という違いがあります。引っ越し後ずっとそのURLを使うなら301、すぐ元に戻すつもりなら302と使い分けます。間違えるとSEOの評価がうまく引き継がれないことがあるので、運営者は要注意です。
304 Not Modified(変更なし)
「前に取得したときから中身が変わっていないので、手元のキャッシュをそのまま使ってね」という意味です。画像やCSSなど更新頻度の低いファイルで使われ、毎回ダウンロードし直さずに済むのでページの表示が速くなります。これも正常な動作で、エラーではありません。表示の高速化に一役買ってくれている、縁の下の力持ちのようなコードです。
4xx:こちら側(クライアント)の問題
ここからが、いわゆる「エラー画面」でよく見るグループです。4で始まるコードは、基本的にリクエストした側、つまりURLの打ち間違いやアクセス権限など、こちら側に起因する問題を表します。
400 Bad Request(リクエストが不正)
送られてきたリクエストの形式がおかしくて、サーバーが処理できないときに返ります。URLに不正な文字が混ざっている、壊れたCookieが残っている、といったケースが原因のことが多いです。見る側の対処としては、URLを打ち直す、ブラウザのキャッシュとCookieを削除する、別のブラウザで開いてみる、あたりを試すと直ることがあります。
401 Unauthorized(認証が必要)
パスワード保護がかかったページに、ログインせずにアクセスしたときに出ます。名前は「Unauthorized(権限なし)」ですが、MDNでは意味としては「未認証(まだ本人確認ができていない)」だと説明されています。つまり「あなたが誰なのかまだわからないので、まずログインしてね」という状態です。正しいIDとパスワードを入力すれば通れます。運営側でBasic認証などをかけている場合は、設定ファイルの記述が正しいかを確認します。
403 Forbidden(アクセス禁止)
401と似ていますが、403は「あなたが誰かはわかっているけれど、このページを見る権限がない」という意味です。MDNでも、401は本人確認ができていない状態、403は本人はわかったうえでアクセスを拒否している状態、と区別されています。見る側ではどうにもならないことが多いコードです。運営側では、ファイルのパーミッション(読み書きの権限設定)や、.htaccessによるアクセス制限が意図せず効いていないかを確認します。
404 Not Found(ページが見つからない)
もっとも有名なエラーコードがこれでしょう。404は「指定されたページが見つかりません」という意味です。URLの打ち間違い、ページが削除された、URLが変わったのに古いリンクをたどった、といったときに出ます。見る側はまずURLに誤字がないかを確認。運営側は、そのページを消した・移動したのにリンクが残っていないか、URL構成を変えたのに301リダイレクトを設定し忘れていないかをチェックします。WordPressの場合は、パーマリンク設定を一度保存し直すと直ることもあります。
関連記事:WordPressカスタム投稿タイプが表示されない原因と解決方法【404エラー対処】
405 Method Not Allowed(許可されていない方法)
少し専門的ですが、サーバーがそのリクエストの「やり方(メソッド)」を受け付けていないときに返ります。たとえば、データの送信(POST)にしか対応していない窓口に、ページの取得(GET)でアクセスした、といったミスマッチで起きます。フォームやAPIを自作しているときに遭遇しやすいコードで、見る側というより開発者向けのエラーです。
410 Gone(完全に削除済み)
404とよく似ていますが、410は「このページは完全に削除しました。もう戻ってきません」という、より強い意味を持ちます。404が「今は見つからない(戻ってくるかもしれない)」のに対し、410は「永久に無い」とはっきり宣言するコードです。検索エンジンに「このページはもう不要なのでインデックスから消していい」と明確に伝えたいときに、運営側があえて410を返すことがあります。
418 I’m a teapot(私はティーポット)
こちらは番外編、ジョークのコードです。「コーヒーを淹れてほしい」というリクエストに対して、ティーポットが「私はティーポットなのでコーヒーは淹れられません」と返す、というエイプリルフール由来の冗談で定義されました。実用されることはまずありませんが、有名なネタなので一覧に載せておきます。Web制作者の遊び心が垣間見える、ちょっと和むコードです。
429 Too Many Requests(リクエストが多すぎる)
比較的新しめのコードで、短時間にアクセスを送りすぎたときに「ちょっと多すぎるので少し待って」と返ってくるのがこれです。いわゆるレート制限(アクセス回数の上限)に引っかかった状態で、APIを連続で叩いたときや、同じサイトを高速で何度も再読み込みしたときに出ることがあります。RFC 6585という仕様で2012年に定義されました。この応答にはRetry-Afterというヘッダが付くことがあり、ここに「何秒後に再試行してね」という待ち時間が示されます。見る側の対処はシンプルで、しばらく時間を置いてからアクセスし直すこと。慌てて連打すると、かえって待ち時間が延びることもあります。
出典・参考:429 Too Many Requests – MDN Web Docs / RFC 6585 – Additional HTTP Status Codes
5xx:サーバー側の問題
5で始まるコードは、リクエストを受け取ったサーバー側で問題が起きていることを表します。このグループが出たときは、基本的に見る側にできることは少なく、運営者の対応待ち、もしくは時間を置いて再アクセスになります。
500 Internal Server Error(内部エラー)
500は「サーバー内部で何か想定外のことが起きて、処理できませんでした」という意味の、もっとも一般的なサーバーエラーです。原因は幅広く、プログラム(PHPなど)のミス、設定ファイル(.htaccess)の記述ミス、データベースへの接続失敗などが考えられます。見る側は時間を置いて再アクセスするくらいしかできません。運営側では、.htaccessの記述に誤りがないか、PHPのエラーログに何が出ているか、プラグインやファイルのパーミッションに問題がないかを順に確認していきます。WordPressなら、直前に入れたプラグインを止めてみると原因が切り分けられることが多いです。
502 Bad Gateway(不正なゲートウェイ)
サーバーが別のサーバー(上流サーバー)から正しい応答を受け取れなかったときに出ます。複数のサーバーが連携してサイトを動かしている構成で、その中継地点でトラブルが起きた状態です。一時的なことも多いので、見る側はまず時間を置いて再読み込み。運営側では、サーバーやアプリケーションが落ちていないか、サーバー会社側で障害が起きていないかを確認します。
503 Service Unavailable(一時的に利用不可)
503は「いまサーバーが対応できる状態にない」という意味で、アクセス集中やメンテナンス中によく出ます。テレビで紹介された直後にお店のサイトが見られない、といった「混雑による503」は典型例です。Retry-Afterヘッダで再試行までの目安時間が示されることもあります。見る側は時間を置いて再アクセス。運営側では、メンテナンスが終わっているか、アクセス集中ならサーバーのプランやスペックが見合っているか、不要な負荷をかけている処理がないかなどを見直します。
504 Gateway Timeout(ゲートウェイタイムアウト)
502と似ていますが、504は「上流のサーバーからの応答が時間内に返ってこなかった」という、タイムアウト(時間切れ)を表すコードです。重い処理に時間がかかりすぎている、上流サーバーの反応が遅い、といったときに出ます。見る側は時間を置いて再試行。運営側では、処理が重すぎないか、サーバーのタイムアウト設定や負荷の状況を確認します。
出典・参考:HTTP レスポンスステータスコード – MDN Web Docs
まとめ:番号の意味がわかれば慌てなくて済む
HTTPステータスコードは、サーバーから返ってくる「お返事の番号」です。たくさんあるように見えても、先頭の数字で大まかに判別できるのがポイントで、2xxは成功、3xxは移動、4xxはこちら側の問題、5xxはサーバー側の問題、と押さえておけば十分実用になります。
見る側として覚えておくと便利なのは、404が出たらURLの打ち間違いを疑う、403はアクセス権限の問題なので基本は運営者待ち、429や503が出たら少し時間を置いてから開き直す、あたりです。番号の意味さえわかっていれば、真っ白なエラー画面が出ても「ああ、これは混んでるだけだな」と落ち着いて対処できます。
サイトを運営している側にとっては、これらのコードはトラブルの原因を切り分ける最初の手がかりになります。4xxなら自分のリンクやURL設定を、5xxならサーバーやプログラムを疑う、という当たりがつくだけで、調査のスピードがまるで違ってきます。私自身、サイトの不調を調べるときは、まず開発者ツールでどのコードが返っているかを確認するところから始めます。原因を勘で探すより、ずっと近道です。
すべてを暗記する必要はありません。困ったときにこのページを開いて、出ている番号を照らし合わせれば大丈夫です。リファレンスとして手元に置いておけば、いざというときの心強い味方になります。同じようにエラー画面に戸惑った経験のある方の助けになればうれしいです。