WordPressのマルチサイト環境の中で運営していたブログを、異なるドメイン、異なるサーバーのWordPress(マルチサイト)への引っ越しを行いました。本稿では引っ越しするにあたって立案した作戦を示し、実際に行った作業と反省点を示します。幸いにも引っ越し元と引っ越し先で管理者権限がもらえたのでスムーズに引っ越しできましたが、それがないときっと大変です。
はじめに
御覧頂いている悠雀堂ブログは、2014年の6月上旬に引っ越しをしました。
WordPressのマルチサイト環境の中で運営しているブログを、異なるサーバー、異なるドメインのWordPress(マルチサイト)に引っ越すという、恐らく普通の人があまりやらない引っ越しです。
検索でいらっしゃる方は少ないと思いますが、自分自身がまた引っ越す可能性もなきにしもあらず、ですので反省点も含め、忘備録として記事にします。
作戦
作戦としては、以下を考えました。
- データベース(MySQL)のデータをそのまま持って行く。
- DBに入っていない画像等のリソースについては、引っ越し元でtarで固めて、引っ越し先でwgetする。
- 記事内の画像のURLや自分のブログ内へのリンクは、WordPressの管理画面から手作業で書き換える。
- 引っ越し後は、引っ越し元にリダイレクトを設定する。
管理者権限の必要性
この作戦は、引っ越し元と引っ越し先でサイトの管理者権限を利用できる必要があります。1点目はレンタルサーバーのphpMyAdminを利用するのでデータベースのアカウントとパスワードが必要ですし、2点目はサーバーにSSH接続するのにアカウントとパスワードが必要になります。これらはミスにより容易にサイトを破壊できるので、サイトの管理者が他の関係者に教えることはほぼ有りえません。
結論としては、WordPress間でのブログの引越とはいえ、両方の管理者権限がないとうまく行きません。
以下、作戦の各項目に関してコメントします。
データの引っ越しについて
1点目に関しては、WordPressのバージョンの差異でデータベースの構造が違ってしまうと、うまく行かないと考えられます。
幸い引っ越し先ではブログ用に新しいWordPressのインストールを任せてもらえたので、引っ越し元と引っ越し先を最新のバージョン3.9.1に合わせることができました。
もしバージョンを合わせられない場合は、ローカルに環境を作って試してみることになります。しかし引っ越しを2回(あるいはそれ以上)行うことに他なりませんので、かなり面倒です。
リソースの引っ越しについて
2点目に関しては、前述のようにSSH接続する必要があります。これらができない場合は、FTPでファイルを一つずつ、ローカルを介してGET、PUTすることになりますので、これも面倒です。
さらにレンタルサーバーによっては、FTPのアカウントも一つしかもらえない場合もあり、それを教えてもらえない場合は手詰まりです。
記事内のURLの書き換えについて
3点目に関しては、自動でできなくもないのですが、引っ越し元と引っ越し先に迷惑がかからないよう、すべての記事を見直して必要に応じて記事の書き換えを行おうと思っていましたので、URLもそのついでに書き換えることにしました。WordPressは内部で記事の履歴を持っていますが、その履歴は書き換えないようにしたほうがよいかな、とも思いました。
しかし結構面倒でしたので、今ではまるごと書き換えてしまってもよいのでは、と思っています。まるごと書き換えは1点目と関連しますので、管理者権限が必要になります。
リダイレクトについて
4点目に関しては、ページビューが結構あったり、Google等検索エンジンが記事を上位に表示してくれたりする場合には、その資産を引き継ぐために必要になります。しかし既に作成されたブックマークや他サイトからのリンクまで書き換えてもらえるわけではありませんので、暫くはリダイレクトしてもらえたとしても、これらの資産については破棄に等しいです。
作業としては、引っ越し元にブログと同じディレクトリを作成して.htaccessを置くことになります。
引っ越し元での作業
実際の作業について書いていきます。
まずは引っ越し元でデータやファイルをまとめる荷造り作業です。
データベースのエクスポート
作戦の1点目に関して、phpMyAdminでブログのデータをエクスポートします。
ブログIDの確認
最初に自分のブログのブログIDを確認します。
WEBブラウザより引っ越し元サイトのphpMyAdminにログインした後、WordPressが使っているデータベースをメニューより選択します。(データベースの名前はwp-config.phpで確認します。)
すると左にテーブルが表示されるのですが、この中から「(プレフィクス)blogs」というテーブルを選択し、上部メニューの「表示」をクリックしてテーブルの内容を表示します。(「プレフィクス」はWordPressをインストールしたときに指定したテーブルのプレフィクスです。)
domainおよびpathで自分のブログを確認し、同じ行のblog_idを確認します。私のブログIDは「2」でした。
データのエクスポート
次に、左メニューに青い字で表示されている、WordPressのデータベース名をクリックします。そして上部メニューより「エクスポート」を選択します。
エクスポートのリストに全テーブルが選択されていますので、「全選択解除」をクリックして選択解除をします。そして「(プレフィクス)(ブログID)_」で始まるテーブルをすべて選択します。(最初のテーブルをクリックした後に、Shiftを押しながら最後のテーブルをクリック。)
そして、構造の「DROP TABLE / VIEW / PROCEDURE / FUNCTIONを追加」にチェックをします。
ページの一番下に移動し、「ファイルに保存する」「zip形式」(圧縮はしなくても、なんでもよいです。)を選択し、「実行する」をクリックします。
するとブラウザにて指定の形式に圧縮されたファイルがダウンロードされます。
リソースのアーカイブ
次に、引っ越し元にSSHでログインし、WordPressのドキュメントルートに移動します。そこで「wp-content/uploads/sites/(ブログID)」をtarでアーカイブします。
例えば、ブログIDが2のリソースをblog2uploads.tar.gzという名前でアーカイブする場合は以下になります。
tar -czf blog2uploads.tar.gz wp-content/uploads/sites/3
他のディレクトリにもリソースがある場合はそこもアーカイブします。私の場合はブログをWordで書いてアップロードしていましたので、Wordに指定したFTPのディレクトリもアーカイブしました。
上記ではアーカイブをWordPressのドキュメントルートに置いていますが、特定のディレクトリに置きたい場合は移動するかパスを変えて下さい。
引っ越し先での作業
次に引っ越し先での荷解き作業になります。
WordPressのマルチサイト化とブログの作成
引っ越し先では、新たにWordPressをインストールしてそこにサブドメインを割り当て、さらにサブディレクトリ型のマルチサイトにしました。
これについては前回の「WordPressのインストールとマルチサイト化」の通りです。テーマとプラグインも、引っ越し元で利用していたものを有効化しました。
引っ越し先においても、前章のようにphpMyAdminからブログIDを確認しておきます。
データベースのデータの編集
前章でデータベースからエクスポートしたデータを編集し、引っ越し先にインポート出来るようにします。
zip等の書庫に圧縮した場合は解答し、sqlファイルをテキストエディタで開きます。私のブログの記事の数は約50本でしたが、約10Mbyteの巨大なテキストファイルでした。
まずINSERT等のsql文のテーブル名が引っ越し先に対して適当になるよう編集します。具体的にはエディタの置換機能を用い、「(引っ越し元WordPressのテーブル・プレフィクス)(ブログID)_」を「(引っ越し先WordPressのテーブル・プレフィクス)(ブログID)_」に置換します。(テーブルのプレフィクスもオリジナルになるようによく考える必要がありますね。)
「作戦」の章に書きましたように、自ブログへのリンクやリソース等、記事内のURLは手作業で書き換えることを選択しましたが、もし自動で書き換える場合にはここで修正します。
具体的にはこれもエディタの置換機能を使い、「(引っ越し元ドメイン)」を「(引っ越し先ドメイン)」(あるいはホスト名を削除したURLパス)に置換します。URLのホスト名以降のパスが共通であれば良いのですが、そうでない場合は置換文字列と順番をよく考える必要がありますね。
ここでドメイン名を置換しておけば、後述のphpMyAdminでのデータの修正は必要ありません。(今から考えると、ここでドメイン名の置換を行ったほうが手間が少なかったです。)
データのインポート
WEBブラウザより引っ越し先のphpMyAdminにログインし、WordPressが使っているデータベースをメニューより選択します。
そして上部メニューより「インポート」をクリックします。
「ファイルを選択」をクリックして編集したsqlファイルを指定します。(sqlファイルが大きすぎる場合はエラーになることも考えられますので、そのような場合はアーカイブに戻すことが必要になるかもしれません。)
そして右下の「実行する」をクリックします。
成功した場合は上部に「インポートは正常終了しました。」と表示されます。
データの修正
次にインポートしたデータを修正します。もし「データベースのデータの編集」にてドメイン名の置換を行った場合は、本節の作業は必要ありません。
修正するのは「(プリフィクス)(ブログID)_options」テーブルの、コラムoption_nameが「siteurl」と「home」である行のoption_valueです。
ホスト名の修正ですのでテーブルを表示させて修正してもかまいません。以下ではSQL文を実行する方法を示します。(「サイトをローカルにミラーリングする」にて作成したSQL文がありましたので。)
phpMyAdminの上部メニューより「SQL」をクリックします。
テキストエリアに以下を入力し、「実行する」をクリックします。
UPDATE (プレフィクス)(ブログID)_options SET option_value = REPLACE (option_value, '(引っ越し元ドメイン)', '(引っ越し先ドメイン)') WHERE option_name = 'siteurl' || option_name = 'home';
成功した場合は上部に「変更された行数: 2」が表示されます。
他にもドメイン名が含まれているデータが、ウィジットとメニューに関係する個所あったのですが、後の設定の見直しで吸収しました。
リソースの展開
引っ越し先サーバーにSSHでログインし、以下の様なコマンド入力で引っ越し元からアーカイブしたリソースを持ってきて、引っ越し先に展開します。
mkdir -p tmp/site cd tmp/site wget http://(引っ越し元ドメイン)/blog2uploads.tar.gz tar xzf blog2uploads.tar.gz mv wp-content/uploads/sites/(旧ブログID) /(引っ越し先ドキュメントルート)/wp-content/uploads/sites/(新ブログID)
設定の見直し
WordPressの管理画面に入り、設定を上から順に確認します。
修正したところは、テーマの再設定とメニューの再設定の2点でした。
テーマに関しては、現在使っている改造「twenty twelve」を、名前を変えてアップロードしたので再設定が必要になりました。メニューに関しては詳細不明ですが、データにドメイン名が含まれていたことと関連がありそうです。
記事の見直し
最後に記事をすべて見直し、修正をかけました。
WordPressの管理画面の、投稿の編集画面からテキストをテキストエディタにコピペし、検索やら置換やらで修正しました。
ホスト名を含む絶対URLは面倒だと学習したので、ホスト名を含まないURLパスに修正しておきました。(ドメイン名の置換を行った場合はもちろん必要のない作業です。)
修正後は編集エリアにコピペしなおし、プレビューで確認の後に更新をかけました。
以上で引っ越しと確認は終了です。
再び引っ越し元での作業
再び引っ越し元に戻り、作業をします。
リダイレクトの設定
引っ越し元にアクセスが有った場合、引っ越し先に転送されるようにリダイレクトを設定します。これは検索エンジンに引っ越しをお知らせすることにもなります。
ローカルにて、引っ越し前の名前のサブディレクトリを作成し、その中に以下の内容で.htaccessファイルを作成します。
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # リダイレクト. コードは、301:永久、または307:テンポラル RewriteRule ^(.*)$ http://(引っ越し先ドメイン)/(引っ越し先サブディレクトリ)/$1 [R=307,L] </IfModule>
そして引っ越し元のドキュメントルートにFTPでPUTします。
5行目にて、はじめから「R=301」とすると、もしRewriteRuleが間違っており、間違ったURLにリダイレクトされた場合にブラウザがそれを覚えてしまう可能性があります。それがお客さんのブラウザだったらお客さんを1人失うことになりますし、検索エンジンのクローラーだった日にはもっと大変なことになりそうです。
そこでとりあえず「R=307」としておいて、問題がないことを確認した後に「R=301」に書き換えます。
リダイレクトの確認
ブラウザにて、引っ越し前のURLにアクセスしてみます。引っ越し先のURLに転送されていれば成功です。
引っ越し元のお掃除
すべてが問題ないことを確認した後に、引っ越し元をお掃除します。
- FTPにてリソースのアーカイブを削除
- リダイレクトのコードを301にする
- サイトネットワークの管理画面より、ブログの削除
以上で引っ越しは完了です。
リダイレクトのディレクトリは、一定期間置いておいてもらえるようお願いしておきます。
引っ越しの結果
Google検索の結果を見てみると、引っ越し5日後くらいにURLが引っ越し先に変わりだし、一週間後の現在はまだ引っ越し前のURLがぼちぼち残っています。
気になるところは、URLが変わりだしてからアクセス数(ページビュー)が目に見えて落ちてきたことです。
原因は定かではありませんが、引っ越し後サイトのGoogle ウェブマスターツールを見ると、メインの検索ワードでの順位が下がったかな~というような気がします。(単に同じ時期に順位が下る何かがあったかもしれません。)
まあ、4月5月のアクセスの増加が異常で、それが通常運営に戻っただけかもしれませんが。
まとめ
WordPressのマルチサイトの中で運営していたブログを、別ドメイン、別サーバーのWordPress(マルチサイト)に引っ越ししました。
両方管理者権限がもらえたこともあり、作戦通りスムーズに引っ越しできました。
アクセス数の減少が気になりますが、まあ検索結果の上の方に表示されてくれているだけでもありがたいので、焦らずにゆっくりやろうと思います。
(テーマの自作は焦ったほうがいいかな~。)