はてなブログからmediumへ移行しました。

(追記)コンテンツ重複に関するケアを後半に追記しました。このブログでは元のブログはそのままに、Medium側にcanonical linkを付与して重複対応をする形で対応しました。

表題のとおり、はてなブログからmediumへブログを移しました。久しぶりだと思っていたら、2016年まる一年更新していなかった…

2017年は移行を期に、もう少し公開ログを残せるようにしたいです。自分に向けてのログブックはあるんですが、公開するようなものでもないので、他者に読んでもらうことを意識したログを残すというのは、やはりそこそこの労力を使うので、続けるのもまた難しいですね。

このmediumですが、とりあえず移行はできましたが、はてなブログからmediumへのmigrationはまだ正式にサポートされていないので、MP形式→WP形式→medium migrationという手順で実施しました。つまり、一旦WordPressにインポートして、エクスポートしなおしたということです。(面倒…)

せっかくなので、移行手順を最初のmedium記事にしておきたいと思います。およそ30分位で完了できました。


僕はWordPressを持っていないので、まずWordPressを立てる必要がありました。公開するようなものではないので、ローカルにサーバを立てればいいのですが、手軽にPHPサーバを立てるのにMAMPを利用しました。

MAMPはMacintosh, Apache, MySQL, PHPのアクロニムです。MAMPをつかってWordPressを立てるのには、こちらの記事を参考にしました。Versionなどは違っていますが、そのままの手順で問題なく完了できます。


WordPressサーバができたら、

  1. はてなブログからMT形式でExport
  2. WordPressにMT形式をImport
  3. WordPressからXMLでExport
  4. 下記(追記)のとおり、canonical linkのためにURLを置換
  5. MediumでWPのXMLからmigration

の順に実行していくだけです。

(追記)コンテンツ重複について

先週読者の方からの質問で、コンテンツ重複についてのケアができていなかったことに気づきまして、SEO対策などを特にしていないブログとはいえ、サイト運営者のマナーとして最低限のケアをするために現状重複を避ける施策を打ちましたので、以下その方法を追記します。

ただし、今回このブログは以前のはてなブログはそのままに、Migrateしたこちらの過去記事群をコピーとして扱うことで重複回避する形となっています。理由は後述します。


Mediumのmigration toolは過去記事ひとつひとつに元記事へのcanonical linkが付与されるそうです。(ここは前回やったときはまったく意識してなかった…)

従って、Import StroyやMigration Toolで記事を持ってくると、自動的にMedium側がコピー、移行元が本記事という扱いになります。

Mediumとしては、このcanonical linkを変更するには、運営に変更リストを送付してくれれば対応してくれると言っているので、もしかしたらRemoveもやってくれるかもしれません。(自分はやってないので確証はありません。)

なので、このブログの移行は上記Mediumのポリシーに則って、元のはてなブログを残したまま、今後の更新をこちらにしていく形の移行とすることにしました。

MediumにMigrateした記事のcanonical link先を正しくする

先に紹介したWordPressを介したMigrationだと、canonical linkのURLが下記のように実際のはてなブログの記事のURLを指さなくなってしまう問題があります。

例:http://localhost:8888/2015/01/01/20150101123456

なので、XMLでWordPressからExportしたタイミングでMediumのMigration Toolを掛ける前にXML内のURLを正しいものに修正します。

はてなブログとWordPressの記事リンクには下記のような一定の置換ルールが見られるため、スクリプトで処理が可能です。

はてなブログ:domain.hatenablog.com/entry/yyyy/mm/dd/xxxxxx
WordPress:wordpress.domain/yyyy/mm/dd/yyyymmddxxxxxx

そこで、ExportされたXMLに下記のような処理を実施しました。まず、ドメイン以外のURLをWordPressからはてなブログの形式に置換します。

$sed -e '/localhost:8888/s/\/[0-9]\{8\}\([0-9]*\)\//\/\1/g' yourblog.wordpress.yyyy-mm-dd.xml > intermediate.xml

次に、ドメインを元のはてなブログのものに置換します。

sed -e 's/localhost:8888/tomoyukim\.hatenablog\.com\/entry/g' intermediate.xml > result.xml

最後にBaseUrlに関するタグが3箇所くらいあるのですが、そこに/entryがついてしまっているので、ここだけマニュアルで取り除きます。

あとはMigration ToolでImportを実施するだけで、Medium側の過去記事すべてに個別のcanonical linkが正しくあたります。念のため、inspectorなどで正しく当たっているか確認してください。

この方法だと旧サイトへのアクセスをMediumへ集約することが難しいので、移行としてはあまりいい形式ではないかもしれません。

元記事を閉じて移行するには?

結局、いまのところ良い方法は見つかりませんでした。

きちんとアクセスのケアをしなくてよいのであれば、下記参考記事の「方法2」はとれるかもしれません。もしくはrobotタグでIndexから外す指定をするか。その場合でも、Mediumの運営にcanonical linkの除去をしてもらう方がいいと思いますが…

個人的に一番のネックは、はてなブログ側のcanonical link付与とリダイレクトでした。

はてなブログは個々の記事にmetaタグの付与ができません。ただし、サイト全体のテンプレートにmetaタグは追加できるため、JSで動的に付与する方法は存在しています。

しかし、これは元記事のリンクと移行先のリンクのURL間に変換ルールがある場合にしか採用できません。

Mediumでは、記事のURLは記事タイトルの最後にランダムなハッシュが付与されているため、このハッシュを動的リンクに付与する方法がありません。(もちろん、各記事のハッシュをテーブル化して埋め込めばできますが、記事数が多い場合は現実的ではないかと)

もし良い方法があれば、後学のために教えて頂きたいです。

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.