2007年03月29日 23:00 [Edit]

誤った404エラーページをつくるただ1つの方法

この話題は以前「404 Blog Not Found:200 Blog Not Found」でも触れたのだけど、まだわかっていない人々があとを断たないのでもう一度。

わかりやすい404エラーページについて考えてみる | caramel*vanilla
アクセスされたページを削除してしまったのなら仕方ありませんが、URLが変わっただけならなんとか探し当てていただきたいもの。 せっかくなにかのきっかけで訪れてくれた方をガッカリさせたままでは申し訳ありません。

なにかのきっかけで訪れるのは、人間とは限りません。


特に検索エンジンは「非人間の訪問者」としては非常に重要な訪問者です。

「彼ら」にとって「ページが存在しない」とはいったいどういうことでしょう?

ページがわかりやすいこと?

違います。そのURIにアクセスした時に、Status 404がきちんと返ってくることです。

誤った404エラーページをつくるただ1つの方法、それはStatus 404を返さないことなのです。

ところが、未だにエラーなのにStatus 200を返すURIがあふれています。

akaさんの翻訳版を参考にして自分用にちょっと変えて使っています。
こんな感じ↓

% HEAD -S http://caramel-tea.com/404.php
HEAD http://caramel-tea.com/404.php --> 200 OK
Cache-Control: no-cache, must-revalidate, max-age=0
Connection: close
Date: Thu, 29 Mar 2007 14:06:10 GMT
Pragma: no-cache
Server: Apache
Content-Type: text/html; charset=UTF-8
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Last-Modified: Thu, 29 Mar 2007 14:06:10 GMT
Client-Date: Thu, 29 Mar 2007 14:06:08 GMT
Client-Peer: 210.172.108.233:80
Client-Response-Num: 1
Status: 404
X-Pingback: http://caramel-tea.com/xmlrpc.php

ダメダメです。検索エンジンたちにとって、このページは存在するページです。当然キャッシュもされ、検索にも引っかかります。

もしそういう実装、すなわち「URIの不存在は、ページの内容ではなくステータスで判定する」なっていなかったらどうなるでしょう?もし「URIの不存在はページの内容で判定する」だったら、本blogは大変困ったことになってしまいます。なにしろ本blogは、404を日本語でぐぐった場合のトップに来るのです。もしこれらのページまで本当の404エラーと誤解されたら私も読者の皆さんも困ってしまいます。見ての通りその品質はとにかく、内容そのものがないのとは違うのですから。

404ページの内容に凝る前に、きちんとStatus 404を返しているかどうかをきちんと確認するようにしてください。それはロボットという訪問者のためだけによいことではなく、翻ってあなたのためにもなるのですから。

Dan the King of 404

See Also:

この記事へのトラックバックURL

この記事へのトラックバック
404 Blog Not Found:誤った404エラーページをつくるただ1つの方法
404 Blog Not Found:誤った404エラーページをつくるただ1つの方法【】at 2012年01月25日 10:07
下記の記事を読んで、「ああ。」と思って、Firefoxに「livehttpheaders」をインストールして、「404 Not Found」について、確認してみた。 ステータス200なのに「その商品はありません」 HTTPでは表示されるべきものがない場合には「404 Not Found」というHTTPヘ....
「ErrorDocument」の設定は、「相対パス指定」にすべきのようです。【【フラットラボ】管理人のブログ】at 2007年11月14日 23:25
[404 Blog Not Found:誤った404エラーページをつくるただ1つの方法] 言ってることはもっともなんだけど、例を見たときには何を問題視しているか分からなかった。誤った404エラーページをつくるただ1つの方法、それはStatus 404を返さないことなのです。ところが、未だにエラ...
mod_rewrite を使うときには 404 の扱いに注意【World Wide Walker】at 2007年04月05日 20:45
「404 Blog Not Found:誤った404エラーページをつくるただ1つの方法」で示したようなURIのStatusを、Webブラウザーから直接確認することを可能にするAPIを作りました。
perl - 任意のURIのStatusを確認するAPI【404 Blog Not Found】at 2007年03月31日 05:22
INTER-GATE運営事務局です。 □2006エイプリルフール リンク集 ※写...
第101回目はネットのお役立ち情報??4月1日はあの日【INTER-WEB】at 2007年03月30日 19:04
この記事へのコメント
hoさんにちょっと疑問。
>URL直打ちなんてするのが例外的な状況で404にたどり着くユーザに疑惑の念があったりして。
確かに「完璧な」サイトならURL直打ちの必要もないかもしれません。
しかし、現実にはそうでもなかったり。
サーチエンジンで下層にいきなりたどり着いた場合「戻る」がないページが結構多いのです。
同じ階層の情報を得ようと、URLを下から少しづつ削っていくと、404やら403やらファイルのリストやら…
気の利いたところなら階層ごとにindex.htmlを用意してくれているのですが、
そういうところならそもそも「戻る」がありますね。
Posted by ぺ at 2007年10月01日 17:28
404であるべき状況なのに404を返さない原因として、「.htaccessのErrorDocumentディレクティブに完全修飾URLを書いてしまっている」というものがありそうです。この場合、クライアントには404でなくてリダイレクトが返ってくるはずです。
この罠に引っかかっている人は結構多いと思います。自分も少し前までその罠に引っかかっていました;
Posted by 勝田 at 2007年06月29日 00:03
>いちおう仕様的には未来永劫金輪際絶対にリソースは存在しないっていう410 Goneてのがあります。

なるほど。でも削除されたものともともとないものをサーバ側で区別してあげないといけないですね。
Posted by 12 at 2007年04月02日 12:16
> 404を返しているのに何度もやってくるFeedfetcher-GoogleとHatenaAntenna…。

404は一時的にNot Foundなのか恒久的にNot Foundなのかを区別せず、ただ「見つからない」というだけなので、その挙動もそれほどおかしくはないかと思います。
いちおう仕様的には未来永劫金輪際絶対にリソースは存在しないっていう410 Goneてのがあります。Googleやはてなが理解してくれるかは微妙ですが。
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.11
Posted by Sybian at 2007年03月31日 15:53
これを読ませていただき、自分のサイトも再検証してみました。
概ね大丈夫だったのですが、
404を返しているのに何度もやってくるFeedfetcher-GoogleとHatenaAntenna…。
Posted by 12 at 2007年03月31日 14:22
okdkさんの紹介されてるサイトのは原則論としては素敵なんですが。
なんだかWebのシステム側に関わってる人間としては、今日のように、URL直打ちなんてするのが例外的な状況で404にたどり着くユーザに疑惑の念があったりして。(GETパラメータやPATHINFOいじって遊んでるんじゃないかとか)
そういう疑いの目で見てしまうと、404にサーバリソースを使うのもなんだか抵抗があったりして。せいぜいサイト独自のデザインで画像無しのシンプルなテキストくらいでいいんじゃない?なんて。
限りなく被害妄想に近いですが。私だけかな?

Posted by ho at 2007年03月31日 00:10
http://packages.gentoo.org/daily/2007/03/30/
逆に404のステータスコードで正常な文章を返す例。
Posted by ると at 2007年03月30日 22:26
上記コメントへのコメントです。(danさん、お許しを。)

Jacob Nielsen は404 Not foundというヘッダにおけるコードを返すべきかどうかという話とは別の指摘をしています。

ご参考
http://www.usability.gr.jp/alertbox/404_improvement.html
Posted by okdt at 2007年03月30日 16:38

>>誤った404エラーページをつくるただ1つの方法、それはStatus 404を返さないことなのです。

同意します。
何故リダイレクトが流行っているでしょうか?(笑。 
まさに余計なお世話。

ここはJakob Nielsen氏にガツンと言ってもらいたい気持ちです。


Posted by red at 2007年03月30日 02:23
レスポンスコードも大事だけど、そもそもErrorDocumentを使って

「ブラウザのアドレス欄に表示されるURLが変わるかたちで
 リダイレクトする」

のはやめてほしいと思う…。たとえばロリポップがそうなんだけど、あそこは

「ロリポップでホストされているドメインで404が起きると、
 lolipop.jp配下のアドレスにリダイレクトされる」

というのがデフォルト動作になっている。元のドメインがどこだったのかわからなくなるので、追跡するのがすさまじく面倒。404返してるから機械にはエラーが起きてることがわかるけど、人間にはより面倒が起きている事例。

本来的には
「アドレスはそのままで404のレスポンスとエラードキュメントを返すべき」
だと思う。なぜリダイレクトするのが流行ってるのかは不明。
Posted by Bar at 2007年03月30日 00:04