はてなブログからはてなダイアリーをインポートすると記事URLのリダイレクトが設定できるのだが、ここで疑問が1つ出てきた。
はてなダイアリーにブログモードができる前は個別記事のURLは例えば http://d.hatena.ne.jp/rna/20050505#p1 のように {日付URL}#{記事ID} の形式になっていた。このようなURLでもちゃんと記事に「リダイレクト」してくれるだろうか?
この場合、記事IDはフラグメント識別子(fragment identifier)なので通常のリダイレクトでは処理されずブラウザにそのまま渡されてブラウザ側に処理が委ねられる。通常は当該IDのある要素の位置にスクロールするが、ページ内の JavaScript でフラグメント識別子を検知して独自の処理を行うものもある。
ということで、既にはてなブログに移行してリダイレクト設定をしている人のブログで試してみた。試してみたのは飯田泰之さんのブログ。たまたま過去記事に旧形式のURLで参照するリンクがあったので… 飯田さん失礼します!
- インフレの起こし方 - こら!たまには研究しろ!! http://d.hatena.ne.jp/Yasuyuki-Iida/20091112#p2
上のリンクを辿ってみると以下のことがわかる(Firefox 61.0.1 で確認)。
- ダイアリーの日付URLは、その日付の記事を列挙したページ http://yasuyuki-iida.hatenablog.com/entries/2009/11/12 にジャンプする
- 記事IDのフラグメント識別子は処理されない(当該記事IDの位置にスクロールしたりしない)
これはちょっと不満。古いリンクをジャンプすると「シンポジウム生中継」(記事ID p1 の記事)の方が見えてしまってリンクの張り間違いかと思ってしまう。
開発ツールで確認すると、ブラウザが日付URLで要求して301で当該日付の記事を列挙したページを返して、それをブラウザが開いている。Firefox の場合リダイレクト後のページの document.location.hash に元のフラグメント識別子を付けてくれるようだが、付けてくれないブラウザもあるらしい。*1
しかし今時のブラウザでは付けてくれるのだから、付いていたらスクロールする、ぐらいのことはやってもらえるとありがたいのだが。というか、記事IDを見出しのid属性に設定したらブラウザが勝手にスクロールしてくれないかな?
*1:Safari5とIE9まででは付けてくれないらしい。参照: https://code.i-harness.com/ja/q/22e342