2017年3月8日水曜日

「さくらのブログ」から「Blogger」へ引っ越すときの“canonical”に関する処理

投稿データのエクスポートとインポート

さくらのブログであるブログを書いていたけど思うところあってBloggerに引っ越した。(もちろんこのブログのことではない)

さくらのブログで書いていた投稿をエクスポートして形式と時間を変換してBloggerにインポートした。さくらのブログのエクスポートはMT形式、Bloggerのインポートできる形式はXMLなので変換してくれるサイトを使わせてもらった。また投稿時間もタイムゾーンの関係でずれてるのでこれも変換してくれるサイトを使わせてもらった。
そうしてインポートした投稿はとりあえず下書き状態にしておいた。

検索エンジンにパクリでなく引っ越しであることを明示する方法の検討

さて、同じ内容のブログがふたつになったときはパクリではないことやどちらがメインであるかを検索エンジンにわかるようにしておいたほうが良いということなので対策をとらないといけない。
引っ越しの時点での投稿数は100くらいで見ている人も少ない自己満足的なブログなのでそんなこと気にしなくてもいいじゃないかとは思ったけど技術的興味もあったし。

理想的なのは301ダイレクトだそうだけどそれはしなかった。.htaccessファイルの書き方をちゃんと理解するのに時間がかかりそうだったし、たぶんだけどさくらのブログではできない。それに別のウェブリブログで書いたブログの引っ越しも考えていてそれもこのやり方は使えないから。

rel="canonical"を使うことにしたけど

HTMLの編集できないブログでもJavaScriptで埋め込むことができるということで
<link rel="canonical" href="">
を挿入することにした。

このやり方は"引越し元の投稿"と"引越し先の投稿のURL"を1対1で対応させる必要がある。最初に知った方法では「引っ越し元の記事のタイトルが一致した配列から引越し先URLを取り出して上記href部分に埋め込む」という形式だった。
これだと"引越し元のタイトル一覧"と"引越し先URL一覧"を用意する必要がある。これだと投稿件数が多いと大変なのでもう少しいい方法を探した。

さくらのブログではHTMLの編集が可能でここに"投稿のタイトルを取得する変数"を使えば"引越し先URL"一覧があればなんとかなりそう。
と思ってarticle.subjectを使って簡単なJavaScriptで試したところエラーになってしまった。article.XXXXXは<head></head>のあいだでは使えないからだった。
投稿タイトルの代わりに日時を取得して…とも考えたけど同じ理由で使えない。

本来の使い方と違うけどkeywordsを使う

さらにいろいろ調べていくうちにシーサーブログで無理やりWordpressのカスタムフィールドに相当するものを使う方法というの見つけた。それは検索エンジンは見ていない<meta keywords="" content="">に使うためのキーワード入力欄を使う方法だった。
なるほどこれは使える。
さくらのブログも同じブログシステムだしキーワード入力欄に入力した文字列はextra_keywords変数に入り<head>の部分でもちゃんと使える。

そしてこの文字列と同じになるように引越し先投稿のURLのパーマリンクを設定すれば"引越し先投稿のURL"の一覧も必要ないということに気づいた。

さくらのブログでは投稿記事のURLはランダム風のIDにしかならないのでこれを"引越し元のキーワード入力欄"と"引越し先投稿のパーマリンク"に設定すればいい。
ただこれだと一覧を用意する必要はないけれど全記事に対してひとつひとつ設定をしていくことになるので時間と手間がかかる。

Blogger側で設定するときの注意点

引越し先となるBlogger側でのパーマリンクは"/yyyy/mm/設定した値.html"となるので引越し元のキーワード入力欄には "yyyy/mm/設定した値"を入力する必要がある。

またBloggerでパーマリンク設定したあとそのまま保存や公開すると投稿日時がその時点のものになってしまうのでスケジュール入力欄で"日付と時刻を設定"にチェックを入れておく必要がある。インポートしたデータの日時になっているので改めて入力する必要はない。

実施した手順

ということで以下のような手順で設定した。

a.引越し元のさくらのブログ

  1. 記事の編集画面を開く。
  2. URLから記事IDをコピー
  3. それをキーワード入力欄に"yyyy/mm/記事ID"という形式で入力。
    例 "2017/03/123456789"

b.引越し先のBlogger

  1. 記事の編集画面を開く
  2. コピーした記事IDをカスタムパーマリンクに設定する。
  3. スケジュール(公開日時を引越し前の投稿のものにする)


a.b.を繰り返してすべての記事に対して行う。

さくらのブログの設定→デザイン→HTMLでHTMLの編集画面にして<head></head>の間に
<%- if:page_name eq 'article' -%><%- if:extra_keywords -%><link rel="canonical" href="引越し先BloggerのURL/<% extra_keywords %>.html" /><% /if -%><% /if -%>
を挿入する。

感想

投稿数が100くらいだったのでぎりぎり手作業の繰り返しができたけどもっと多いときはやっぱり一覧を用意する方式がいいでしょうね。