rev="canonical"

海の向こうで一気に議論が過熱したrev="canonical"ネタ。ざっくりまとめると、TwitterやSMS等の文字数制限のあるメディアで長いURLを投稿するためによく使われてるURL短縮サービスはアレだよね……というところから始まって、じゃぁ個々が自前で短いURLを用意してやって機械的に辿れる仕組み、rev="canonical"を使おうぜ!という感じ。

URL短縮サービスの提供する短いURLは、on url shortenersで触れられているようにいくつもの問題点がある。一番身近なのはスパムの温床になっていること。インバウンドリンクの追跡が不可能であることなんかも気になる人が多いかもしれない。この話題が再燃した一番大きな原因はDiggBarの登場で、そこらへんの細かいところは短縮URLは必要悪か、単なる悪か。に詳しい。

「短縮URLは必要悪か、単なる悪か。」の最後で触れられているように、Twitter等のメディア側が長いURLから短いURLを生成する仕組みを持つのが一番良さそうだけど、それはやはりTwitter限定になってしまう。そこでコンテンツ提供者側が自前で短いURLを生成してやり、元の長いURLのページで、

<link rev="canonical" href="http://example.com/p/256" />

というようにlink要素のrev属性を利用して短いURLを提示してやれば、機械的に短いURLを知ることができる。これならありとあらゆるクライアント・アプリケーションとウェブサービスから利用できるから、みんなハッピー!という話。

既にFlickrPHP.net24 waysなどで実際に稼動している。まぁ実際に恩恵にあずかるには、クライアント側、つまりTwitter投稿クライアント(ブックマークレット等も含め)の対応が必要になるわけだけど。

このrev="canonical"の実装その他の技術的な話題はRevCanonical’s Blogにまとまってる。その中ではいちいちHTMLをパースして短いURLを探すのはコストがかかるから、HTTPヘッダでも提示してやろうみたいなのもあったり、まだまだ流動的。

てなわけでblosxomのrevcanonicalプラグインを作ってみた。このプラグインがやることは、

http://example.com/blog/p/123 にアクセス
124番目のエントリにリダイレクト(301)
エントリ個別のページにアクセス
HTTPヘッダ、Linkを出力
link要素($revcanonical::link_elementでflavourから参照可能)を生成

このサイトでは動作することは確認したけど、リダイレクトするところの判定とかがちょっと怪しいので、そのままでは動かないかも。

提供し始めると「やっぱり止めた!」とかしづらそうなので、今のところこのサイトでは導入する予定はない。

追記

rev="canonical"は……というかrev属性ヤバイヨヤバイヨ的な話を聞きつけたので、urlshorterプラグインにリネームし、rev="canonical"の代わりにrel="shorturl"を選択できるようにしておいた。

Gistは本当にGitリポジトリなんだな。リネームとかしてもぜんぜん普通に扱える。というみんなから9ヶ月遅れくらいで同じ感想をうっかり書いてしまう男。