2026年10月10日

2026年10月10日

WordPressをHTTPSに統一する手順|URL変更・301リダイレクト・混在コンテンツ対策

WordPress サイトを HTTPS に統一するには、①サーバーで HTTPS が使えるようにする、②WordPress のURLを https:// に変える、③データベースの中のURLを置き換える、④HTTP へのアクセスを HTTPS へ 301 リダイレクトする、の4つを行います。この記事ではその順番で説明します(2026年10月時点の WordPress 6.8 系を前提にしています)。

始める前に

  • 証明書が入っていることを確かめる。ブラウザーで https:// のURLを開き、警告が出ないことを見ます。証明書の取得はLet's EncryptでWordPressをSSL化する手順を参照してください
  • データベースとファイルのバックアップを取る。URLの変更を間違えると管理画面に入れなくなることがあります
  • 以下の example.com は自分のドメインに置き換えます
curl -sI https://example.com/ | head -n 1

HTTP/1.1 200 OK や HTTP/2 200(またはリダイレクトの 301)が返れば、HTTPS で応答しています。

手順1:WordPressのURLをHTTPSに変える

管理画面から変える

「設定」→「一般」の「WordPress アドレス (URL)」と「サイトアドレス (URL)」を、どちらも https:// で始まるURLに変えて「変更を保存」を押します。保存するとログアウトされるので、https:// のURLでログインし直します。

WordPress 5.7 以降では、サーバーが HTTPS に対応していれば、「ツール」→「サイトヘルス」の HTTPS に関する項目に、2つのURLを一度に HTTPS に切り替えるボタンが表示されます。このボタンで切り替えた場合、記事本文の中に残った自分のサイトの http:// のURLは、表示するときに https:// に置き換えられます。

WP-CLIで変える

wp option update home 'https://example.com'
wp option update siteurl 'https://example.com'

wp-config.php に WP_HOME や WP_SITEURL が書かれている場合は、設定画面では変えられません。wp-config.php の値を https:// に書き換えます。

手順2:データベースの中のURLを置き換える

記事本文やカスタムフィールド、ウィジェットに http://example.com が残っていると、画像や CSS が HTTP で読み込まれ、ブラウザーが混在コンテンツとして警告したり表示しなかったりします。WP-CLI の wp search-replace で置き換えます。

# まず変更される件数を確かめる
wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guid --dry-run

# 問題なければ実行する
wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guid
  • wp search-replace は、プラグインの設定などに使われるシリアライズされたデータの文字数も直して置き換えます。MySQL の UPDATE … REPLACE() で直接書き換えると、http が https になって文字数が変わり、シリアライズされたデータが壊れることがあるため使いません
  • 投稿の guid 列は、記事を識別するための値で、RSS リーダーなどが記事を見分けるのに使います。WordPress の公式ドキュメントでは変えないよう案内されているため、--skip-columns=guid で除外します
  • マルチサイトでは --network を付けます
  • www の有無も含めて、実際に使われているURLの形で置き換えます

WP-CLI が使えない場合は、Better Search Replace などのシリアライズ対応の置換プラグインを使います。

手順3:HTTPをHTTPSへ301リダイレクトする

Apache(.htaccess)

WordPress のドキュメントルートにある .htaccess の、# BEGIN WordPress より前に書きます。# BEGIN WordPress から # END WordPress の間は、パーマリンク設定を保存したときに WordPress が書き換えるためです。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

.htaccess はアクセスのたびに読み込まれるため、Web サーバーの再起動は不要です。サーバーの設定ファイルを編集できる場合は、HTTP 用の VirtualHost に Redirect permanent / https://example.com/ を書く方法もあります。

Nginx

HTTP(80番ポート)の server ブロックで、すべてのアクセスを HTTPS へ返します。

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}

設定を変えたら sudo nginx -t で構文を確かめ、sudo systemctl reload nginx で読み込み直します。

確認

curl -sI http://example.com/sample-page/ | grep -iE '^(HTTP|location)'

301 と、Location: https://example.com/sample-page/ が返れば成功です。リダイレクトの書き方はWordPressのHTTPからHTTPSへの301リダイレクト設定でも詳しく説明しています。

手順4:管理画面とログインをHTTPSに限る

サイトのURLを https:// にすれば、管理画面も HTTPS で開きます。HTTP でログイン画面を開かれた場合にも HTTPS に切り替えるには、wp-config.php に次を追加します(「編集が必要なのはここまでです」より上)。

<?php
define( 'FORCE_SSL_ADMIN', true );

プロキシやCDNの後ろにある場合

Cloudflare やロードバランサーが HTTPS を受け、サーバーへは HTTP で中継している構成では、サーバー側の %{HTTPS} が常に off になり、リダイレクトがループします。この場合は、プロキシが付ける X-Forwarded-Proto ヘッダーを使います。

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

WordPress 自身にも HTTPS だと判断させるため、wp-config.php に次を書きます。

<?php
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' === $_SERVER['HTTP_X_FORWARDED_PROTO'] ) {
	$_SERVER['HTTPS'] = 'on';
}

このヘッダーは誰でも付けて送れるため、プロキシを通さずサーバーに直接届くアクセスを受け付けない構成で使います。Cloudflare の場合は、暗号化モードを「Full (strict)」にしてサーバーまで HTTPS で接続すれば、この設定は通常要りません。

手順5:混在コンテンツを確認する

HTTPS のページの中で、画像・CSS・JavaScript を http:// で読み込んでいると、ブラウザーのアドレスバーに警告が出たり、読み込みが止められたりします。

  • ログアウトした状態で主なページを開き、ブラウザーの開発者ツールのコンソールに「Mixed Content」の警告が無いか見る
  • テーマやプラグインのファイル、カスタマイザーの追加 CSS に http:// が直接書かれていないか確かめる
  • 外部のサービス(埋め込みや広告など)を http:// で読み込んでいる場合は、https:// のURLに変える
  • データベースに古いURLが残っていないか、次のコマンドで検索する
wp db search 'http://example.com' --stats

詳しい探し方はWordPressの混在コンテンツ(Mixed Content)を直す方法を参照してください。

手順6:HSTSを設定する(任意)

HSTS(HTTP Strict Transport Security)は、一度アクセスしたブラウザーに、以後はそのドメインに HTTPS でしか接続しないよう指示するヘッダーです。HTTPS で問題なく動くことを確かめてから設定します。Apache では mod_headers を使います。

<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=300"
</IfModule>

最初は max-age=300(5分)のように短くして様子を見て、問題がなければ max-age=31536000(1年)に延ばします。設定すると、証明書の期限切れなどが起きたときに、訪問者は警告を無視して閲覧できなくなります。includeSubDomains は、HTTPS に対応していないサブドメインがあると、そこにアクセスできなくなるため、すべてのサブドメインを確認してから付けます。ヘッダーの設定はWordPressのセキュリティヘッダー設定方法も参照してください。

切り替えた後に行うこと

  • Google Search Console で、HTTPS のURLが含まれるプロパティ(ドメインプロパティか https:// の URL プレフィックス)を確認し、サイトマップを https:// のURLで送り直す
  • 証明書の自動更新が動いているか確かめる(Let's Encrypt の証明書は有効期間が短く、自動更新を前提にしている)
  • 外部サービス(Google アナリティクス、SNS の設定、広告など)に登録しているサイトのURLを https:// に直す

まとめ

  • 「設定」→「一般」の2つのURL(またはサイトヘルスのボタン、wp option update)で WordPress のURLを https:// にする
  • 本文のURLは wp search-replace で、--skip-columns=guid を付けて置き換える。SQL の REPLACE() で直接書き換えない
  • 301 リダイレクトは .htaccess の # BEGIN WordPress より前か、Nginx の 80番ポートの server ブロックに書く
  • プロキシの後ろでは X-Forwarded-Proto で判定する
  • 混在コンテンツを確かめてから、必要なら HSTS を短い期間から設定する

お気軽にご相談ください

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