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で読み込めます。

関連記事:

お気軽にご相談ください

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