ステータスコードとは
HTTPリクエストという言葉を聞いたことがある方も多いと思います。Webサーバーに対して「ファイルくれ」と要求する行為を指します。このページを見ているみなさまがお使いのWebブラウザーも「HTMLくれ」とウチのサーバーにリクエストし、返されたHTMLを適切にレンダリングして表示しているわけです。この時サーバーからは 200 OK(もしくは304 Not Modified)というステータスコードが返されています。わかりやすくいうと「お持ちいたしました、ご主人さま。」という意味です。
200以外にもステータスコードはたくさんあります。メジャーなものを以下に列挙します。
- 200 OK
- お持ちいたしました、ご主人さま。
- 204 No Content
- 了解いたしました、ご主人さま。(何も持ってこない)
- 301 Moved Permanently
- 当店は以下のアドレスに移転致しました。
- 302 Found
- 臨時で以下のアドレスで営業中でございます。(再びここで営業再開する予定)
- 304 Not Modified
- 前回申し上げた通りでございます。(変更はありません)
- 400 Bad Request
- 日本語でおk。
- 401 Unauthorized
- こちらは会員制となっております。
- 402 Payment Required
- 先にお支払いをお願い致します。
- 403 Forbidden
- 承諾いたしかねます…。
- 404 Not Found
- ご注文の品はございません。
- 410 Gone
- いままでありがとうございました。
- 500 Internal Server Error
- はわわ、失敗しちゃいました><
- 503 Service Unavailable
- 少々お待ちくださいませ><
200,204,400あたりはSHIORI/3.0やSSTPのプロトコルでも利用されています。SSTPはHTTPを模して作られた仕様なので当然ですね。
ファイルが存在しない場合は 404 Not Found を返すのがインターネットのルールなわけですが、 200 OK を返しつつ「ファイルが存在しません」と書かれたHTMLを返す行儀の悪いサーバーを最近3つも見つけたので憤りを禁じえずこんな記事を書いてみました。
なぜファイルがないのに 200 OK を返すのか
「サーバーの中の人が設定を間違えたから」ではないです。レンタルサーバー屋さんたちが示し合わせたようにそろって間違えるはずがありません。理由は他にあります。
調べ物をしているときに、「はてなキーワード」が検索で引っかかることを経験したことがある人も多いのではないでしょうか。そしてページに飛んでみると「このキーワードはまだ作成されておりません」みたいなことが書かれていて大いに不評を買った時期があります。検索エンジンは200 OKが返されたページはインデックスし、404 Not Foundが返されたページはインデックスを削除する、というよく考えれば当たり前な挙動をします。「まだ作成されていない」のに200 OKを返していたためにインデックスされ、しかもはてなはSEO術に長けているため上位表示を獲得し、Spammyな状態を作り出してしまったわけです。
私が想像するに、内部の状態を無視して200 OKを返しまくるサーバーは、検索エンジンにインデックスされること(かつ削除されないこと)を目的としているのだと思います。 そしてクリックすると「ファイルが存在しません」の周囲に表示される大きな広告画像の数々。これが真の目的であると推察します。言うなればWorld Wide Webに対するスパム行為です。ビジネスモデルを考慮するとそうしたくなる気持ちもわからなくはないですが…。
逆に検索エンジンにインデックスされたくない場合は200 OK以外のステータスコードを返しましょう。「現在メンテナンス中です」とHTMLで表示する場合は、併せてステータスコードを503 Service Unavailableにしておきます(.htaccessが使える場合ですが)。 こうすると検索エンジンはそのページの最新の状態を更新することをしません。「現在メンテナンス中です」というタイトルがインデックスされ検索結果に表示されたはずかしい状態のサイトを時々見かけますが、このようなことを防止できます。
ということで、普段ブラウジングしているときに意識はしませんが、ページのステータスコードは大事だよ!というお話でした。