はてなブログカスタマイズメモ

はてなブログのカスタマイズ、書き方などのメモ、チートシートです。

記事のURLを変更したときなどに新しい記事URLへリダイレクトする方法


URLを間違えてつけてしまったり、変更したいときなどはあると思います。

そういうときにただカスタムURLを変更すると、旧URLはリンク切れとなってしまうので困ります。

そこで、せめて旧URLにきたものを転送したい場合の方法をメモしておきます。

headのJavaScriptで転送する

はてなブログでは、ブログの設定の「詳細設定 > headに要素を追加」より、headにJavaScriptを追加できます。

ここで次のように判定を入れることで、旧URLでのアクセスを新URLに転送できます。

旧URLは「/entry/2018/01/21/130159」のように、トップからのパスを指定します。

<script type="text/javascript" language="javascript">
if ( (new RegExp( "(旧URLのentry)$" )).test(window.location.pathname)) {
  window.location.pathname="(新URLのentry)";
}
</script>

具体的にはこんな感じで。

<script type="text/javascript" language="javascript">
if ( (new RegExp( "entry/2018/01/20/184219$" )).test(window.location.pathname)) {
  window.location.pathname="entry/2018/01/20/novel-ryuoh-no-oshigoto-7";
}
</script>

パスの後方一致を正規表現で取って転送するようにしてみました。「$」は正規表現の後方一致になるので、消さずに入れて下さい。

(if文をカスタマイズすることでいろいろなパターンに対応できると思います。そのあたりはケースバイケースで)

この方法ですと旧URL用の記事を作成しなくてよいのでスマートですが、対象が多くなるとこの判定部分が増えていくことになりますので厄介。

旧URLで記事を作成して新URLに転送する

URLを転送(リダイレクト)する場合、本来であればサーバー側で301を返してくれると良いのですが、はてなブログでその設定は見当たりません。

なので「移転しました」記事を作成し、そこからジャンプさせるようにします。

「移転しました」記事のカスタムURLは、旧URLを設定して下さい。

この方法を使うと、旧URLの記事がひとつリダイレクト用に増えてしまうことになり、新着に乗ると邪魔かもしれません。

「投稿日時」を変更すると過去記事にできるので、そのあたりを調整するとよいと思います。

記事の差し替えについて

ここで行っていることは記事の差し替えみたいなものです。次の記事も参考にしてみて下さい。

hatebu-memo.scriptlife.jp

JavaScriptでリダイレクトする

アクセスしてきたらすぐにJavaScriptが実行され、ページを移動させるようにします。

次のJavaScriptを記事の最初に書いておくと指定したURLにジャンプします。

<script type="text/javascript" language="javascript">
  var redirect_url = "(移動先のURL)"
  location.href = redirect_url;
</script>

metaタグでリダイレクトする

次のmetaタグを記述しておくとジャンプしてくれます。

<meta http-equiv="Refresh" content="0;URL=移転先URL">

ただ本来はheadタグ内に書くべきものなので、解釈してくれるかはブラウザ依存のようです。

私はJavaScriptがオフの場合に備えて、一応書いておいてみました。

移転のお知らせを書いておく

JavaScriptが効かない場合は移転してくれませんので、手動での案内も出しておきます。

これは普通に「移転しました。移転先はこちら」くらいのもので、移転先URLへのリンクがあれば良いと思います。

トップにこのスクリプトが載らないように注意

トップやカテゴリ一覧などでこのスクリプトが動いてしまうと、強制的にリダイレクトされることになります。

なので構成としては、上にお知らせ記事を書き、「続きを読む」を挟んでからスクリプトとする必要があります。

SEO的にはたぶん微妙なので一時的措置として考える

301リダイレクトと違って、ページを開いた後からの転送になるため、SEO的にはたぶん微妙な挙動だと思います。

平行してGoogleのSearch Consoleからインデックスを消すなどしつつ、影響が少なくなったら404にしてしまうほうがいいかもしれません。

公開まもない記事だと影響少ないから良いですが…旧URLへのリンクなどが広まっていたりするのであれば、また判断が分かれるかもしれません。

はてなブログ側で対応して、301リダイレクトを設定できるようになると良いのですが…