何が起きているのか
yourdomain.com/wp-login.php を開き、正しい認証情報を入力しても、ダッシュボードにたどり着けず、次のエラーが表示されます:
ERROR: Cookies are blocked or not supported by your browser. You must enable cookies to use WordPress.
ほとんどの場合、ブラウザ自体に問題はありません。このメッセージは誤解を招きます。真の原因はURLの不一致です。WordPressはあるアドレスで動いていると認識している一方、ブラウザは別のアドレスにアクセスしています。ログインクッキーが誤ったドメインにセットされ、即座に破棄されてしまいます。
根本原因(頻度順)
- データベース内のURLの不一致 —
wp_optionsテーブルのsiteurlまたはhomeオプションが、スキームやサブドメインの異なるアドレスを指している(例:http://で保存されているがhttps://でアクセスしている、またはwww.あり・なしの違い)。 - wp-config.php の
COOKIE_DOMAINが誤っている — 古い、または不正な定数がクッキーのスコープを上書きしている。 - リバースプロキシ・CDNが正しいホストヘッダーを転送していない — WordPressがブラウザとは異なるホスト名を認識している。
- サードパーティのキャッシュまたはセキュリティプラグインが
Set-Cookieヘッダーを除去している。 - ブラウザが本当にクッキーをブロックしている — まれなケースだが、最も素早く除外できる。
ステップ1 — 60秒でブラウザの問題を除外する
プライベート・シークレットウィンドウを開きます(Chrome/Edge では Ctrl+Shift+N、Firefox では Ctrl+Shift+P)。そこからログインしてみてください。成功した場合、問題はブラウザレベルです:不正な拡張機能または厳格なクッキー設定が原因です。対象ドメインのサイトデータをクリアしてください:
- Chrome:DevTools → Application → Storage → サイトデータを消去。
- Firefox:DevTools → ストレージ → Cookie → ドメインを右クリック → すべて削除。
シークレットモードでも失敗する場合は、問題はサーバー側にあります。ステップ2に進んでください。
ステップ2 — データベースの siteurl と home を確認する
phpMyAdmin または WP-CLI で次のコマンドを実行します:
# WP-CLI(最も手軽)
wp option get siteurl
wp option get home
両方の値が、ブラウザのアドレスバーに表示されているものと完全に一致している必要があります。スキーム(https か http か)、サブドメイン(www あり・なし)も含めて1文字でも違えばクッキーが壊れます。不一致を修正するには:
wp option update siteurl 'https://yourdomain.com'
wp option update home 'https://yourdomain.com'
wp-admin にまったくアクセスできない場合は、wp-config.php で一時的に値を上書きします:
define( 'WP_SITEURL', 'https://yourdomain.com' );
define( 'WP_HOME', 'https://yourdomain.com' );
ファイルを保存して、再度ログインを試みてください。
ステップ3 — wp-config.php の COOKIE_DOMAIN を削除または修正する
wp-config.php 内で以下の定数を検索します:
grep -E 'COOKIE_DOMAIN|COOKIEPATH|SITECOOKIEPATH' /var/www/html/wp-config.php
古いドメインを指す COOKIE_DOMAIN が見つかった場合は、コメントアウトします:
// define( 'COOKIE_DOMAIN', 'old-domain.com' ); // ← ここをコメントアウト
WordPressは siteurl からクッキードメインを自動的に導出します。COOKIE_DOMAIN が必要なのは、サブドメイン間でクッキーを共有するマルチサイト構成の場合だけです:
// シングルサイトの場合 — COOKIE_DOMAIN は設定不要。
// *.yourdomain.com でクッキーを共有するマルチサイトの場合:
define( 'COOKIE_DOMAIN', '.yourdomain.com' ); // 先頭のドットに注意
ステップ4 — プロキシ背後での http/https の不一致を確認する
やや気づきにくい問題です。サーバーはHTTPSを強制しているが、WordPressの siteurl がまだ http:// のままになっている場合があります。ロードバランサーがPHPにリクエストが届く前にSSLを終端しています。PHPの $_SERVER['HTTPS'] が空になるため、WordPressはクッキーに Secure フラグをセットしないか、まったく別のドメインにセットしてしまいます。
修正するには wp-config.php に以下を追加します:
// PHPがHTTPを認識していてもHTTPSが有効であることをWordPressに伝える
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ) {
$_SERVER['HTTPS'] = 'on';
}
Nginxでは、upstreamブロックでそのヘッダーを確実に転送するようにします:
proxy_set_header X-Forwarded-Proto $scheme;
ステップ5 — ファイルシステム経由でプラグインを無効化する
まだ解決しない場合、セキュリティプラグインやキャッシュプラグインが Set-Cookie ヘッダーを除去している可能性があります。よくある原因:Wordfence、WP Super Cache、W3 Total Cache、Cloudflare APO。wp-admin を使わずに全プラグインを一括で無効化します:
# pluginsフォルダをリネームして全プラグインを一括で無効化
mv /var/www/html/wp-content/plugins /var/www/html/wp-content/plugins_disabled
ログインできましたか?できた場合はフォルダを元に戻し、プラグインを1つずつ有効化して原因を特定します:
mv /var/www/html/wp-content/plugins_disabled /var/www/html/wp-content/plugins
問題のプラグインが見つかったら、「ログイン中のユーザーをキャッシュする」や「匿名ユーザーのクッキーを削除する」といった設定を探してオフにしてください。
ステップ6 — クッキーが実際にセットされているか確認する
DevTools(F12)→ Networkタブを開き → ログインフォームを送信 → wp-login.php のPOSTリクエストをクリック → Response Headers を確認します。次のような内容が表示されるはずです:
Set-Cookie: wordpress_sec_... ; path=/wp-content/plugins; secure; HttpOnly
Set-Cookie: wordpress_logged_in_... ; path=/; secure; HttpOnly
正しいドメインとパスでヘッダーが存在している場合、WordPressは正常に動作しています。問題はクライアント側(ブラウザのポリシー、拡張機能、またはiframe)にあります。Set-Cookie がまったく存在しない場合、プロキシまたはキャッシュ層がクッキーを除去しています。
Nginxの場合、ログインページ専用のブロックを追加してキャッシュを完全にバイパスします:
location = /wp-login.php {
fastcgi_cache_bypass 1;
fastcgi_no_cache 1;
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
確認手順
- 対象ドメインのブラウザクッキーをすべてクリアする。
https://yourdomain.com/wp-login.phpにアクセスする。- 認証情報を入力し、エラーなく
/wp-admin/に遷移できることを確認する。 - WP-CLIで確認する:
wp option get siteurlがログインに使ったURLと完全に一致していること。 - DevTools → Application → Cookies で、
wordpress_logged_in_*が正しいドメインとSecureフラグ付きで存在することを確認する。
クイックリファレンス — 症状別の最も一般的な修正方法
- シークレットモードでは動作するが通常ブラウザでは失敗する → クッキー・キャッシュをクリアし、拡張機能を確認する。
- http:// と https:// の両方で失敗する → wp_options のURLの不一致(ステップ2)。
- 新しいホストへの移行またはSSL追加後から発生した →
COOKIE_DOMAINの不一致またはX-Forwarded-Protoの欠如(ステップ3〜4)。 - プラグインのインストール後から発生した → プラグインの競合(ステップ5)。
- DevToolsにSet-Cookieヘッダーが表示されない → プロキシ・キャッシュによるクッキーの除去(ステップ6)。

