これを書いて思ったのは、検索サイトはどうやってAmazonのリンクを正規化しているのかというもの。

404 Blog Not Found:不都合なはてブ

これのどこが問題かおわかりになるだろうか。

答えは、あっさり出た。

たとえば、本blogで先月一番売れた「数に強くなる」をぐぐると、Amazonのリンクが一位で私の書評が二位になる。

このAmazonのリンクに注目していただきたい。こうなっている。

数に強くなる - Google 検索
www.amazon.co.jp/数に強くなる-畑村-洋太郎/dp/4004310636

実際には、日本語部分がURL Encodedされて、頭にhttp://がつくので

http://www.amazon.co.jp/%E6%95%B0%E3%81%AB%E5%BC%B7%E3%81%8F%E3%81%AA%E3%82%8B-%E7%95%91%E6%9D%91-%E6%B4%8B%E5%A4%AA%E9%83%8E/dp/4004310636

となるのだが、注意深く見れば、GoogleにおけるAmazonの製品リンクは、すべて

http://www.amazon.co.jp/製品名-著者ないしメーカー/dp/ASIN

という形式になっているのがおわかりになるはずだ。

私はてっきり、これはGoogle側で正規化処理をしているのだと思っていた。しかしGoogle側が正規化するのであれば、なぜ数ある製品リンクのうち、最短である

http://www.amazon.co.jp/dp/4004310636

に正規化しないのだろうか。

なんのことはない。よきに計らっていたのは、Amazon側なのである。

以下をご覧いただこう。

% HEAD -S http://www.amazon.co.jp/dp/4004310636
HEAD http://www.amazon.co.jp/dp/4004310636 --> 301 MovedPermanently
HEAD http://www.amazon.co.jp/%E6%95%B0%E3%81%AB%E5%BC%B7%E3%81%8F%E3%81%AA%E3%82%8B-%E7%95%91%E6%9D%91-%E6%B4%8B%E5%A4%AA%E9%83%8E/dp/4004310636 --> 200 OK
# ....

そう、正規化されたURIの方にRedirectされているのである。

しかし、なぜそれでは普通のブラウザーで見てもリダイレクトされないのだろうか。Amazonは User Agent をきちんと見ているのである。

% HEAD -S -H'User-Agent: Mozilla/5.0' http://www.amazon.co.jp/dp/4004310636
HEAD http://www.amazon.co.jp/dp/4004310636 --> 200 OK
# ....
% HEAD -S -H'User-Agent: Opera/9.20' http://www.amazon.co.jp/dp/4004310636
HEAD http://www.amazon.co.jp/dp/4004310636 --> 200 OK
# ....
% HEAD -S -H'User-Agent: /' http://www.amazon.co.jp/dp/4004310636
HEAD http://www.amazon.co.jp/dp/4004310636 --> 200 OK
# ....

このように、通常のブラウザーに対してはリダイレクトしないが、

% HEAD -S -H'User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)' http://www.amazon.co.jp/dp/4004310636
HEAD http://www.amazon.co.jp/dp/4004310636 --> 301 MovedPermanently
HEAD http://www.amazon.co.jp/%E6%95%B0%E3%81%AB%E5%BC%B7%E3%81%8F%E3%81%AA%E3%82%8B-%E7%95%91%E6%9D%91-%E6%B4%8B%E5%A4%AA%E9%83%8E/dp/4004310636 --> 200 OK
# ....
% HEAD -S -H'User-Agent: Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)' http://www.amazon.co.jp/dp/4004310636
HEAD http://www.amazon.co.jp/dp/4004310636 --> 301 MovedPermanently
HEAD http://www.amazon.co.jp/%E6%95%B0%E3%81%AB%E5%BC%B7%E3%81%8F%E3%81%AA%E3%82%8B-%E7%95%91%E6%9D%91-%E6%B4%8B%E5%A4%AA%E9%83%8E/dp/4004310636 --> 200 OK
# ....
% HEAD -S -H'User-Agent: msnbot/1.0 (+http://search.msn.com/msnbot.htm)' http://www.amazon.co.jp/dp/4004310636
HEAD http://www.amazon.co.jp/dp/4004310636 --> 301 MovedPermanently
HEAD http://www.amazon.co.jp/%E6%95%B0%E3%81%AB%E5%BC%B7%E3%81%8F%E3%81%AA%E3%82%8B-%E7%95%91%E6%9D%91-%E6%B4%8B%E5%A4%AA%E9%83%8E/dp/4004310636 --> 200 OK
# ....
% HEAD -S -H'User-Agent: Baiduspider+(+http://www.baidu.com/search/spider.htm)' http://www.amazon.co.jp/dp/4004310636
HEAD http://www.amazon.co.jp/dp/4004310636 --> 301 MovedPermanently
HEAD http://www.amazon.co.jp/%E6%95%B0%E3%81%AB%E5%BC%B7%E3%81%8F%E3%81%AA%E3%82%8B-%E7%95%91%E6%9D%91-%E6%B4%8B%E5%A4%AA%E9%83%8E/dp/4004310636 --> 200 OK

Amazonにbot認定されているUser Agentはリダイレクトされる。デフォルトではリダイレクトなしだが、botのみリダイレクトするホワイトリスト方式である。ホワイトリスト、というよりbotにちなんで「メタルリスト方式」とでも呼ぼうか。

で、はてブの場合はどうか。

% HEAD -S -H'User-Agent: Hatena Bookmark/0.1' http://www.amazon.co.jp/dp/4004310636
HEAD http://www.amazon.co.jp/dp/4004310636 --> 200 OK

こういうことだったのである。

結局、Amazonの正規化は、Amazonにbot認定してもらえばいいだけの話なので、Amazonにそう伝えるか、はてブがbot認定されているUser Agentを名乗るかすればいい。冒頭で見たように、HEADコマンドのデフォルトのUser Agentはlwp-request/X.XX。Amazonはbot認定済みである。

それにしても、なぜAmazonはbotに対してこのような正規化を行うのであろうか。

これぞ、SEOである。URL中に入った検索ワードというのは、非常に効果が高いのである。Wikipediaやはてなキーワードが検索で上位になる理由も、これが大きいと思われる。Pagerankのおかげで被リンク数がもてはやされるようになったが、Wikipediaの全てのページがあちこちからリンクされているわけではないし、Amazonの「テール」に至っては被リンク数はたかが知れているだろう。にもかかわらずそうしたページまで検索上位になるのは、これが最も決定的な理由ではないかと私は睨んでいる。

Amazonのこの対User Agent二枚舌戦略は見事といえば見事なのだが、気味が悪いと言えば気味が悪い。なにしろamazon.co.jpのページはShift_JISなのだ。bot向けURIはUTF-8なのに。

究極のSEO、それはURI中に検索文字列を仕込む事なのではないか。

Dan the User Agent Agent