HTTPステータスコードは、ウェブページに追加されるサーバーからの短いメモのようなもの。これは実際にはサイトのコンテンツの一部ではなく、サーバーからのメッセージであり、特定のページを表示するリクエストを受信したときの状況を知らせてくれます。
このようなメッセージは、ブラウザがサーバーとやり取りするたびに(たとえあなたが目にすることがなくても)返されます。ウェブサイト所有者、開発者であれば、HTTPステータスコードの意味を理解することが重要です。HTTPステータスコードは、表示されたとき、ウェブサイトの構成エラーを診断、修正するための貴重なツールとなります。
今回の記事では、いくつかのサーバーステータスとエラーコードを扱い、それらが意味するところ(つまり、サーバーで何が起きているか)についてご説明します。
それでは、早速始めましょう!
HTTPステータスコードとは?
リンクをクリックするか、URLを入力してEnterキーを押すたびに、ブラウザーはアクセスしようとしているサイトのウェブサーバーにリクエストを送信します。サーバーはリクエストを受信、処理し、関連するリソースをHTTPヘッダーとともに送り返します。
HTTPステータスコードは、HTTPヘッダー内でブラウザに配信されます。ブラウザがウェブページまたはリソースを要求するたびにステータスコードが返されますが、ほとんどの場合、それは表示されません。
これは、通常、何か問題が発生した場合にのみ、ブラウザに表示されます。これはサーバーからのメッセージで「問題が発生しました。状況を説明するコードがこちらです」といった具合です。
ブラウザに通常表示されないステータスコードを表示した場合には、さまざまなツールを使用して簡単に確認できます。ブラウザ拡張機能は、ChromeやFirefoxなどの開発者向けのプラットフォームで利用できます。また、Web Snifferなどウェブベースのヘッダー取得ツールは多数あります。
このようなツールのいずれかを使用してHTTPステータスコードを確認するには、レポート上部の「Status: HTTP/1.1」という行を探します。この後に、サーバーから返されたステータスコードが続きます。
HTTPステータスコードのクラス
HTTPステータスコードは5つの「クラス」に分かれています。類似または関連する意味を持つレスポンスがグループ化されています。これを知っておくと、特定の意味を調べる前に、ステータスコードの一般的な内容をすばやく判断できて便利です。
5つのクラスは次のとおりです。
- 100番台:ブラウザによって開始されたリクエストが継続していることを示す情報コードです。
- 200番台:ブラウザの要求がサーバーによって受信、理解、処理されたときに返されるコードです。
- 300番台:要求されたリソースの代わりに新しいリソースが使用されると、リダイレクトを意味するコードが返されます。
- 400番台:リクエストに問題があったことを示す、クライアント側のエラーコードです。
- 500番台:リクエストが受け入れられたものの、サーバー上のエラーによりリクエストの履行が妨げられたことを意味するサーバー側のエラーコードです。
これらの各クラス内には、さまざまなサーバーコードが存在し、状況に応じてサーバーにより返されます。個々のコードには、それぞれ固有の意味があります。これについては、後述の細かなリストでご紹介します。
検索エンジン最適化(SEO)においてHTTPステータスコードとエラーが重要な理由
検索エンジンボットは、サイトのクロール中にHTTPステータスコードを確認します。場合によっては、このメッセージは、ページがインデックスに登録されるかどうか、どのように登録されるか、そして検索エンジンがサイトの正常性を認識する方法に影響を与える可能性があります。
一般的に、100番台と200番台のHTTPステータスコードは、SEOにはあまり影響しません。これらはすべて、サイトが正常に機能していることを知らせるもので、検索エンジンボットが通常通りの仕事をこなします。ですので、ランキングを上げることもありません。
ほとんどの場合、SEOにとって重要なのは400番台と500番台のコードです。これらは、ボットによるページのクロールとインデックス登録の邪魔をしてしまうことがあります。このようなエラーが多すぎると、サイトの質が低いとみなされ、ランキングが低下する可能性があります。
300番台のコードは、SEOともう少し複雑な関係にあります。その影響を理解するために知っておきたいのが、恒久的なリダイレクトと一時的なリダイレクトの違いです。これについては、以下の関連セクションで詳しく説明します。
ただし、簡単に言えば、恒久的なリダイレクトでは、元のリンクからのメリット(つまり、URLの評価)を共有しますが、一時的なリダイレクトはそうではありません。つまり、URLを変更した際に一時的なリダイレクトを使用すると、それまでのすべてのリンク獲得によるSEOの強みが失われてしまいます。
Google Search ConsoleでHTTPステータスコードを確認する
GoogleがサイトでどのようなHTTPステータスコードを認識しているか監視する方法として、Google Search Consoleが利用できます。カバレッジレポートで、300番台、400番台、500番台のステータスコードが確認できます。
ダッシュボードのこの領域には、サイト上の4つのタイプのコンテンツが表示されます。
- エラーを返したページ
- 警告がある有効なページ
- 有効なリソース
- インデックスから除外されたコンテンツ
コードの種類に応じて、「除外」、「エラー」、「有効(警告あり)」セクションの下に、300番台、400番台、500番台のHTTPステータスコードのページが表示されます。たとえば、「除外」ページのところに「ページにリダイレクトがあります」として301リダイレクトが表示されるなど。
400番台、500番台のステータスコードは、「エラー」の下に表示される可能性があります。
HTTPステータスコードを表示する別の方法は、「URL検査」ツールを使用すること。エラーのせいでGoogleが特定のページをインデックスに登録できない場合、次のように表示されます。
Google Search Consoleの使用に関するその他のヒントについては、 当プラットフォームの包括的なガイドを執筆しましたのでご覧ください。
HTTPステータスコード完全ガイドと一覧
40を超えるサーバーステータスコードがありますが、定期的に発生するのはおそらく12未満でしょう。以下では、一般的なコードと、さらに、遭遇する可能性のある意味の理解しづらいコードについてご説明します。
100番台のステータスコード
100番台のステータスコードは、サーバーに行ったリクエストが何らかの理由でまだ進行中であることを示しています。これは必ずしも問題ではなく、何が起こっているかを知らせるための情報提供です。
- 100:Continue/継続 — これは、サーバーがブラウザのリクエストヘッダーを受信し、リクエスト本文を受け取る準備ができたことを意味します。これにより、ヘッダーが拒否された場合にブラウザが本文リクエストを送信できなくなり、リクエストのプロセスがより効率的になります。
- 101:Switching protocols/プロトコルの切り替え — ブラウザがサーバーにプロトコルの変更を要求し、サーバーがそれに準拠したことを意味します。
- 103:Early hints/早期のヒント — サーバーの残りのレスポンスの準備が整う前に、先にいくつかのレスポンスヘッダーが返されます。
200番台のステータスコード
これは、受信して嬉しいHTTPステータスコードです。200番台のレスポンスは、すべてが正常に機能していることを意味します。
- 200:OK/成功 — これは、ウェブページまたはリソースが期待どおりに動作するときに配信されるコードです。
- 201:Created/作成 — サーバーがブラウザのリクエストを満たし、その結果、新しいリソースを作成したことを意味します。
- 202:Accepted/受理 — サーバーがブラウザのリクエストを受け入れ、処理を行なっている状態です。リクエストは最終的に、レスポンスの完了につながる場合とそうでない場合があります。
- 203:Non-Authoritative Information/信頼できない情報 — このステータスコードは、プロキシの使用中に表示されることがあります。これは、プロキシサーバーがオリジンサーバーから200 OKステータスコードを受信したものの、ブラウザに渡す前にレスポンスを変更したことを意味します。
- 204:No Content/内容なし — このコードは、サーバーがリクエストを正常に処理したものの、返すべきコンテンツが存在しないことを意味します。
- 205:Reset Content/内容のリセット — 204のように、サーバーがリクエストを処理したもののコンテンツを返さない状態です。ただし、ブラウザの画面を初期化する必要もあります。
- 206:Partial Content/部分的内容 — HTTPクライアント(ブラウザとも呼ばれる)がRangeヘッダーを使用している場合、このステータスコードが表示されることがあります。これにより、ブラウザは一時停止したダウンロードを再開できるだけでなく、ダウンロードを複数のまとまりに分割できます。Rangeヘッダーにより、サーバーが要求されたリソースの一部のみを送信する場合、206コードが返されます。
300番台のステータスコード
リダイレクトは、リソースが新しい場所に移動されたことを伝えるために使用されるプロセスです。訪問者に対して、それが探しているコンテンツの場所に関する情報を提供するために、リダイレクトに伴う特定のHTTPステータスコードが使用されます。
- 300:Multiple Choices/複数の選択 — ブラウザのリクエストを満たすためにサーバーが応答できるリソースが複数ある場合があります。300ステータスコードは、ブラウザがその中からいずれかを選択する必要があることを意味します。これは、使用可能なファイルの拡張子が複数ある場合、またはサーバーで単語の意味が曖昧になっている時に発生する可能性があります。
- 301: Moved Permanently/恒久的に移動 — 要求されたリソースが恒久的に移動されたことを意味します。このコードは、ウェブページまたはリソースが別のリソースに恒久的に置き換えられているときに返されます。恒久的なURLリダイレクトに使用されます。
- 302: Found/発見 — 要求されたリソースは移動したものの見つかったという状態を意味します。このコードは、要求されたリソースが予想された場所ではなく、別の場所で見つかったことを示すために使用されます。一時的なURLリダイレクトに使用されます。
- 303: See Other/他を参照せよ — 303ステータスコードを理解するには、4つの主要なHTTPリクエストメソッドの違いを知っている必要があります。基本的に、303コードは、ブラウザがPOST、PUT、またはDELETEを介して、リクエストされたリソースを見つけたことをブラウザに伝えます。ただし、GETを利用するには、以前に使用したものとは異なるURLに適切なリクエストを行う必要があります。
- 304:Not Modified/未更新 — 要求されたリソースが、最後にアクセスしてから変更されていないことを意味します。このコードは、ブラウザキャッシュに保存されているリソースが変更されていないことをブラウザに通知します。以前にダウンロードしたリソースを再利用し、ページの配信を高速化するのに使用されます。
- 307: Temporary Redirect/一時的リダイレクト — このステータスコードは、リソースが一時的に別のURLに移動されたときの適切な使用法として、302 Foundを再定義するかたちで導入されました。302ステータスコードとは異なり、HTTPメソッドを変更することはできません。
- 308: Permanent Redirect/恒久的リダイレクト — 308ステータスコードは、「301 恒久的に移動」コードを継承するかたちで誕生しました。HTTPメソッドの変更を許可せず、要求されたリソースが新しいURLに永続的に移動されたことを示します。
400番台のステータスコード
400番台のHTTPステータスコードは問題を意味します。ここにあるものは、ブラウザやリクエストに障害があることを示すエラーコードです。
- 400: Bad Request/不正 — サーバーが、クライアント側のエラーのためにレスポンスを返すことができない状態を意味します。このエラーの解決方法については、専用のガイドをご覧ください。
- 401: Unauthorizedまたはauthorization required/認証が必要 — ターゲットリソースに有効な認証資格情報がない場合、これがサーバーから返されます。htpasswdを使用して基本的なHTTP認証を設定した時に表示されることがあります。
- 402: Payment Required/支払いが必要 — もともと、このコードはデジタルキャッシュシステムの一部として使用するために作成されましたが、その計画は実を結びませんでした。代わりに、主に必要な資金が不足しているためにリクエストを処理できないことを示すために、さまざまなプラットフォームで使用されています。一般的な例は次のとおりです。
- Google Developers APIで1日のリクエスト制限に達したとき
- Shopifyの料金を支払っておらず、ストアが一時的に無効になったとき
- Stripe経由の支払いが失敗したか、Stripeが不正な支払いを防止しようとしているとき
- 403:Forbidden/拒否 — リソースへのアクセスが禁止されていることを意味します。このコードは、ユーザーが表示する権限のないものにアクセスしようとしたときに返されます。たとえば、ログインせずにパスワードで保護されたコンテンツにアクセスしようとすると、403エラーが発生する場合があります。
- 404:Not Found/未検出 — 要求されたリソースが見つかりませんでした、という意味の、最も一般的なエラーメッセージです。このコードは、 要求されたリソースが存在しないことを意味し、サーバーはそれがかつて存在したかどうかすら知りません。
- 405: Method not allowed/未許可のメソッド — メソッドが許可されていないことを意味します。これは、レンタルサーバー(オリジンサーバー)が受信したメソッドをサポートしているものの、ターゲットリソースがサポートしていない場合に返されます。
- 406: Not acceptable response/受理不可 — 要求されたリソースが(リクエストで送信されたAcceptヘッダーに照らし合わせ)受け入れられないコンテンツしか生成できないことを意味します。
- 407: Proxy Authentication Required/プロキシ認証が必要 — プロキシサーバーが使用されており、続行する前にブラウザがそれ自身の認証をする必要があることを意味します。
- 408:Request Timeout/タイムアウト — サーバーが、ブラウザからの残りのリクエストを待機してタイムアウトになったことを意味します。このコードは、ブラウザからの完全なリクエストを待っている間にサーバーがタイムアウトすると返されます。つまり、サーバーは、ブラウザから送信された完全なリクエストを取得できなかったことになります。考えられる原因の1つは、ブラウザとサーバー間のデータパケットの損失をもたらすネットワーク輻輳です。
- 409: Conflict/競合 — 409ステータスコードは、関連するリソースと競合しているため、サーバーがブラウザのリクエストを処理できなかったことを意味します。これは、複数の同時編集が原因で発生する場合があります。
- 410: Gone/消滅 — 要求されたリソースがなくなっており、消滅している状態を指します。これは「404 Not Found」コードに似ていますが、410は永続的であり二度と復活しないものであることを意味します。
- 411: Length Required/長さが必要 — 要求されたリソースでクライアントが特定の長さを指定する必要があるものの、それが指定されていない、という状況で返されます。
- 412: Precondition Failed/前提条件が失敗 — ブラウザのリクエストヘッダーに特定の条件が含まれており、サーバーがその仕様を満たしていないことを意味します。
- 413: Payload Too LargeまたはRequest Entity Too Large/ペイロード過大 — リクエストの大きさが、サーバーが処理しようとする、または処理できる範囲を超えている場合に返されます。
- 414: URI Too Long/URLが長すぎる — これは通常、サーバーが処理できないほど大きなクエリ文字列としてエンコードされたGETリクエストに対する結果として表示されます。
- 415: Unsupported Media Type/サポートされていないメディアタイプ — サーバーまたはリソースがリクエストされたメディアタイプをサポートしていない場合に返されます。
- 416: Range Not Satisfiable/レンジが範囲外 — リクエストが、サーバーが返すことができないリソースの特定の部分に対するものであった時に、これが表示されます。
- 417: Expectation Failed/Expectヘッダーによる拡張が失敗 — サーバーが、リクエストのExpectヘッダーフィールドで指定された要件を満たすことができないことを意味します。
- 418: I’m a teapot/私はティーポット — このコードは、コーヒーを淹れろというリクエストを受け取ったティーポットにより返されるもので…1988年のエイプリルフールのジョークです。
- 422: Unprocessable Entity/処理できないエンティティ — クライアントリクエストにセマンティックエラーが含まれており、サーバーがそれを処理できない時に返されます。
- 425: Too Early/Early dataを受け入れない — このコードは、サーバーがリプレイ攻撃される可能性があるために、リクエストの処理を拒絶するときに返されます。
- 426: Upgrade Required/アップグレード要求 — リクエストのアップグレードヘッダーフィールドの内容により、クライアントが別のプロトコルに切り替える必要があることを意味します。
- 428: Precondition Required/事前条件が必要 — リクエストを処理する前にサーバーで条件を指定する必要がある場合に返されます。
- 429: Too many requests/要求が多すぎる — 指定された時間内にあまりにも多くのリクエストをユーザーが送信したときにサーバーから返されます(レート制限)。これは、サイトにアクセスしようとするボットまたはスクリプトが原因で発生する場合があります。そのような場合には、WordPressのログインURLを変更してみてください。また、429 Too Many Requestsエラー修正ガイドもご確認ください。
- 431: Request Header Fields Too Large/リクエストヘッダーフィールド過大 — ヘッダーフィールドが大きすぎるため、サーバーがリクエストを処理できない状態を意味します。単一のヘッダーフィールド、またはすべてのヘッダーフィールドに問題がある可能性があります。
- 451: Unavailable for Legal Reasons/法的理由により利用不可 — サーバーのオペレーターが、リクエストされたリソース(またはリクエストされたリソースを含むリソースのまとまり)へのアクセスを禁止するよう(政府などから)指示を受けている場合に返されます。豆知識:このコードは、レイ・ブラッドベリの小説『華氏451』にちなんで451とされています。
- 499: Client closed request/クライアントによるリクエストの終了 — これのコードは、Nginxがまだ処理している間にクライアント側でリクエストが切断されるとNGINXによって返されます。
500番台のステータスコード
500番台のステータスコードもエラーと見なされます。ただし、問題はサーバー側にあるので、解決をするのはより困難になる可能性があります。
- 500:Internal Server Error/サーバー内部エラー —サーバーでエラーが発生したため、要求を完了できなかったことを意味します。これは、サーバー内部でエラーが発生したことを単に意味する一般的なコードです。サーバーで問題が発生し、リクエストされたリソースが配信されない状況を指します。このコードは通常、サードパーティのプラグイン、PHPの障害、またはデータベースへの接続が切断されることにより返されます。データベース接続の確立におけるエラーを修正する方法と、その他のサーバー内部エラーを解決する方法もご覧ください。
- 501: Not Implemented/実装されていない — このエラーは、サーバーがリクエストを満たすために必要な機能をサポートしていないことを意味します。これはほとんどの場合、ウェブサーバー自体の問題であり、通常、ホスト側によって解決される必要があります。「501 not implementedエラー」を解決するための推奨事項もあわせてご確認ください。
- 502: Bad Gateway/不正なゲートウェイ — 通常、このエラーコードは、プロキシサーバーの使用中など、あるサーバーが別のサーバーから無効なリクエストを受信したことを意味します。また、クエリまたはリクエストに時間がかかりすぎることで、サーバーによりキャンセルまたは強制終了され、データベースへの接続が切断されるケースもあります。詳細については、「502 Bad Gateway」エラーの修正方法に関するチュートリアルをご参照ください。
- 503:Service Unavailable/サービス利用不可 — 「サーバーが現在、リクエストを処理できない」ことを意味します。その時点でリクエストを完了することはできません。このコードは、リクエストを処理できない過負荷のサーバーにより返されることがあります。「503 Service Unavailable」エラーの修正方法に関する完全なガイドもご用意しています。
- 504:Gateway Timeout/ゲートウェイタイムアウト — ゲートウェイとして機能するサーバーが、別のサーバーのレスポンスを待ってタイムアウトした状態を指します。これは、リクエストの処理に2つのサーバーが関与し、最初のサーバーが2番目のサーバーのレスポンスを待ってタイムアウトしたときに返されるコードです。専用のガイドから「504エラー」の修正方法をご確認ください。
- 505: HTTP Version Not Supported/サポートしていないHTTPバージョン — サーバーが、クライアントがリクエストの作成に使用したHTTPバージョンをサポートしていないことを意味します。
- 511: Network Authentication Required/ネットワークに対する認証が必要 — このステータスコードは、使用しようとしているネットワークでリクエストをサーバーに送信する前に、何らかの認証が必要であることを意味します。たとえば、公共のWi-Fiホットスポットの利用規約に同意する必要がある場合などです。
- 521: Web server is down/ウェブサーバーのダウン — エラー521はCloudflare固有のエラーメッセージです。これは、ウェブブラウザがCloudflareに正常に接続できたものの、Cloudflareがオリジンウェブサーバーに接続できなかったことを意味します。
HTTPステータスコード詳細情報が確認できるソース
今回の記事でご説明したHTTPステータスコードに加えて、さらに他のものを調べたい方もいるかもしれません。その他の頻度の少ないコードについては、次のリソースをご参照ください。
- ウィキペディアのHTTPステータスコード包括的リスト
- Internet Engineering Task Force (IETF)のステータスコードの定義
- RFC 7231
これらのステータスコードを知っておけば、自らのサイトを管理する際に、そして他のサイトで遭遇した場合に、特定の問題を突き止め解決することにつながるはずです。
まとめ
HTTPステータスコードは、表面的には難しそう、または、苦手意識すら感じるかもしれませんが、実際には非常に便利なものです。一般的なケースだけでも学習しておくと、サイトの問題をより迅速に把握できます。
今回の記事では、あなたが遭遇する可能性のある40以上のHTTPステータスコードを扱いました。どちらかといえば平穏な100番台や200番台から、よりトリッキーな400番台、500番台まで、これらのメッセージを理解することはウェブサイトを管理し、ユーザーによるアクセスを確保するために重要なステップとなります。
コメントを残す