とよぶ

歌いながらコード書いてます

はてなブログで後からブログを分ける際にcanonicalを付ける

久しぶりのプログラミングネタです。

今、猫ブログを別ブログにしようと思ってます。
何故かと言うと、猫ブログって結構読者層が異なると思っていて、今後猫ブログも定期的に書いていこうと考えたら別ブログにしたほうがよいなと思ったからです。

ですが、ブログを分ける、引っ越しするってなると何が気になるかというと、ブログ自体の重複コンテンツSEOペナルティですよね。

www.seohacks.net

そこで、これを避けるべくcanonicalタグを設置することにしました。

はてなブログには記事ごとにcanonicalを設定する機能がない

考えればアタリマエのことなんですけど、はてなブログとしては他のブログメディアに引っ越しされると困るわけです。
なので、canonical機能を実装すると他ブログへ移行するコストを下げてしまうことになるので、実装しないのが無難ですよねw(実装にもコストかかるし)

そこで、解決策としてはJavascriptでゴリゴリやるしかありません。

ではGoogleのクローラーがJavascriptでいじった後のmetaタグを評価してくれるのかというところですが、以下の記事で検証されているので大丈夫なのではないでしょうか。

giraffyk1.hatenablog.com

という前提のもと、Javascriptを使ってmetaタグを操作していきます。

独自ドメインを設定していたせいでcanonicalがすでに設置されている

はてなブログでは独自ドメインを設定することができます。
僕の場合はAWSのRoute53で遊び半分で取得した .ninja ドメインを設定していたので、僕のブログの中にはすでにcanonicalが設定されていました。。。

なので、

  1. 自分の設定したドメインで設置されているcanonicalを削除
  2. 新たに移行先のブログへのcanonicalを設置

ということを行います。

記事の一番下に以下のスクリプトタグを入れる

作業手順としては

  1. 移行先のブログに記事内容をコピペ
    この時、記事URLはカスタムURLにしておくとよいと思います。
  2. すぐさま以下のスクリプトを記事本文の最後に入れる
  3. 検索してみて確認する
    ※まだ設定したばかりなので後日追記します
<script type="text/javascript">// <![CDATA[
(function() {
var newEntryUrl = "<ここに移行先のブログURLを入れる>";

var links = document.getElementsByTagName("link");
for (var i = 0; i < links.length; i++) {
  if (links[i].rel && links[i].rel.toLowerCase() == "canonical") {
    
    if (/^http:\/\/blog.takasing.ninja/.test(links[i].href)) {
      links[i].parentNode.removeChild(links[i]);
    }
  }
}

var head = document.getElementsByTagName("head")[0]; 
var meta = document.createElement("link");
meta.setAttribute("rel","canonical");
meta.setAttribute("href",newEntryUrl);
head.appendChild(meta);

})();
// ]]></script>

まとめ