pushState()とhead要素の子

ページの一部だけ差し替えてpushState()で表示されるURLだけを更新という手法が広まりしばらく経った。全般的に素晴らしい仕組みで、みんなどんどん使えば良いと思うのだけど、head要素の子のことをちょっと気にして欲しいかなと思う。

よく見る駄目なケースはRSS Auto-discoveryが死ぬもの。例えばMediumのトップページにはRSS Auto-discoveryはないので、Firefoxの購読ツールバー・ボタンはもちろん無効のまま。そこからカテゴリやユーザーのページに移動しても無効のままなので、RSSが無いように見えるが実際はある。コンテンツ部分の差し替えのみで、rel="alternate"を指定したlink要素が追加されないため、有効にならない。これではRSSを購読しようと思ってもなかなか難しい。

また、FirefoxでMediumで特定のカテゴリを直接開いた場合は購読ツールバー・ボタンは有効になるが、こちらでも問題が起きる。例えばその状態からある記事を読んで興味をもったので、その記事を書いた人のページに移動しRSSを購読しようとしたとする。この場合、最初に開いたカテゴリのRSSが購読される。これも適切にhead要素内が更新されないことによるバグと言って良い。

ブラウザー(や拡張)側のサポートも必要なのかもしれないので一概には言えないけど、少なくともhead要素内のことも意識して、必要かもしれないと思ったらちゃんと更新した方がベターだと思う。実装もID属性を振っておき、削除か追加を適切に行うだけなので難しくない。