WordPressログインの「ERROR: Cookies are blocked or not supported by your browser」を修正する

intermediate📝 WordPress2026-06-11| WordPress 5.x〜6.x、Apache/Nginx、PHP 7.4〜8.3、任意のOS(Linux/Windows/macOS)、任意のブラウザ

Error Message

ERROR: Cookies are blocked or not supported by your browser. You must enable cookies to use WordPress.
#wordpress#cookies#login#browser#session

何が起きているのか

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

両方の値が、ブラウザのアドレスバーに表示されているものと完全に一致している必要があります。スキーム(httpshttp か)、サブドメイン(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)。

Related Error Notes