WWW Watch

短縮 URL を自前で提供してみる

Twitter キッカケで急速に広まった感のある、いわゆる短縮 URL サービスですが、無駄なリクエストを増やすとか、本当のリンク先がわかりにくくてスパム業者に悪用されるよだとか、色々と言われています。つい最近も 「短縮URLは必要悪か、単なる悪か。」 なんて議論で盛り上がったりしていますが、この短縮 URL を自前で提供する方法について書いてみます。

Twitter キッカケで急速に広まった感のある、いわゆる短縮 URL サービスですが、無駄なリクエストを増やすとか、本当のリンク先がわかりにくくてスパム業者に悪用されるよだとか、色々と言われています。

つい最近も 「短縮URLは必要悪か、単なる悪か。 (原文:Are URL Shorteners A Necessary Evil, Or Just Evil?)」 なんて議論で盛り上がったり。

そんな一連の議論の中で、色々問題もあるけど、短縮 URL 自体は便利だし、だったらサイト管理者が自前で短縮 URL を提供して、それをみんなが使いやすくする仕組みがあればいいんじゃないの?という流れが生まれ、それが link 要素に 「rev="canonical"」 を組み合わせた方法として広がりそうな気配をみせています。

ちなみに、「rel="canonical"」 という記述は最近検索エンジン各社が重複コンテンツ対策としてサポートすることを決めたもの (参考記事) ですが、検索エンジン向けに使用する rel 属性に対して、rev 属性を使用する形になります。

具体的には、サイト管理者側で短縮 URL を生成、リダイレクトの仕組みを提供した上で元のページ (つまり長ったらしい URL がついている方のページ) 内に、

<link rev="canonical" rel="alternate shorter" href="http://example.com/xxxxxx" />

みたいな記述を入れてあげると。あとはこの記述に対応したクライアント側の仕組み (ブラウザサポートとか、ブックマークレットとか) があれば、簡単に短縮 URL を抜き出して利用できますよということです。実際に Flickr などではすでに対応されていて、Flickr 独自の短縮 URL が使用できます。(ソースコードを見てみるとわかると思います。Flickr は「rel="alternate shorter"」 を使ってないですけど)

短縮 URL は先に書いた問題点もありますが、もう一点、そのサービスが終了したらすべてのリンクが無効になってしまうという問題もあります。自前で提供していれば、まあ自分さえやめなければ短縮 URL の提供を継続できるわけで、その点でもメリットはあるかもしれません。

で、リダイレクトの方法は何でもいいんですが、例えば .htaccess でやるなら

Redirect permanent /0001 http://example.com/archives/category/2009/04/13/sample.html
Redirect permanent /0002 http://example.com/archives/category/2009/04/12/sample.html
Redirect permanent /0003 http://example.com/archives/category/2009/04/11/sample.html

のように。「301 Moved Permanently (永久的な移動)」 をレスポンスヘッダで返しつつ、リダイレクトしてやります。この場合、

http://example.com/0001

にアクセスがあれば、

http://example.com/archives/category/2009/04/13/sample.html

にリダイレクトされます。これで完了。Blog で使用するなら、個別記事ページへの link 要素自動追加、.htaccess ファイルのリダイレクト設定も自動で書き込むといった形にしておけば手間がかかりません。例えば Movable Type であれば、ブログ記事テンプレートの head 要素内に下記のような記述を。

<link rev="canonical" rel="alternate shorter" href="http://example.com/<$MTEntryID pad="1"$>" />

さらに、.htaccess をテンプレートとして作成し、

<MTEntries lastn="0">
Redirect permanent /<$MTEntryID pad="1"$> <$MTEntryPermalink$>
</MTEntries>

などとしておけば、全部自動でいけちゃいます。

ドメイン名が長い場合は短縮 URL 用のドメインを取るなんて言うのもこだわる人にはいいかもしれませんね。マルチドメインで運用できるサーバであればいい感じにできるかも。

ただし、この独自短縮 URL は一度提供開始し始めたら、少なくとも発行した短縮 URL に関しては継続的に提供し続けないといけないですから、それなりの覚悟で始めた方がいいと思います。

その他、rev="canonical" に関する技術的なお話は下記のサイトが参考になります。

Recent Entry

全ての記事一覧を見る

Hot Entry

逆引きおすすめエントリー