Movable Type5.0から、Wordpress3.0に移行した。
ボクのこのブログがWordPress Me 2.1.3からMovableType4.0に移行したのは2007年のことだ。それ以来、約3年ほどMovableTypeで運用してきたのだが、Wordpress3.0でマルチサイトがサポートされるのを機に再移行(出戻り)を検討していた。MTは嫌いじゃないのだが、バージョンアップのたびに複雑になり気楽にいじれなくなってきたことが主な動機。MTは、次第に商用向けに舵をとりはじめたことで個人ブログ向けには使いにくくなってきた気がするのだ。
そして、WordPress3.0 をインストールしてしばらく試してみた結果、再びWordPressに戻ることを決意。3年ぶりに使ってみたWordPressの進化ぶりは目を見張るほどで、最近のすさまじいまでのWordPressの普及を裏付けるものであった。
今回の移行にあわせて、これまで面倒で手を付けていなかったいくつかの課題に取り組んでみることにした。
ざっとならべると、
[text toolbar=”false” gutter=”false” font_size=”80%”]
1.WordPressへの移行
2.モバイル対応(iPhoneやAndoroid他、スマートフォンへの最適化)
3.ドメイン移転
4.デッドリンクの修正
6.パーマリンクや投稿スラッグの統一
7.分散したサイトの相互リンク
8.feedの適正化
[/text]
といったものである。10年以上ものサイト運用の過程で、システム切り替えや移行の度にちょっとづつ残ってしまっていた問題のゴミ掃除ともいえるかもしれない。とても一度にはできないボリュームなのだが、WordPressへの移行さえ済んでしまえばあとは何とかなりそうだ。
以下、WordPressへの移行についてまとめておく。
■データ移行の方法について
ネット上にはたくさんの移行のための情報があるので不自由はしないが、Movable Type (以下MT)からWordPress (WP)に乗り換えようとするときに必ずネックになってくるのが記事データ移行の問題。MTにもWPにも記事(投稿)のエクスポート/インポート機能があるので一見すんなりいきそうなのだが、そのときに移行できるのは、記事本文・コメントのみ。パーマリンク(URL)、カテゴリー、タグといった付帯情報は一切引き継ぐことができない。最も障害になるのはパーマネントリンク(パーマリンク)の扱いであり、これって致命的な問題なのだ。パーマリンクは、今までに張られたリンクや検索エンジンのインデックスを有効に生かすためのコンセプトであるはずなのに、どちらもそれに対応してないってのはどういうことか?おそらく、ユーザーの流出を防ぐためにわざと対応してないんじゃないかと思う。携帯で言うところの番号ポータビリティと同じだ。
MT・WPそれぞれのソースコードを修正してパーマリンクを引き継がせるなんてことはできるのだけど、この方法は、MT・WPがバージョンアップされて元のソースコード自体が変わってしまうと、どこを修正していいのか分からなくなってしまうのが欠点といえば欠点。
そこで、WPにはサイト移転などのために「WPからWP」の完全なエクスポート/インポート機能が備わっていることに着目。WPからWPへWXR(WordPress eXtended RSS)形式のデータを使ってブログ内容の引継ぎができるのであれば、MTからWXR形式でデータを書き出すことさえできればいいのではないか??と考えた。WPに限った話では無いと思うが、移行用のエクスポートファイルは移行先のツールに合わせたフォーマットの方が良いんじゃないか?と言うわけである。
MT上でWXR形式のデータを書き出せるプラグインのようなものなどはないものか・・と探していたら、頼りになるのはやはり先人の知恵。それが今回採用した手法である、’MovableTypeにWXR形式で書き出すテンプレートを作成してエクスポートする’というものだ。これなら基本的にはバージョンを意識する必要はなく、とてもスマートに移行を行えそう。
結果論からいうと、割とスムーズにインポート出来たんじゃないだろうか。今回はMTからの移行だったが、他のブログサービスやブログツールであっても、なんらかの方法で書き出しが可能ならば同じようにいけると思う。
参考:
「MovableTypeからWordPressに固定リンク込みで完璧に移行する方法」
ただしここで紹介されていたMTテンプレートは、MTのブログ記事で「追記」に記述された分は正しく書き出せなかった。
追記にも対応したテンプレートは、以下のサイトで紹介されている。
■パーマリンクや投稿スラッグの修正
データ移行が解決したら、次はリンクの修正について。
パーマリンクについては、ボクのMovableTypeでは「yyyy/mm/entry-basename.php」だったので、WPでは「/%year%/%monthnum%/%postname%.php」という風にするのが一般的。注意するべきポイントは、WPでは新規投稿の際にタイトルに日本語が使用されているとスラッグも日本語名になってしまうということ。これをMovable Typeのように半角英数、キーワードのあいだはハイフン(-)にして、同じ名前があった場合に2とかにしてくれるようなプラグインもあるので紹介しておく(リンクはこちら)。
話はそれてしまったが、ボクのサイトはこれまで移行を重ねてきたせいか、このパーマリンクの命名がバラバラで統一感がなかった。あいだがハイフンだったり、アンダースコアだったりといった感じだったので、今回の移行を機に修正することにした。ただし、リンクや検索エンジンのインデックスを無駄にはできないので、これは301リダイレクト(後述)を使って継続性に配慮しなければならない。
MovableTypeのパーマリンクを移行
/blog/archives/201006/aaa-bbb-ccc.php
↓
/blog/archives/%year%/%monthnum%/%postname%/
参考:
「パーリンクの問題 http://blogram.net/2010/02/25/permalink/ 」
■RSSのURL修正
・RSSのURLが変更になるため.htaccessに以下を追加
[php font_size=”80%”]
Redirect 301 /atom.xml https://rightdice.com/feed
Redirect 301 /rss.xml https://rightdice.com/feed
Redirect 301 /index.xml https://rightdice.com/feed
[/php]
■画像URLの変更
wp-content/uploads/に画像を格納するために、Movable Typeでエクスポートしたデータ内にある画像URLを、任意のディレクトリに一括置換した。
ボクは「images」というディレクトリに一括で保存していたのでそれを丸ごと持ってくればよいかと思っていたのだけど、サムネイルの画像は「asset_cなんとか」というディレクトリに入ってしまっていた。MTのときの画像リンクを変更したくなければそのまま残しておいても良いかもしれない。今回僕はドメインも移行したので、そのまま残すことはせずに一旦すべてWPの「upload」ディレクトリにメディアインポートした。そして、インポート前にブログ記事(テキストファイル)上でリンクを一括変更し、とりあえずリンク切れが発生しないようにした。あとはのんびりと必要に応じて修正することにしよう。面倒な作業はこれとリダイレクト設定(後述)ぐらいで、他は拍子抜けするぐらいに簡単だった。
■リダイレクトの設定
パーマリンクのところでも少し触れたが、このリダイレクトが今回一番苦労したところかもしれない。長くなりそうなので詳しくは別の機会にあらためようと思うが、簡単にポイントだけ。。。。
リダイレクトにはざっと2つの方法がある。基本的な「Redirect permanentを使う301リダイレクト」と、Apacheのモジュールである「mod_rewrite」を利用する方法だ。ドメインが変わっただけとかファイルのパスや拡張子が変わった程度であればRedirect permanentでも十分なのだが、動的なクエリ付きページの場合(「~/example.php?id=01」など)や、条件判断を伴うような複雑なリダイレクトが必要な場合には、どうしてもmod_rewriteを使わなければならない。ただし、前述のようにmod_rewriteはApacheのモジュールなので、使用しているホスティングサービスでサポートされていることが必要となる。
ボクが使っているCOREサーバーは、mod_rewriteモジュールをサポートしているので、これを使ってリダイレクトの設定を行った。
詳細については、あらためて記述します。
※使用中のサーバーでmod_rewriteがサポートされているかどうかを確認するには、
<?php phpinfo(); ?>
とだけ書いたページ(test.phpなど)を作成してサーバー上におき、ブラウザで開いてみればよい。
参考:
「URLの書き換え Rewrite」
「mod_rewrite URLを書き換えるApacheモジュール」
■その他
・WordPressのプラグインで、WordPress > 404 Notifier ? WordPress Pluginsというのを入れておく。404ヒットがあったときにメールで通知orRSSフィードでお知らせしてくれるので便利だ。