【WordPress】サーバー移行後に「保護されていない通信」?混合コンテンツをDB置換で一括修正した話

WordPressを使って運営しているWebサイト(baigo.fun)をスマートフォン(SP)でチェックしていたところ、ブラウザのURLバーに不穏な「警告マーク(⚠)」が出ていることに気づきました。
今回は、この警告の原因が「混合コンテンツ」であることを突き止め、WordPressのプラグインを使ってデータベースレベルで一括修正した手順を共有します。
なぜ警告マークが出るのか?
ブラウザのアドレスバーに「⚠(ビックリマーク)」や「保護されていない通信」と表示される場合、主な理由は以下の3つです。
- SSL証明書の不備: 有効期限が切れている、または設定されていない。
- 非SSL接続: サイト全体が
http://のままである。 - 混合コンテンツ(Mixed Content):
https://のページ内で、画像やスクリプトなどのリソースがhttp://で読み込まれている。
原因の特定
警告の詳細を確認するには、PCのChromeデベロッパーツール(Consoleタブ)を見るのが確実ですが、SPブラウザでも警告アイコンをタップすることで「証明書は有効だが、保護されていないリソースが含まれている」といったヒントを得られます。
今回のケースでは、以下の状況から原因を絞り込みました。
- 最近、CMSのテーマ変更とサーバーの引っ越しを行ったばかりだった。
- サーバー管理画面ではSSL設定が「ON」になっており、トップページ自体はHTTPSでアクセス可能だった。
このことから、「SSL化は済んでいるが、記事内の画像リンクなどが旧サーバーの設定(http)のまま残っている=混合コンテンツ」 であると判断しました。
混合コンテンツ(Mixed Content)とは
混合コンテンツとは、暗号化された安全なページ(HTTPS)の中に、暗号化されていない要素(HTTP)が混在している状態です。
調査の結果、予想通り過去の投稿記事に含まれる画像URLが http://baigo.fun/... という記述のままになっていました。ブラウザはこれを「セキュリティ上のリスク」と判断し、警告を出していたのです。
修正方針:プラグインで一括置換

原因は特定できましたが、記事数は多く、画像URLは膨大です。これを手動で一つひとつ https に書き換えるのは現実的ではありません。
そこで今回は、WordPressのデータベース内の文字列を一括で検索・置換できるプラグイン「Better Search Replace」を使用することにしました。
「Better Search Replace」による修正手順
このプラグインはデータベースを直接操作するため、強力ですが注意が必要です。必ず事前にバックアップを取ってから作業を行います。
プラグインの起動

インストール・有効化後、WordPress管理画面の「ツール」メニューから「Better Search Replace」を開きます。
検索・置換条件の設定

設定画面の「検索/置換」タブで以下のように入力しました。
- 検索 (Search for):
http://baigo.fun - 置換 (Replace with):
https://baigo.fun - テーブル選択 (Select tables): すべてのテーブルを選択(Ctrl/Cmd + A)
ポイントは、http → https だけではなく、ドメイン名を含めて指定することです。これにより、意図しない外部サイトへのリンクなどが誤って置換される事故を防げます。
ドライラン(テスト実行)

いきなり本番実行するのは危険です。「ドライランとして実行する(Run as dry run)」にチェックが入っていることを確認し、実行します。
結果が表示され、wp_posts テーブル(記事本文が格納されている場所)を中心に、合計142個のセルで置換が必要な箇所が見つかりました。これにより、設定が正しいことが確認できました。
本番実行
「ドライラン」のチェックを外し、再度ボタンをクリックして置換を実行しました。
結果

処理完了後、再度サイトにアクセスすると、無事に警告マークが消えていることが確認されました。
サーバー移行やSSL化のタイミングでは、こうした「画像のパスだけ古いまま」というトラブルが頻発します。手作業で修正する前に、まずは今回のようなDB置換ツールを検討することをおすすめします。

