WordPressマルチサイトの移行
完全手順ガイド
WordPress マルチサイト(Multisite)は1つのWordPressで複数サイトを管理できる機能です。移行は通常の単体サイトより複雑で、ネットワーク全体の移行・個別サイトの分離独立・サブドメイン型とサブディレクトリ型の切り替えなど複数のパターンがあります。このページではそれぞれの手順を詳しく解説します。
📋 目次
⚠️ 1. マルチサイト移行の特殊性と注意点
マルチサイトは通常のWordPressと異なる構造を持つため、移行時には以下の点を特に注意してください。
- All-in-One WP Migration のマルチサイト版(有料)が必要です(無料版はマルチサイト非対応)
- DBテーブルが通常より多く(wp_2_posts, wp_3_posts…のようにサイトIDごとにテーブルが分かれる)、phpMyAdminでの直接操作が必要になることが多い
- マルチサイトのサブドメイン型を使っている場合、移行先サーバーでワイルドカードサブドメインの設定が必要
- プラグイン・テーマはネットワーク全体で管理されているため、個別サイト分離時は再インストールが必要
マルチサイトのDB構造
マルチサイトでは、メインサイトが通常の wp_posts、wp_options 等を使い、追加サイトは wp_2_posts、wp_2_options(サイトID=2の場合)というテーブルで管理されます。
| テーブル | 内容 |
|---|---|
wp_blogs | ネットワーク内の全サイト一覧 |
wp_site | ネットワーク情報 |
wp_sitemeta | ネットワーク設定 |
wp_posts | メインサイト(ID=1)の投稿 |
wp_2_posts | サイトID=2の投稿 |
wp_2_options | サイトID=2の設定 |
🗂️ 2. 移行パターンの種類
🚀 3. パターンA:ネットワーク全体を別サーバーへ移行
マルチサイトネットワーク全体を新しいサーバーに移行する手順です。基本的な流れはシングルサイトの移行と同じですが、マルチサイト対応の点で異なります。
ファイル+DB全体をバックアップする
UpdraftPlusのマルチサイト対応版またはFTP+phpMyAdminで全ファイルと全DBテーブルをバックアップします。
サブドメイン型の場合:移行先サーバーでワイルドカードサブドメインを設定
サブドメイン型マルチサイト(site2.example.com等)を使っている場合、移行先サーバーでDNSのワイルドカード設定(*.example.com)が必要です。サーバーパネルのDNS設定またはドメインレジストラのDNS管理で設定します。
新サーバーのPHPバージョンを確認する
使用しているプラグイン・テーマが新サーバーのPHPバージョンと互換性があるか確認します。
新サーバーにWordPressをインストールする
新サーバーに通常通りWordPressをインストールします(この後インポートで上書きされます)。
wp-config.phpにマルチサイト設定を追加する
新サーバーのwp-config.phpに以下を追加してマルチサイトを有効化します:
/* マルチサイト */
define( 'WP_ALLOW_MULTISITE', true );
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false ); // サブディレクトリ型の場合
// define( 'SUBDOMAIN_INSTALL', true ); // サブドメイン型の場合
define( 'DOMAIN_CURRENT_SITE', 'example.com' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );方法①:All-in-One WP Migration マルチサイト版を使う(推奨)
有料のマルチサイト拡張を購入してネットワーク全体をエクスポート→インポートします。最も手順が少なく安全です。
方法②:FTP+phpMyAdminで手動移行する
FTPで全ファイルを新サーバーにアップロードし、phpMyAdminで全テーブルをエクスポート→インポートします。wp-config.phpのDB接続情報を新サーバー用に書き換えます。
DBのURL一括置換を行う(ドメイン変更がある場合)
ドメインが変わる場合は全テーブルに対してBetter Search Replaceを実行します。マルチサイトでは wp_2_options、wp_3_options 等のテーブルも対象になるため「全テーブルを選択」が重要です。
.htaccessにマルチサイト用のRewriteRuleを設定する
マルチサイト用の .htaccess は通常のWordPressと異なります。管理画面 → ネットワーク設定 の画面に表示されるコードをコピーして .htaccess に貼り付けます。
サブディレクトリ型の.htaccess例:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# マルチサイト用
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]各サイトが正常に表示されることを確認する
メインサイト・各サブサイトにアクセスして正常表示を確認します。ネットワーク管理画面(/wp-admin/network/)にもアクセスできることを確認します。
✂️ 4. パターンB:個別サイトをマルチサイトから独立させる
マルチサイト内の特定のサブサイトを抜き出して、独立した単体WordPressとして運用します。最も複雑なパターンです。
wp_2_posts のように独自のプレフィックスを持ちます。独立化には以下の作業が必要です。- DBテーブルのリネーム(
wp_2_posts→wp_posts) - テーブル内のブログIDの整合性調整
- wp_usermeta・wp_users の移行(ネットワーク共通のためコピーが必要)
- プラグイン・テーマの再インストール
サブサイトのIDを確認する
ネットワーク管理画面 → サイト一覧 でサブサイトのURLにある数字がサイトIDです。例:/wp-admin/network/site-info.php?id=2 ならサイトID=2。
対象サイトのDBテーブルを確認する
phpMyAdminで wp_2_posts、wp_2_options、wp_2_postmeta など「wp_{サイトID}_」で始まるテーブル一覧を確認します。
新サーバーに通常のWordPressをインストールする
独立させるサイトのドメインで新サーバーにWordPressをインストールします。
プラグイン・テーマを再インストールする
マルチサイトで使用していたプラグイン・テーマを新WordPressに手動でインストールします。
対象サイトのテーブルをエクスポートする
phpMyAdminで wp_2_ プレフィックスのテーブルをすべてエクスポート(SQL形式)します。
SQLファイルのテーブル名プレフィックスを置換する
テキストエディタ(VSCodeなど)でエクスポートしたSQLファイルを開き、wp_2_ を wp_ に一括置換します。
-- 置換前(SQLファイル内)
CREATE TABLE `wp_2_posts` ...
INSERT INTO `wp_2_posts` ...
-- 置換後
CREATE TABLE `wp_posts` ...
INSERT INTO `wp_posts` ...wp_users と wp_usermeta をコピーする
ユーザーテーブルはネットワーク共通のため、必要なユーザーのみをphpMyAdminで抽出して新DBにインポートします。
変換したSQLを新DBにインポートする
phpMyAdminで新DBに変換済みSQLをインポートします。
Better Search ReplaceでURL置換する
旧マルチサイトのURLを新サイトのURLに置換します。
wp site export コマンドを使うとサブサイトのエクスポートが容易になります。ただしWP-CLIのマルチサイト対応コマンドは複雑なため、WP-CLI経験者向けです。詳細はWP-CLI公式ドキュメントを参照してください。➕ 5. パターンC:単体サイトをマルチサイトに追加する
既存の単体WordPressをマルチサイトネットワークのサブサイトとして組み込みます。
WordPress標準のエクスポート機能を使う
単体WPの管理画面 → ツール → エクスポート → すべてのコンテンツ でXMLファイルをエクスポートします。
ネットワーク管理画面で新サブサイトを作成する
ネットワーク管理 → サイト → 新規追加 で新サブサイトを作成します。
新サブサイトにWordPressインポーターでXMLをインポートする
新サブサイトの管理画面 → ツール → インポート → WordPress でXMLファイルをインポートします。
画像などのメディアファイルをFTPで移行する
XMLインポートでは画像が自動取得されない場合があります。FTPで元サイトの wp-content/uploads/ のファイルを新サブサイトの対応ディレクトリにコピーします。
テーマ・プラグインの設定を再構成する
テーマのカスタマイズ設定やプラグインの設定はXMLインポートでは移行されません。手動で再設定します。
✅ 6. 移行後の確認チェックリスト
- ☑ネットワーク管理画面(/wp-admin/network/)にアクセスできる
- ☑メインサイトが正常に表示される
- ☑全サブサイトが正常に表示される
- ☑サブドメイン型の場合:ワイルドカードサブドメインが機能している
- ☑各サイトの管理画面にアクセスできる
- ☑画像・メディアファイルが正常に表示される
- ☑プラグインがネットワーク/個別サイトで有効化されている
- ☑パーマリンク設定を各サイトで保存し直した
- ☑ドメイン変更がある場合:旧URLから301リダイレクトが設定されている
- ☑Search ConsoleにメインサイトとサブサイトのURLを追加済み
🔨 7. よくあるトラブルと対処法
ワイルドカードサブドメインの設定が不足しています。DNSのAレコードに *.example.com を追加するか、サーバーパネルのサブドメイン設定でワイルドカード(*)を有効にしてください。またApacheのVirtualHostにも ServerAlias *.example.com が必要です。
マルチサイトの画像はサイトIDごとに wp-content/uploads/sites/2/ のようなディレクトリに保存されています。FTPでこのディレクトリの内容を新サイトの wp-content/uploads/ に正しくコピーし、DB内の画像URLも置換してください。
wp-config.phpの MULTISITE 定数が正しく設定されていないか、.htaccessのマルチサイト用ルールが反映されていません。管理画面 → ネットワーク設定 に表示されるwp-config.phpと.htaccessのコードを再コピーして適用してください。
マルチサイトのユーザーテーブル(wp_users, wp_usermeta)はネットワーク全体で共有されています。wp_usermeta の capabilities キーが wp_2_capabilities のようにサイトIDつきになっている場合があります。phpMyAdminでwp_usermeta テーブルを確認し、wp_capabilities に修正してください。
Better Search Replaceで「全テーブルを選択」にしていなかった可能性があります。wp_2_options、wp_3_options 等の各サブサイトのoptionsテーブルに旧URLが残っています。全テーブルを対象に再度置換を実行してください。
❓ 8. よくある質問(FAQ)
Q. マルチサイトを通常のシングルサイトに戻すことはできますか?
公式にはマルチサイトを「元に戻す」機能はありません。パターンBの手順でサブサイトを独立させた後、ネットワークのメインサイトについてはwp-config.phpからマルチサイト定数を削除してシングルサイト化することは可能ですが、詳細なDB整理が必要です。
Q. マルチサイトの移行にはどのプラグインが使えますか?
All-in-One WP Migrationのマルチサイト拡張(有料)、Duplicator Pro(有料)が対応しています。無料プラグインはほとんどがマルチサイト非対応のため、手動移行かWP-CLIによる移行が必要になります。
Q. サブドメイン型からサブディレクトリ型に切り替えられますか?
可能ですが、既存の全サブドメインURLが変わるため各サイトへの301リダイレクト設定と全サブサイトのURLのDB置換が必要です。wp-config.phpの SUBDOMAIN_INSTALL の値を変更するだけでは動作しません。切り替えより新しいマルチサイトを構築して移行した方が確実な場合が多いです。
Q. マルチサイトの移行を業者に依頼する場合の相場は?
マルチサイトの移行は技術的に複雑なため、専門業者への依頼が現実的な場合もあります。サイト規模や作業内容によりますが、一般的に5〜30万円程度が相場です。「サイト引越し屋さん」などのWordPress移行専門サービスがあります。