返事が来たので、本題。

はてなブックマーク - ブックマークたつを / 2007年05月02日
それぞれのURL(パラメタ付きURL)が意味を持っているサイトなのでまとめちゃうとダメなのです…。例えばWikipediaにボット来て重いからといってトップに飛ばしたら個別記事が検索されなくなりますよね。 by 元記事主

動的コンテンツのpermalinkはどうあるべきか。

以下は、全て同一の内容である。

しかも、Wikipediaの各ページには、「この版への固定リンク」、英語版では"Permanent Link"が明記されていて、それは必ず以下のようになっている。

にも関わらず、検索エンジンに引っかかるのは、Wikipediaが「ここがPermalinkです」と明言しているhttp://lang.wikipedia.org/w/index.php?title=title&oldid=oldidではなく、最初の http://lang.wikipedia.org/wiki/title の方である。しかも、titleencodeURIComponent()されていても、検索エンジンにはja.wikipedia.org/wiki/小飼弾decodeURIComponent()されて表示される。ちなみに調べてみればわかるが、「Amazonの二枚舌」と異なり、WikipediaではUser Agent別のredirectはしていない(ただしLWPには403 Forbiddenを返している)。

これに関しては、Wikipediaの「主張」より、検索エンジンの「主張」の方に軍配が上がるのではないか。

動的コンテンツといえど、permalinkはquery stringなしにした方がよいと思う。まずキャッシュとの相性がよい。Squidをはじめ、たいていのキャッシュの実装では、デフォルトの設定で?を含むURIをキャッシュの除外対象にしている。次に実装する側にとっても、何をしたらよいかが明白だ。そしてなにより、検索エンジンの検索結果に見られるように、見た目もよい。

このあたりは、以下がよくまとまっている。

第20回 “使いやすいURI(URL)”の設計を考える:ITpro
  1. 短いURIにする
  2. 入力しやすいURIにする
  3. 大文字小文字を区別しない
  4. 人間が読んで理解できるURIにする
  5. サイトの構造をきちんと表したURIにする
  6. ユーザー中心の設計をする
  7. 改造しやすいURIにする
  8. マジックナンバーを使わない
  9. クエリー文字列を使わない
  10. 拡張子はコンテンツのデータ形式を表すようにする
  11. 最後のスラッシュのあるなしでページを変えない

細部にまで同意するのは技術的にも難しいが(例えば大文字小文字は、日本語にはN/A (Not Applicable))大意に同意できないというWebmasterはいないのではないか。もっとも、ITProの一つの記事を複数permalinkに割ってしまうのは紺屋の白袴チックではあるのだけど。

実装の面でも、これを行うのに困難な点はほとんどない。動的コンテントのbase URIが http://www.example.com/dynamic だとして、特定のコンテントがhttp://www.example.com/dynamic/path/to/the/contentだとしたら、たいていのWeb Serverは環境変数PATH_INFO/path/to/the/contentをセットしてくれる。これを利用しない手はないと思う。

さらに、静的コンテントのように動的コンテントのフォーマットを拡張子で示すというのもなかなかいいアイディアだと思う。これはTwitter APIが活用している。

確かに

  1. http://www.example.com/dynamic.cgi?keyword=foobar&format=baz
  2. http://www.example.com/dynamic/foobar.baz

と並べて書くと、誰が見ても--そう、検索エンジンが見ても -- b.の方が心地よい。今後の動的コンテント生成は、a.を受け入れつつ、なるべくb.に移行するというのがよいのではないか。

Dan the Man with Too Many Links to Resolve