2026年9月17日
2026年9月17日
WordPressマルチサイトでネットワークエラーが出る原因と解決手順
WordPressマルチサイトで「ネットワーク」に関するエラーが出るとき、原因の多くは、wp-config.php の定数、データベースのサイト情報(wp_site と wp_blogs)、Webサーバーの書き換えルールの3か所のどれかが食い違っていることです。シングルサイトと違い、マルチサイトはこの3つがそろって初めて正しく動きます。この記事では、表示された症状から原因を絞り込む方法と、可能性の高い順に確認・修正する手順を説明します。
作業の前に、ファイル一式とデータベースのバックアップを取ってください。マルチサイトの設定ミスはネットワーク内の全サイトに影響します。可能ならステージング環境で手順を確かめてから本番に反映します。
症状から当たりをつける
マルチサイトのトラブルは、何が表示されるかでおおよその見当がつきます。
- 「データベース接続確立エラー」(Error establishing a database connection)が出るのに、データベースの接続情報は正しい:マルチサイトでは、アクセスされたドメインやパスに対応するサイトが wp_blogs テーブルに見つからない場合にも、この画面が出ます。管理者でログインしている状態や WP_DEBUG が有効な状態では、どのテーブルで見つからなかったかが追加で表示されることがあります。
- ネットワーク管理画面(/wp-admin/network/)やサブサイトの管理画面だけが404になる、CSSが崩れる:書き換えルール(.htaccess や Nginx の設定)がマルチサイト用になっていない可能性が高いです。
- ログインしてもログイン画面に戻される、リダイレクトが止まらない:ドメイン変更やHTTPS化の後に、定数とデータベースのURLが一致していないか、Cookie の設定が合っていない可能性があります。
- ネットワーク管理のメニューが表示されない、「権限がありません」と出る:そのユーザーが特権管理者(Super Admin)として登録されていない可能性があります。
原因1:wp-config.php の定数とデータベースが一致していない
マルチサイトを有効にすると、wp-config.php に次のような定数が入ります。
define( 'WP_ALLOW_MULTISITE', true );
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false ); // サブディレクトリ型なら false、サブドメイン型なら true
define( 'DOMAIN_CURRENT_SITE', 'example.com' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );
このうち DOMAIN_CURRENT_SITE と PATH_CURRENT_SITE が、データベースの wp_site テーブルと、メインサイトの wp_blogs の行と一致している必要があります。ドメインを移した、www の有無を変えた、サブディレクトリから公開ディレクトリ直下に移した、といった作業の後にエラーが出たなら、ここが最有力です。
データベースの中身は、phpMyAdmin などで次のように確認します。テーブル接頭辞が wp_ 以外なら読み替えてください。
SELECT id, domain, path FROM wp_site;
SELECT blog_id, domain, path FROM wp_blogs ORDER BY blog_id;
確認するポイントは次のとおりです。
- domain に http:// や末尾のスラッシュが入っていないこと(ドメイン名だけを入れます)。
- path が / で始まり / で終わっていること。
- メインサイトの domain と path が、DOMAIN_CURRENT_SITE と PATH_CURRENT_SITE と同じであること。
- SUBDOMAIN_INSTALL の値が、実際の運用形式(サブドメイン型かサブディレクトリ型か)と合っていること。途中で形式を変えることは想定されていないため、ここを書き換えて解決しようとしないでください。
各サイトの「サイトアドレス」と「WordPressアドレス」は、wp_options(メインサイト)と wp_2_options、wp_3_options…(サブサイト)の siteurl と home に別々に保存されています。こちらも新しいURLと合っているか確認します。
原因2:ドメイン変更後の置換が一部のサイトにしか効いていない
ドメインを変えた場合、記事中のリンクや画像URLなど、データベースのあちこちに古いURLが残ります。マルチサイトではサイトごとにテーブルが分かれているため、メインサイトだけ置換して他のサイトが古いままという状態がよく起こります。
WP-CLIが使えるなら、ネットワーク全体を対象に置換できます。シリアライズされたデータも正しく扱われるため、SQLで直接 REPLACE するより安全です。最初は --dry-run で件数だけ確認します。
# 変更内容の確認(実際には書き換えない)
wp search-replace 'https://old.example.com' 'https://example.com' --network --dry-run
# 問題なければ実行
wp search-replace 'https://old.example.com' 'https://example.com' --network
wp_site と wp_blogs の domain 列はURLではなくドメイン名だけなので、上の置換では変わらない場合があります。原因1の確認とあわせて、必要なら個別に修正してください。
原因3:書き換えルールがマルチサイト用になっていない
サブサイトの管理画面やCSSが読み込めない場合、多くは書き換えルールの問題です。マルチサイトの .htaccess はシングルサイトのものと内容が違います。サーバー移転やキャッシュ系プラグインの設定変更で、シングルサイト用のルールに戻ってしまうことがあります。
最も確実なのは、ネットワーク管理の「設定」にある「ネットワーク設定」画面(ネットワーク有効化時に表示される画面)に出ているルールをそのまま使うことです。参考として、WordPress.org の公式ドキュメントで案内されているサブディレクトリ型の例を示します。
# BEGIN WordPress Multisite
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
# /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
Nginx は .htaccess を読まないため、サーバーの設定ファイル側にマルチサイト用のルールが必要です。Nginx の設定を変えたら、nginx -t で構文を確認してから再読み込みします。
サブドメイン型では、これに加えて DNS のワイルドカードレコード(*.example.com)と、Webサーバーがすべてのサブドメインを同じ WordPress に向ける設定、そしてサブドメインもカバーするSSL証明書(ワイルドカード証明書など)が必要です。新しく作ったサブサイトだけが開かない場合は、ここを確認します。
原因4:ログインのループとCookieの設定
サブサイトにログインできない、ログイン後に元の画面へ戻される場合は、Cookie の扱いが原因のことがあります。
- wp-config.php に COOKIE_DOMAIN を書いていないか確認します。別ドメインを割り当てたサブサイトがあるのに COOKIE_DOMAIN を固定していると、そのサイトではログインが成立しません。特別な理由がなければ定義しない(または外す)のが基本です。
- HTTPS化の途中で、サイトによって http と https が混在していないか確認します。siteurl と home のURLを https にそろえます。
- ブラウザの古い Cookie が残っていることもあるため、確認時はプライベートウィンドウを使うと切り分けやすくなります。
原因5:特権管理者の権限やデータベース更新が残っている
ネットワーク管理画面に入れない場合は、そのユーザーが特権管理者かを確認します。特権管理者の一覧は wp_sitemeta の site_admins に保存されていますが、シリアライズされた値なので、SQLで直接編集するより WP-CLI を使うほうが安全です。
wp super-admin list
wp super-admin add your-admin-username
WordPress本体の更新後に「ネットワークのアップグレード」が終わっていないと、サブサイトの管理画面でデータベース更新を求められ続けることがあります。ネットワーク管理画面から実行するか、WP-CLIで全サイト分をまとめて実行します。
wp core update-db --network
それでも分からないときの調べ方
wp-config.php で WP_DEBUG と WP_DEBUG_LOG を有効にし、wp-content/debug.log に出るエラーを確認します。あわせて、Webサーバーのエラーログ(Apache の error_log、Nginx の error.log)も見ると、書き換えルールのループや権限の問題が記録されていることがあります。
ネットワーク有効化に対応していないプラグインが原因の場合もあります。ネットワーク管理の「プラグイン」でネットワーク全体に有効化しているものを、ステージングで1つずつ無効化して確かめます。管理画面に入れなければ、FTPで wp-content/plugins 内のフォルダ名を変えると無効化できます。
なお、管理画面のメニュー名や WP-CLI のオプションは、バージョンによって変わることがあります(2026年10月現在)。
まとめ
- マルチサイトは、wp-config.php の定数、wp_site・wp_blogs のサイト情報、書き換えルールの3つがそろって動きます。エラーが出たら、まずこの3か所の食い違いを疑います。
- 「データベース接続確立エラー」は、マルチサイトではサイト情報が見つからない場合にも出ます。接続情報だけでなく wp_blogs の domain と path を確認します。
- ドメイン変更後は wp search-replace を --network 付きで、まず --dry-run から実行します。
- 書き換えルールは「ネットワーク設定」画面に表示されるものを使い、サブドメイン型ではDNSとSSL証明書も確認します。
- 作業前のバックアップと、ステージングでの確認を徹底します。