はてなブックマーク的にも canonical 属性は設定した方が良い

調べてみたら 2009 年に行われた変更のようで今更なのですが、はてなブックマークどの URL をブックマークすべきか を判断する際に canonical 属性 をチェックしているようです。

ウェブページの URL は、同一の内容でも別の URL で表示できる場合もあるため今ままではどの URL がそのページの正確な URL かは解りにくい状況でした。しかし最近では、ウェブページ側で正規化された canonical URL を指定することで、正確な URL を知ることができるようになり、対応している ウェブページも増えてきております。

この現状を受けて、はてなブックマーク側でも、ブックマークレットでブックマークするときに canonical URL をチェックし、ブックマークしようとしている URL が異なる場合、ナビゲーションによる正規化された URL を提示するようなインターフェイスの作成を行いました。

ブックマークレットでの URL の正規化に対応しました - はてなブックマーク日記 - 機能変更、お知らせなど

興味深い点として、Google Chromeはてなブックマーク拡張で確認した限り、現在では「ブックマークしようとしている URL が異なる場合、ナビゲーションによる正規化された URL を提示するようなインターフェース」からもう 1 歩踏み込んで、下記画像のように「強制的に canonical 属性に指定された方の URL をブックマークさせようとする」と言う挙動を示す場合もあるようです。

「場合もある」と言う微妙な書き方をしたのは、例えば テストページ のように「ナビゲーションによる URL 提示」に留まる場合もあるようです(参考画像)。最初の実験で使用した http://cpplover.blogspot.jp/ のブログでも記事によってはナビゲーションに留まる事もあり、この辺りの条件はよく分かりませんでした。

話は逸れますが、実験に使用した Blogger本の虫: BloggerのccTLDリダイレクトは相当ひどい で指摘されているように *.blogspot.com から(日本の場合) *.blogspot.jp へリダイレクトするような挙動に変更されたのですが、一方で canonical 属性に指定されている URL は *.blogspot.com と言う割と鬼畜な状態になっています。リダイレクトの指示と canonical 属性の指定を両方解釈しようとすると無限ループに陥るのですが、どう解決すべきなのでしょうか*1

第三者が URL に細工をする事も多い

静的な Web ページのように「コンテンツと URL が必ず一対一対応するような構成になっている場合には canonical 属性を設定する必要はない」と感じられるかもしれません。しかし、現在の Web 状況を見る限り、そう言った Web ページにも canonical 属性を指定しておいた方が無難であるように思われます。

現在では、「Web サービス」や「Web アプリケーション」と呼ばれるような、従来の「何らかのコンテンツを表示させるための Web ページ」よりももう少し複雑な事を行うものが多数登場してきています。これらの Web サービス/アプリケーションの中には、ユーザ、あるいは運営側にとって都合の良くなるように、第三者の Web ページの URL に対して追加的なパラメータを付加するものも存在します。

この例としてよく見かけるものに Google Analytics のカスタムキャンペーンがあります。

カスタム キャンペーンを設定するには、URL の末尾にパラメータを追加します。パラメータは変数と値のペアであり、キャンペーンを識別する情報や個別に定義した値を設定します。たとえば、utm_source=newsletter というタグはニュースレター経由のトラフィックを示し、utm_campaign=june は 6 月に実施されたキャンペーンを示します。値はいくつでも定義できますが、わかりやすい名前を付けること、関連するキャンペーンを把握しておくことをおすすめします。

カスタム キャンペーン - アナリティクス ヘルプ

このように、静的な Web ページであっても外部のサービスが様々なパラメータを追加してしまうため、結果的に複数の URL が存在してしまうと言う状況が多々発生します。Google Analytics のカスタムキャンペーンは feedlytwitterfeed の事例ように、初期状態で付与する設定となっている Web サービスも多いため問題が表面化しやすいようです*2はてなブックマークでは、この類の追加的なパラメータはできるだけ自動判別するように改良を続けているようですが、自動判別では限界もあるためコンテンツ作成者側としても canonical 属性を設定して自衛しておくのが無難だろうと思います。

いや,そもそも(Feedly に限らず) utm_source とか utm_medium とかユーザから見たらゴミでしかないわけよ。 それもかなり厄介なゴミ。 きっぱりはっきり止めて欲しい。 追跡が必要なら他の方法を使え! URL を汚すな!

おいこら Feedly! utm_source はやめろ! — Baldanders.info

個人的な心象としては、上記と同様に「ブラウザでちゃんと閲覧できるからと言って、第三者の URL に対して勝手に細工したりして URl を汚すのはやめて欲しい」と言うものなのですが、この辺りは Web 業界でどう言ったコンセンサスが取られているか分かっていないので愚痴に留めておきます。

こう言った諸々の事情もありますので、自衛も兼ねて、どんなページであっても一応 canonical 属性を設定しておくのは有効な手段かなと思います。はてなダイアリー では現在のところ canonical 属性は設定されていないようですので、できれば設定できるオプション等を用意して頂けると嬉しいです。

*1:手元で確認したところ、301 ではなく 302 が返ってきてるので、「Moved Temporarily と canonical なら、canonical 優先だろ!」みたいなノリなのでしょうか。

*2:Google Analytics のカスタムキャンペーンは、URL末尾に「utm_source=twitterfeed」が付いたものがインデックスされている! のように、はてなブックマーク以外でも問題となっているケースもあるようです。