2026年5月20日
2026年5月20日
WordPressのMixed Content警告を解決する方法【httpsサイトのhttpリソース】
はじめに
HTTPSに移行したのにブラウザの鍵マークが表示されない・「保護されていない通信」という警告が出る場合、ページ内にHTTPのリソース(画像・CSS・JavaScriptなど)が残っているMixed Content(混在コンテンツ)が原因です。
Mixed Contentとは
https://yoursite.com (HTTPS)のページ内に
http://yoursite.com/image.jpg (HTTP)のリソースが含まれている状態
ブラウザはHTTPSページ内のHTTPリソースを安全でないとして警告またはブロックします。
症状の確認方法
Chrome DevToolsで確認:
1. F12でDevToolsを開く
2. 「Console」タブを開く
3. 「Mixed Content: ...」というエラーを確認
4. どのリソースがHTTPで読み込まれているか特定
解決手順
ステップ1:Really Simple SSLプラグインを使う(最簡単)
1. 「Really Simple SSL」プラグインをインストール・有効化
2. プラグインが自動的にHTTPをHTTPSに変換
3. サイト内のHTTPリンクをHTTPSに書き換え
ステップ2:wp-config.phpでHTTPS強制設定
// wp-config.phpに追加
define('FORCE_SSL_ADMIN', true);
// HTTPSを強制(Cloudflare等のプロキシ環境)
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])
&& $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
ステップ3:データベース内のHTTP URLを一括置換
# WP-CLIでデータベース内のURLを一括置換
wp search-replace 'http://yoursite.com' 'https://yoursite.com' \
--skip-columns=guid
# 確認(実際に変更しない)
wp search-replace 'http://yoursite.com' 'https://yoursite.com' \
--dry-run
ステップ4:.htaccessでHTTPをHTTPSにリダイレクト
# .htaccessに追加
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
ステップ5:CSPヘッダーでMixed Contentをブロック
# .htaccessに追加(警告をエラーに昇格させて発見しやすくする)
Header always set Content-Security-Policy "upgrade-insecure-requests"
upgrade-insecure-requestsディレクティブはHTTPリソースを自動的にHTTPSに変換してアクセスします。
ステップ6:テーマ・プラグインのハードコードURLを修正
// ❌ ハードコードされたHTTP URL
<img src="http://yoursite.com/image.jpg">
// ✅ WordPressの関数を使う
<img src="<?php echo esc_url(get_template_directory_uri()); ?>/image.jpg">
まとめ
Mixed Content警告は「Really Simple SSL」プラグインが最も簡単な解決策です。次にWP-CLIのwp search-replaceでデータベース内のHTTPをHTTPSに一括変換します。.htaccessでHTTPをHTTPSにリダイレクトすることも必須です。Content-Security-Policy: upgrade-insecure-requestsヘッダーも合わせて設定すると残ったHTTPリソースを自動的にHTTPSで読み込めます。
関連記事: