すべてのデプロイガイド デプロイ

混合コンテンツ警告の修正方法

混合コンテンツは、HTTPSページがサブリソース(画像、スクリプト、スタイルシート、フォント)を平文のHTTP経由で読み込むときに発生します。安全でないリソースが安全なページ上にあると、ページ全体のセキュリティが損なわれるため、ブラウザはこれをブロックまたは警告します。

混合コンテンツの2つのタイプ

タイプブラウザの動作
アクティブ(危険)スクリプト、iframe、XHR、CSSすべてのブラウザでブロック
パッシブ(表示)画像、音声、動画警告表示 / パドロック劣化

アクティブな混合コンテンツはページを改変できます(中間者が悪意のあるJavaScriptを注入する可能性)。そのためブラウザは完全にブロックします。パッシブな混合コンテンツはそれほど危険ではありませんが、セキュリティ表示が劣化します。

混合コンテンツの検出方法

ブラウザのDevTools

  1. Chrome/Firefoxでサイトを開きます
  2. DevTools(F12)を開き → Consoleタブ
  3. 以下のようなエラーを探します:
    Mixed Content: The page at 'https://example.com' was loaded over HTTPS,
    but requested an insecure resource 'http://example.com/image.jpg'.

コマンドラインでスキャン

curl -s https://yourdomain.com | grep -oP 'http://[^"'"'"'> ]+' | sort -u

よくある原因と修正方法

HTMLにハードコードされたhttp:// URL

<!-- 問題 -->
<img src="http://example.com/logo.png">

<!-- 修正: プロトコル相対またはHTTPSを使用 -->
<img src="https://example.com/logo.png">
<img src="//example.com/logo.png">
<img src="/logo.png">

ベストプラクティス:可能な限り相対パス/images/logo.png)を使用してください。

サードパーティリソースがまだHTTP

<!-- 問題 -->
<script src="http://cdn.example.com/library.js"></script>

<!-- 修正 -->
<script src="https://cdn.example.com/library.js"></script>

サードパーティがHTTPSに対応していない場合、代替プロバイダーを探すか、リソースをセルフホストしてください。

データベース内のハードコードされたURL

WordPressなどのCMSは絶対URLをデータベースに保存しています。HTTPSへの移行後:

-- WordPress: 投稿内のURLを更新
UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://example.com', 'https://example.com');
UPDATE wp_options SET option_value = REPLACE(option_value, 'http://example.com', 'https://example.com');

またはBetter Search Replaceなどのプラグインを使用してください。

CSS内のHTTP参照

/* 問題 */
background-image: url('http://example.com/bg.jpg');

/* 修正 */
background-image: url('https://example.com/bg.jpg');
background-image: url('/images/bg.jpg');

Content Security Policy(CSP)— 今後の混合コンテンツを防止

HTTPリソースをブロックするCSPヘッダーを追加します:

Nginx:

add_header Content-Security-Policy "upgrade-insecure-requests" always;

Apache:

Header always set Content-Security-Policy "upgrade-insecure-requests"

upgrade-insecure-requestsは、ブラウザにhttp://リクエストを自動的にhttps://にアップグレードするよう指示します。ソースURLを修正する間の安全策です。

体系的な修正:サイト全体の監査

徹底的なクリーンアップのために、サイト全体を監査します:

1. HTTP参照をクロールする

# すべてのHTMLファイルでhttp:// URLをスキャン
find /var/www/html -name '*.html' -o -name '*.php' | xargs grep -l 'http://' 2>/dev/null

# CSSファイルをスキャン
find /var/www/html -name '*.css' | xargs grep -l 'http://' 2>/dev/null

# JavaScriptファイルをスキャン
find /var/www/html -name '*.js' | xargs grep -l 'http://' 2>/dev/null

2. カテゴリ別にURLを修正する

ソース修正方法
自サイトのリソース相対パスに変更(/images/logo.png
CDNリソースhttps://cdn.example.com/...に更新
サードパーティスクリプトURLを更新またはHTTPS対応の代替を見つける
インラインCSShttp://https://を一括置換
データベースコンテンツ(WordPress)wp search-replace 'http://yourdomain.com' 'https://yourdomain.com'
テンプレート/テーマファイルソースファイルを直接編集

3. ブラウザのDevToolsで検証する

修正後、各ページを開いて → DevTools(F12)→ Consoleタブを確認します。クリーンなページには混合コンテンツの警告が表示されません。パドロックアイコンは実線で表示される(壊れたり警告三角が付いたりしない)はずです。

4. 今後の混合コンテンツを防止する

恒久的な安全策として、HTMLの<head>にこのメタタグを追加してください:

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

またはNginx/Apache設定でサーバー全体に設定します(上記参照)。

混合コンテンツを引き起こしやすいコンテンツタイプ

コンテンツタイプ確認場所
画像<img src="http://...">アップロード画像、アバター、ロゴ
スクリプト<script src="http://...">アナリティクス、チャットウィジェット、広告スクリプト
スタイルシート<link href="http://...">外部フォント、CSSフレームワーク
フォント@font-face { src: url("http://...") }Google Fonts(通常問題なし)、カスタムフォント
iframe<iframe src="http://...">埋め込み動画、地図、ウィジェット
XHR/Fetchfetch("http://...")JavaScript内のAPI呼び出し
背景画像background-image: url("http://...")CSS背景

よくある質問

混合コンテンツはSEOに影響しますか?

直接的には影響しません。GoogleはサブリソースではなくページのURLプロトコルに基づいてクロールします。ただし、混合コンテンツがブラウザの警告を引き起こしたり、表示コンテンツをブロックしたりすると、ユーザー体験が低下し、直帰率の上昇を通じて間接的にランキングに影響する可能性があります。

upgrade-insecure-requestsだけ使ってURLを修正しなくてもいいですか?

応急処置としては動作しますが、ソースURLを修正する方が望ましいです。CSPヘッダーはブラウザのサポートに依存し(すべての最新ブラウザは対応していますが、古いクライアントは対応していない場合があります)、すべてのレスポンスに追加ヘッダーを加えます。

サイトに数百のハードコードされたHTTP URLがあります。最速の修正方法は?

upgrade-insecure-requests CSPヘッダーをすぐに追加してください(サーバー設定1行)。その後、コードベースとデータベースで一括検索・置換を行います。grep -r 'http://' src/を使用してコード内のハードコードされたURLを見つけてください。

関連記事

デプロイ 2026-05-07
HTTPからHTTPSへリダイレクトする方法
サーバーサイドリダイレクトですべてのトラフィックをHTTPSに強制。Nginx、Apache、.htaccessでの301パーマネントリダイレクトの設定例を紹介します。
デプロイ 2026-05-08
NginxにSSL証明書をインストールする方法
NginxにSSL証明書をインストールするステップバイステップガイド。ファイルアップロード、完全なサーバーブロック設定、TLSベストプラクティス、HTTP/2、HSTS、リダイレクト設定、テスト、6つの一般的なエラーのトラブルシューティングを解説します。
SSL と証明書 2026-05-08
HTTPSとは?完全ガイド
HTTPSはブラウザとWebサイト間の接続を暗号化します。HTTPSの仕組み、TLSハンドシェイク、HTTP vs HTTPSの違い、パフォーマンスへの影響、無料での有効化方法を解説します。
ブラウザで無料 SSL 証明書を取得
インストール不要、アカウント不要。秘密鍵は常にデバイスに残ります。
証明書を取得