FC2ブログから移転する時のrel=”canonical”設定

FC2ブログにrel=”canonical”属性の追加でちょっと悩んだのでメモ。livedoorブログでも応用できそう?
移転じゃなくても改変すれば正規化にも使える。
ついでにmeta refreshの設定。
参考:FC2ヘルプ | FC2ブログ | テンプレート用 変数一覧
目次▼open
FC2ブログのテンプレート用変数
まずは普通にrel="canonical"
の設定をしてみる。
なんか<%topentry_no>
が使われてたりするけど、これを使った設定はお勧めできない。
無料プランで上記変数を使った場合、一ヶ月放置するとこうなる↓
<pre class="lang:xhtml decode:true " title="HTML" > <link rel="canonical" href="http://移転先トップURL/blog-entry-.html" /> <link rel="canonical" href="http://移転先トップURL/blog-entry-xxx.html" /> </pre>
広告もエントリーとして扱われて2重に表示される。また、先に記述したのが優先されるので、全ての記事のリンク先がblog-entry-.html
になってしまう。
なので<%pno>
を使います。
<%pno>を使った記述
実際に記述するとこんな感じ。
<!--permanent_area--> <link rel="canonical" href="http://移転先トップURL/blog-entry-<%pno>.html" /> <!--/permanent_area--> <!--not_permanent_area--> <link rel="canonical" href="http://移転先トップURL/" /> <!--/not_permanent_area-->
<!--not_permanent_area-->
は、記事以外のところですべて表示されるブロックなので、トップページのみの場合は<!--index_area-->
を使う。
タグやカテゴリーも含める場合
<!--index_area--> <link rel="canonical" href="http://移転先トップURL/" /> <!--/index_area--> <!--permanent_area--> <link rel="canonical" href="http://移転先トップURL/blog-entry-<%pno>.html" /> <!--/permanent_area--> <!--category_area--> <link rel="canonical" href="http://移転先トップURL/blog-category-<%cno>.html" /> <!--/category_area--> <!--tag_area--> <link rel="canonical" href="http://移転先トップURL/?tag=<%tag_word>" /> <!--/tag_area-->
これを<head>
タグのどこかにぶち込みます。細かい部分は移転先のURLに合わせて調整。
JavaScriptを使用した設定
テンプレート変数のみの設定でも問題ないけど、大抵は移転先URLのパーマリンク構造が違うと思うので上手くいかない。
移転するだけなら下記ページに記載してあるように、移転先に設置した.htaccess
で正しいURLにリダイレクトさせても問題なさそうです。
参考:FC2ブログからWordpressへ移行するための手順まとめ その2「Wordpressへの誘導」 | Tipstour
参考:FC2ブログからWordPressへの移行に成功した方法
ただ、はてブなどはcanonicalしか見てないので、「このページには別のURLが提示されています。」と出ても移転先のパーマリンク構造が違ったら変なアドレスが指定されちゃいます。
なのでJavaScript+人力で設定。
ページごとに指定し、条件外のページは移転先トップに指定
<!--not_permanent_area--> <link rel="canonical" href="http://移転先トップURL/" /> <!--/not_permanent_area--> <!--permanent_area--> <script type= text/javascript> var link = "<link rel=\"canonical\" href=\""; var siteurl = "http://移転先トップURL/"; var end = "\" />"; var pageurl = ""; switch (<%pno>) { case 28: pageurl = "移転先ページのURL"; break; case 88: pageurl = "123.html"; break; case 90: pageurl = "blog/xxx/test"; break; default : break; } document.write(link + siteurl + pageurl + end); </script> <!--/permanent_area-->
テンプレート変数の場合と同じく<head>
タグ内のどこかにぶち込みます。
case右側の数字がFC2ブログの記事番号、document.write
内は移転先のページURL。
記事が多いと大変だけど…移転先の.htaccess
に記述するよりは楽かな。
アドレスコピペしてドメインを削るのが面倒だったら、var siteurl ="";
となるよう中身を空にして、pageurl =
の中身をhttp://移転先トップURL/blog/xxx/123.html
みたいな感じで記述してもいいです。その場合はdefault : break;
をdefault : siteurl = "http://移転先トップURL/"; break;
に変更してください。
コピペ用↓
<!--not_permanent_area--> <link rel="canonical" href="http://移転先トップURL/" /> <!--/not_permanent_area--> <!--permanent_area--> <script type= text/javascript> var link = "<link rel=\"canonical\" href=\""; var siteurl = "http://移転先トップURL/"; var end = "\" />"; var pageurl = ""; switch (<%pno>) { case 1: pageurl = "移転先ページ"; break; case 2: pageurl = ""; break; case 3: pageurl = ""; break; case 4: pageurl = ""; break; case 5: pageurl = ""; break; case : pageurl = ""; break; case : pageurl = ""; break; case : pageurl = ""; break; case : pageurl = ""; break; case : pageurl = ""; break; default : break; } document.write(link + siteurl + pageurl + end); </script> <!--/permanent_area-->
meta refresh
また、var link =
の部分を下記コードに変えるとmeta refreshに早変わり!下記コードだと5秒後に転送。
var link = "<meta <!--index_area--><!--/index_area--> http-equiv=\"refresh\" content=\"5;URL=";
metaタグの間にテンプレート変数があるのは、直接meta refreshが出力できないため。
参考:サイト(ブログ)のお引っ越し(移転)は301リダイレクトを。出来ない場合は、メタリフレッシュ(meta refresh)とrel=”canonical”を! / もっと知りたいリンゴあれこれ
0秒だとスパム扱いされるかもしれないので注意。
条件に当てはまらない場合は出力しない
上記の方法だと条件に当てはまらなかった場合、すべて移転先トップURLに指定したアドレスがリンク先になります!
条件以外で出力しない場合は
var link = "<link rel=\"canonical\" href=\""; var siteurl = "http://移転先トップURL/"; var end = "\" />"; var html; switch (<%pno>) { case 100: html = link + siteurl + "blog/xxx/123.html" + end; break; default : break; } document.write(html);
こんな感じ?
指定した記事だけ移転する場合、meta refreshは最初に記載した方法で設定し、canonicalはこの方法で指定するのがいいかも。
document.writeを使わない
document.writeを使わない別の記述方法だけど、setAttribute
の挙動がIE7以下だと怪しいらしい。出力してくれればなんでもいいので、今回は上記の方法を使用。
var head = document.getElementsByTagName("head")[0]; var link = document.createElement("link"); var siteurl = "http://移転先トップURL/" var pageurl; link.setAttribute("rel","canonical"); switch (<%pno>) { case 1: pageurl ="blog/xxx/123.html"; break; default : pageurl =""; break; } link.setAttribute("href" , siteurl + pageurl); head.appendChild(link);
JavaScriptで個別に転送
基本的には上記の方法でcanonicalとmeta refresh設定ができ、個別に設定も可能なので必要ないけどついでに。
<script type="text/javascript"> <!-- setTimeout("link()", 10000); function link(){ location.href="http://移転先記事ページ/"; } --> </script>
これを転送したい記事の追記部分に貼り付ける。この場合は10秒で転送。
ひとこと
無料ものは制限があるのでいろいろと面倒です。今のFC2ブログは有料プランで独自ドメインを設定でき、移転先のページに評価を移せるみたいですが、これもやっぱり面倒です。
一時的に有料プランになるのもアリですが、契約が切れた時に面倒な作業が入りそうなので、今回まとめた方法が個人的にはベストなのかなぁと思います。
ただ、すべての記事をmeta refreshなどで転送する場合は、わざわざJavaScriptで面倒なことをしなくてもいいかも。転送しない場合や、一部記事だけ転送する場合は有効かな。
.htaccess
くらい置かせて!
条件に当てはまらない場合は出力しないって言う箇所がかなり参考になりました。
でもこのjavascript本当に実行されているかどうしたら見分けられますか?
いくつか方法があると思いますが、移転前のJavascriptを設置したサイトのページを開いて、はてなブックマークのChrome拡張で確認していました。
移転する必要があるページでは「このページには別のURLが提示されています。」と表示され、条件に指定してないページだと何も表示されないと思います。
他にはdocument.write(html)の下に、alert(html)と記述して実際にどんなソースが出力されているか見る。
console.log()などを記述して、Chromeなどにあるjavascriptコンソールより確認する。
デベロッパーツールから、HTMLが出力されているか確認する。
など…こんな感じでしょうか。
移転しないページは何もアクションが起こらないので、meta refreshを使って移転先のエラーページにすべて飛ぶように設定しておくといいです。