2026年5月20日

2026年5月20日

WordPressをHTTPSに移行する方法(Mixed Content対策も)

はじめに

SSL証明書を取得した後、WordPressをHTTPからHTTPSに移行する作業が必要です。URLの変更だけでなく、コンテンツ内のHTTPリンクを全てHTTPSに書き換えないと「Mixed Content(混在コンテンツ)」エラーが発生し、ブラウザの鍵マークが表示されません。

症状・原因

  • SSL証明書をインストールしたのにブラウザのアドレスバーに鍵マークが表示されない
  • コンソールに「Mixed Content」エラーが出ている
  • 画像やCSSがHTTPのままで読み込まれている
  • 一部のページだけHTTPS化されていない

解決手順

ステップ1:移行前の準備

# ① バックアップを取る(必須)
wp db export /backups/db_before_https_$(date +%Y%m%d).sql
tar -czf /backups/files_before_https_$(date +%Y%m%d).tar.gz \
    /var/www/html/wp-content/

# ② SSL証明書が正しく設置されているか確認
curl -I https://example.com 2>&1 | head -5
# HTTP/2 200 が返れば OK

# ③ 証明書の有効期限を確認
echo | openssl s_client -connect example.com:443 2>/dev/null | \
    openssl x509 -noout -dates

# ④ 現在のサイトURLを確認
wp option get siteurl
wp option get home

ステップ2:WordPressのURLをHTTPSに変更する

# WordPress の URL 設定を変更
wp option update siteurl 'https://example.com'
wp option update home 'https://example.com'

# または wp-config.php に直接定義(優先度が高い)
wp config set WP_HOME 'https://example.com'
wp config set WP_SITEURL 'https://example.com'
// wp-config.php: 管理画面もSSL強制
define('FORCE_SSL_ADMIN', true);

// リバースプロキシ(Cloudflare等)経由の場合
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])
    && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}

ステップ3:データベース内のURLを一括置換する

# ① ドライランで変更件数を確認(実際には変更しない)
wp search-replace 'http://example.com' 'https://example.com' \
    --dry-run \
    --skip-columns=guid \
    --report-changed-only

# ② 本番実行
wp search-replace 'http://example.com' 'https://example.com' \
    --skip-columns=guid \
    --report-changed-only

# ③ www ありなし両方を変換(サイト設定に合わせて)
wp search-replace 'http://www.example.com' 'https://www.example.com' \
    --skip-columns=guid \
    --report-changed-only

# ④ シリアライズされたデータも自動で正しく変換される
# (wp search-replace は serialize データを安全に処理する)

# ⑤ キャッシュをクリア
wp cache flush
wp rewrite flush --hard

ステップ4:Mixed Contentを検出・修正する

# ブラウザのデベロッパーツール → コンソール で確認
# Mixed Content: The page was loaded over HTTPS, but requested an insecure resource

# curl でページのHTTPリソースを検出
curl -s https://example.com/ | grep -oP 'src="http://[^"]+"|href="http://[^"]+"' | head -30

# HTTPリソースを含むURLを一覧
wp db query "
SELECT guid FROM wp_posts
WHERE guid LIKE 'http://%'
  AND post_type = 'attachment'
LIMIT 50"
// functions.php: コンテンツ内の HTTP を HTTPS に強制変換
// ※ search-replace 後も残った外部リソース対策
add_filter('the_content', 'force_https_in_content');
add_filter('widget_text', 'force_https_in_content');

function force_https_in_content(string $content): string {
    if (!is_ssl()) return $content;

    // 自サイトの HTTP リソースを HTTPS に変換
    $home_url_http = str_replace('https://', 'http://', home_url());
    return str_replace($home_url_http, home_url(), $content);
}

// wp_get_attachment_url のHTTPをHTTPSに
add_filter('wp_get_attachment_url', function(string $url): string {
    return set_url_scheme($url, 'https');
});
// functions.php: Output Buffer で全出力を HTTPS に変換
// 外部プラグインが出力するURLも含めて変換する場合
add_action('template_redirect', function(): void {
    if (!is_ssl()) return;
    ob_start(function(string $buffer): string {
        $home_http = str_replace('https://', 'http://', home_url());
        return str_replace(
            ["src='http://", 'src="http://', "href='http://", 'href="http://'],
            ["src='https://", 'src="https://', "href='https://", 'href="https://'],
            $buffer
        );
    });
});

ステップ5:リダイレクトとSearch Consoleの設定

# .htaccess: HTTP → HTTPS の301リダイレクト
<IfModule mod_rewrite.c>
RewriteEngine On

# HTTP から HTTPS へリダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# www なし → www あり(または逆)
# RewriteCond %{HTTP_HOST} !^www\. [NC]
# RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
# Google Search Console に HTTPS版サイトを登録
# 1. https://example.com を新規プロパティとして追加
# 2. サイトマップを再送信
wp eval "echo get_option('siteurl') . '/sitemap.xml';"
# → Search Console → サイトマップ → 上記URLを送信

# 3. アドレス変更ツールを使用(旧HTTPプロパティから設定)
# Search Console → 設定 → アドレス変更

# Bing Webmaster Tools にも HTTPS版を追加

注意事項

  • --skip-columns=guid オプションをつけることで、メディアファイルのGUID(一意識別子)が変更されるのを防ぎます。GUIDは変更すべきでないカラムです
  • シリアライズされたデータ(プラグインの設定値など)を手動でSQLのREPLACEで書き換えると、データが破損します。必ずwp search-replaceを使用してください
  • 移行後、Googleのインデックスが更新されるまで数日〜数週間かかります。301リダイレクトが正しく設定されていれば、SEOへの影響は最小限です

まとめ

HTTPS移行は①バックアップ後にwp option update siteurl/homeでURLをhttpsに変更、②wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guidでDB内URLを一括変換、③ブラウザコンソールでMixed Contentを確認・force_https_in_contentフィルターで残存HTTPを対処、④.htaccessに301リダイレクトを設定、⑤Google Search ConsoleにHTTPS版を登録・アドレス変更ツールを使用、の順で進めます。

お気軽にご相談ください

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