ちぎっては投げるブログ

Programming, Android, RaspberryPi, Digital Devices, Kinkuma Hamster...

WordPressからはてなブログへ引っ越してきた記事を、正しいURLにリダイレクトする

記事をエクスポート&インポートしても、微妙にURLが違う

私のブログの場合では、

WordPress時代:hoge.com/fuga

はてなブログ:hoge.com/entry/fuga

となっていた。

見ればわかるように、はてなブログではentryの文字が追加されている。

これにより、NotFoundになっていた。

f:id:mczh:20161105105005p:plain

旧URLのはてブがリンク切れになっていたので気がつくことができた。

ただし、今回のリダイレクト処理をしたところで、残念ながらはてブ数を引き継げるわけではない。あくまで利用者が元ページを探すのに不便しないようにリダイレクトをする。

どの条件でどうやってリダイレクトするか?

方針としては、存在しないページであり、URLに「entry」文字列を含まない場合に、entry文字列を付与してリダイレクトさせる。

301リダイレクトするのが検索エンジン的には優しいのだが、はてなブログではそこまでいじれないため、Javascriptでリダイレクトする。

ここで問題になるのが、上記のリダイレクト判定のみだとリダイレクト先が存在するかしないかに関わらずリダイレクトされてしまう。

これを解決したかったのだが、Javascriptだとできなさそうなので諦めた。私のJavascript歴は0.5日ぐらいしかないので、本当は出来るのかもしれない。

リダイレクトするJavascriptソースコード

以下をはてなブログのフッターに設置した。

no-entry要素がある場合にはページが存在しないので、URLを取得して置換し、リファラをつけてリダイレクトする。

hoge.comは適宜置き換える。

<script type="text/javascript">
if ($('#main-inner').children().hasClass("no-entry")) {
 var href = window.location.href;
  if ( href.indexOf('entry') == -1) {
   var redirect_url = href.replace( "hoge.com/", "hoge.com/entry/");
   if (document.referrer){
    var referrer = "referrer=" + encodeURIComponent(document.referrer);
    redirect_url = redirect_url + (location.search ? '&' : '?') + referrer;
   }
  location.href = redirect_url;
 }
}
</script>

リダイレクトの書き方は

qiita.com

を参考にした。

実際のリダイレクトの様子

以下にアクセスしてみると、一瞬Not Foundに繋がったのちにリダイレクトされる。

http://denpa-shinbun.com/keitai/tasker-setting-list.html

これでしばらく様子を見てみる。