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/ 付きに変わると、検索結果や外部からのリンクに影響します。運用中のサイトをサブディレクトリ型にする場合は、この点を確認してから進めてください。

始める前の準備

  1. ファイルとデータベースをバックアップする。 マルチサイトに切り替えるとデータベースにテーブルが追加され、元の単一サイトに戻すには手作業が必要になります。wp-config.php と .htaccess も別にコピーしておきます。
  2. パーマリンクが動いていることを確認する。 「設定」→「パーマリンク」で「基本」以外(「投稿名」など)にし、投稿のページが表示されることを確かめます。
  3. プラグインをすべて無効化する。 ネットワークを作ったあとで有効化し直します。
  4. 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

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲