2026年5月19日
2026年5月19日
WordPressマルチサイトのセットアップ方法|サブディレクトリ型・サブドメイン型の設定手順
WordPress のマルチサイト(ネットワーク)機能を使うと、1つの WordPress のインストールで複数のサイトを作り、まとめて管理できます。プログラムのファイル、プラグイン、テーマ、ユーザーは共通で、投稿や設定はサイトごとに分かれます。
この記事では、既存の WordPress をマルチサイトに切り替える手順を、管理画面と WP-CLI の両方で説明します。手順とコードは WordPress 公式ドキュメント(Create A Network、Before You Create A Network)で2026年10月時点の内容を確認し、WP-CLI のコマンドは WordPress 7.1 の検証環境で実行して確かめています。
マルチサイトが向いている場合・向いていない場合
向いているのは、同じ管理者が、同じプラグインやテーマを使う複数のサイトを運用する場合です。たとえば、部署ごとのサイト、地域や言語ごとのサイト、同じ形式のサイトを多数作るサービスなどです。
次のような場合は、サイトごとに別の WordPress を用意するほうが扱いやすいことがあります。
- サイトごとに使うプラグインやテーマが大きく違う
- サイトごとに管理者やサーバーを分けたい、別々に移転・売却する可能性がある
- 使いたいプラグインがマルチサイトに対応していない
マルチサイトでは、プラグインとテーマを追加・削除できるのはネットワーク全体の管理者(特権管理者)だけです。各サイトの管理者は、特権管理者がインストールしたものの中から有効化を選べます。
サブディレクトリ型とサブドメイン型
ネットワークを作るときに、サイトの URL の形式を選びます。あとから変更するのは手間がかかるので、最初に決めておきます。
| 種類 | サイトの URL の例 | 必要なもの |
|---|---|---|
| サブディレクトリ型 | https://example.com/shop/ |
特になし(パーマリンクが動くこと) |
| サブドメイン型 | https://shop.example.com/ |
ワイルドカード DNS(*.example.com)と、サブドメインを受け付けるサーバーの設定 |
公式ドキュメントでは、次の制限が説明されています。
- サブドメイン型は、WordPress のアドレスが
localhostや IP アドレス(127.0.0.1など)の場合と、https://example.com/wp/のようにパスを含む場合は選べません。 - サブディレクトリ型は、既存のサイトの運用期間が1か月を超えていると選べません(既存の投稿の URL とサイトの URL がぶつかるのを避けるため)。
- WordPress のアドレスに
:80・:443以外のポート番号(:8080など)が付いていると、ネットワークを作れません。 - サブディレクトリ型では、メインサイトの投稿の URL に
/blog/が付きます(例:https://example.com/blog/投稿名/)。
既存の投稿の URL が /blog/ 付きに変わると、検索結果や外部からのリンクに影響します。運用中のサイトをサブディレクトリ型にする場合は、この点を確認してから進めてください。
始める前の準備
- ファイルとデータベースをバックアップする。 マルチサイトに切り替えるとデータベースにテーブルが追加され、元の単一サイトに戻すには手作業が必要になります。
wp-config.phpと.htaccessも別にコピーしておきます。 - パーマリンクが動いていることを確認する。 「設定」→「パーマリンク」で「基本」以外(「投稿名」など)にし、投稿のページが表示されることを確かめます。
- プラグインをすべて無効化する。 ネットワークを作ったあとで有効化し直します。
- WordPress を独自のディレクトリーに置く構成にする場合は、先に済ませる。 マルチサイトにしたあとでは変更しないでください。
管理画面で設定する
ステップ1: WP_ALLOW_MULTISITE を追加する
wp-config.php を開き、/* That's all, stop editing! Happy publishing. */ の行より上に次の2行を追加します。この行が見つからない場合は、require や include で始まる最初の行より上に追加します。
/* Multisite */
define( 'WP_ALLOW_MULTISITE', true );
保存して管理画面を再読み込みすると、「ツール」の下に「サイトネットワークの設置」が表示されます。
ステップ2: ネットワークの種類を選ぶ
「ツール」→「サイトネットワークの設置」を開き、「サブドメイン」か「サブディレクトリ」かを選び、ネットワークのタイトルと管理者のメールアドレスを入力して「インストール」を押します。制限に当てはまる種類は選べないようになっています。
ステップ3: wp-config.php と .htaccess を書き換える
次の画面に、そのサーバー用に作られた wp-config.php と .htaccess の内容が表示されます。表示されたとおりに書き換えます。
wp-config.php には、ステップ1で追加した行の下に次のような定数を追加します(サブディレクトリ型の例)。
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false );
define( 'DOMAIN_CURRENT_SITE', 'example.com' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );
サブドメイン型では SUBDOMAIN_INSTALL が true になります。DOMAIN_CURRENT_SITE などの値は環境によって変わるので、画面に表示された内容を使ってください。
.htaccess は、既存の WordPress のルール(# BEGIN WordPress から # END WordPress まで)を、画面に表示されたルールに置き換えます。公式ドキュメントのルールは次のとおりです。
サブディレクトリ型:
# BEGIN WordPress Multisite
# Using subfolder network type: https://wordpress.org/documentation/article/htaccess/#multisite
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
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]
# END WordPress Multisite
サブドメイン型:
# BEGIN WordPress Multisite
# Using subdomain network type: https://wordpress.org/documentation/article/htaccess/#multisite
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
# END WordPress Multisite
2つは、サイトの URL の先頭部分(shop/ など)を取り除く部分が違います。サブディレクトリ型にサブドメイン型のルールを使うと、サブサイトの管理画面や CSS が表示されなくなります。
ステップ4: ログインし直す
ファイルを保存したら、画面のリンクからログインし直します。ログインできない、画面が崩れるといった場合は、ブラウザーのキャッシュと Cookie を削除してから試します。
管理バーに「参加サイト」が表示され、「参加サイト」→「サイトネットワーク管理」からネットワーク全体の管理画面(https://example.com/wp-admin/network/)に入れれば完了です。
WP-CLI で設定する
SSH で操作できる場合は、WP-CLI の wp core multisite-convert で同じことができます。既存の WordPress をマルチサイトにするコマンドで、データベースのテーブルを作り、wp-config.php に定数を書き込みます。
# いまマルチサイトかどうか(マルチサイトなら終了コード 0、そうでなければ 1)
wp core is-installed --network; echo $?
# サブディレクトリ型に変換する
wp core multisite-convert --title="My Network"
# サブドメイン型に変換する場合
wp core multisite-convert --title="My Network" --subdomains
実行すると次のように表示されます。
Set up multisite database tables.
Added multisite constants to 'wp-config.php'.
Success: Network installed. Don't forget to set up rewrite rules (and a .htaccess file, if using Apache).
最後の行のとおり、.htaccess(Apache の場合)や Nginx の設定は自動では変わりません。前の節のルール、または次の節の Nginx の設定を自分で入れます。
なお、wp core multisite-install は WordPress を新しくインストールすると同時にマルチサイトにするコマンドです。既存のサイトには multisite-convert を使います。
Nginx の場合
Nginx では .htaccess が使われないので、サーバーの設定ファイルにルールを書きます。サブディレクトリ型では、公式ドキュメントにある次のルールを、WordPress の server ブロックに追加します。
if (!-e $request_filename) {
rewrite /wp-admin$ $scheme://$host$request_uri/ permanent;
rewrite ^(/[^/]+)?(/wp-.*) $2 last;
rewrite ^(/[^/]+)?(/.*\.php) $2 last;
}
サブドメイン型では、このルールは不要です。server_name でサブドメインを受け付け、通常の WordPress と同じ try_files を使います。
server_name example.com *.example.com;
location / {
try_files $uri $uri/ /index.php?$args;
}
変更後は sudo nginx -t で構文を確認してから、sudo systemctl reload nginx で反映します。
サブドメイン型の DNS と SSL
サブドメイン型では、サイトを追加するたびに DNS を設定しなくて済むように、ワイルドカードのレコードを作ります。
*.example.com. 3600 IN A 203.0.113.10
HTTPS で使う場合は、*.example.com を含む SSL 証明書が必要です。Let's Encrypt でワイルドカード証明書を取るには DNS-01 認証(DNS に TXT レコードを追加する方式)を使います。レンタルサーバーでは、ワイルドカードのサブドメインや証明書に対応していないことがあるので、事前に確認してください。
サイトを追加する
管理画面では、「参加サイト」→「サイトネットワーク管理」→「サイト」→「新規サイトを追加」で、サイトのアドレス(shop など)、タイトル、管理者のメールアドレスを入力します。
WP-CLI では次のようにします。
# サイトを追加する(サブディレクトリ型なら https://example.com/shop/、
# サブドメイン型なら https://shop.example.com/ になる)
wp site create --slug=shop --title="Shop Site" --email=shop@example.com
# サイトの一覧
wp site list --fields=blog_id,url
blog_id url
1 https://example.com/
2 https://example.com/shop/
特定のサイトに対してコマンドを実行するときは、--url でそのサイトの URL を指定します。
wp option get blogname --url=https://example.com/shop/
プラグイン・テーマ・ユーザーの管理
# ネットワーク全体でプラグインを有効化する(すべてのサイトで有効になる)
wp plugin activate akismet --network
# 特定のサイトだけで有効化する
wp plugin activate hello --url=https://example.com/shop/
# 状態の確認(ネットワーク有効化されたものは active-network と表示される)
wp plugin list --fields=name,status --url=https://example.com/shop/
# テーマをネットワークで使えるようにする(各サイトで選べるようになる)
wp theme enable twentytwentyfive --network
# 特権管理者を追加する・一覧を見る
wp super-admin add editor1
wp super-admin list
マルチサイトでは、ユーザー名に使えるのは半角の小文字と数字だけです(editor-user のようにハイフンを含む名前は作れません)。
サイトを止める・削除する
| 操作 | WP-CLI | 内容 |
|---|---|---|
| 無効化 | wp site deactivate 2 |
サイトを表示しない状態にする。wp site activate 2 で戻せる |
| アーカイブ | wp site archive 2 |
サイトを表示しない状態にする。wp site unarchive 2 で戻せる |
| 削除 | wp site delete 2 |
サイトのテーブルとデータを削除する。元に戻せない |
管理画面の「サイト」一覧の「無効化」も、データは残したまま表示を止める操作です。テーブルごと消す「削除」は元に戻せないので、事前にバックアップを取ってください。
マルチサイトにすると変わること
- サイトごとにデータベースのテーブルが作られます(サイト ID が 2 なら
wp_2_posts、wp_2_optionsなど。接頭辞はwp db prefixで確認できます)。ユーザーのテーブル(wp_users)は全サイトで共通です。 - アップロードしたファイルは、サブサイトでは
wp-content/uploads/sites/サイトID/に保存されます。 - サイトのアドレスとドメインは
wp_blogsとwp_siteのテーブルで管理されます。ドメインを変更するときは、オプションのsiteurl・homeだけでなく、これらのテーブルとwp-config.phpのDOMAIN_CURRENT_SITEも変える必要があります。
まとめ
- 先にサブディレクトリ型かサブドメイン型かを決める。サブディレクトリ型は運用1か月以内、サブドメイン型はワイルドカード DNS が必要
- バックアップを取り、プラグインを無効化してから
WP_ALLOW_MULTISITEを追加し、「ツール」→「サイトネットワークの設置」へ進む - 表示された
wp-config.phpと.htaccessの内容に書き換え、ログインし直す - WP-CLI では既存サイトに
wp core multisite-convert(サブドメイン型は--subdomains)を使い、リライトルールは自分で設定する - サイトの追加は
wp site create、プラグインのネットワーク有効化はwp plugin activate --network
関連記事: