2026年5月24日
2026年5月24日
複数ドメインのリダイレクト設定|旧ドメインや別TLDを1つのドメインに301でまとめる方法
旧ドメイン、.com と .jp の両方、表記ゆれのドメインなど、複数のドメインを1つのサイトに集約するときは、メインのドメイン以外からのアクセスをすべて 301 リダイレクトで転送します。設定自体は数行ですが、転送元のドメインにも DNS と SSL 証明書が必要なこと、パスを引き継ぐこと、転送を何段にも重ねないことを押さえておかないと、HTTPS でのアクセスがエラーになったり、検索エンジンへの伝わり方が不安定になったりします。この記事では、全体の設計、Apache・Nginx・Cloudflare での設定例、確認の方法を説明します。
全体の設計を先に決める
最初に「正規のドメイン(URL の基準)」を1つ決めます。ここでは https://example.com を正規とし、次のドメインをそこへ集約する例で説明します。
example.net、www.example.netexample.jp、www.example.jpwww.example.com(www 付きの表記)- 上記すべての
http://でのアクセス
方針は次の3点です。
- どの URL から来ても、1回の 301 で正規の URL に着く:
http://www.example.net/about/は、https://example.com/about/へ直接転送します。http→https→ドメイン変更のように段階を踏むと、転送の回数が増えて遅くなり、設定ミスでループする原因にもなります。 - パスとクエリ文字列を引き継ぐ: 旧ドメインの記事 URL へのリンクやブックマークを生かすため、トップページにまとめて飛ばすのではなく、同じパスへ転送します。
- 転送は恒久的なら 301(または 308)を使う: 一時的な 302 は、恒久的な移転の意図が伝わりにくくなります。
転送元ドメインにも DNS と証明書が必要
見落とされやすいのがこの点です。リダイレクトは、ブラウザが転送元のドメインに接続し、サーバーが「移転先はこちら」と応答して初めて機能します。そのため転送元のドメインにも次の2つが必要です。
- DNS: 転送元のドメインの A レコードなどが、リダイレクトを返すサーバーを向いていること
- SSL 証明書:
https://example.net/へのアクセスに対して、example.netの有効な証明書を提示できること
証明書がないと、ブラウザは転送の応答を受け取る前に警告画面を出します。旧ドメインに HTTPS のリンクが残っている場合や、ブラウザが HTTPS を優先して接続する場合に問題になります。転送元を含めたすべての名前について証明書を用意します。
Apache(.htaccess)での設定
WordPress を Apache で動かしている場合、すべてのドメインを同じサーバーに向け、.htaccess の WordPress の記述より前に次を置きます。編集前に .htaccess のバックアップを取ってください。
# 正規ドメイン以外、または HTTP でのアクセスを https://example.com へ1回で転送する
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]
</IfModule>
# BEGIN WordPress
# (ここから下は WordPress が書き込む記述。変更しない)
%{REQUEST_URI} にはパス部分が入ります。転送先の URL に ? を書いていなければ、元のクエリ文字列は mod_rewrite の既定の動作で引き継がれます。CDN やロードバランサーの後ろでサーバーが HTTP で受けている構成では、%{HTTPS} が常に off になり、転送がループします。その場合は、プロキシが付ける X-Forwarded-Proto ヘッダーで判定するなど、構成に合わせて条件を変えます。
レンタルサーバーでは、追加したドメインごとに公開ディレクトリが分かれる仕様のことがあります。その場合は、転送元ドメインの公開ディレクトリに転送用の .htaccess を置くか、管理画面の転送機能を使います。
Nginx での設定
Nginx では、転送専用の server ブロックを用意し、正規のドメインの server ブロックと分けるのが分かりやすい方法です。
# HTTP でのアクセスはすべて転送する
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com example.net www.example.net example.jp www.example.jp;
return 301 https://example.com$request_uri;
}
# 正規以外の名前への HTTPS アクセスを転送する
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name www.example.com example.net www.example.net example.jp www.example.jp;
ssl_certificate /etc/letsencrypt/live/redirect-domains/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/redirect-domains/privkey.pem;
return 301 https://example.com$request_uri;
}
$request_uri にはパスとクエリ文字列が含まれます。転送元の名前をまとめた証明書は、Certbot なら次のように取得できます。HTTP-01 の検証には、各ドメインの DNS がこのサーバーを向いていることが前提です。
sudo certbot certonly --nginx --cert-name redirect-domains \
-d www.example.com -d example.net -d www.example.net -d example.jp -d www.example.jp
sudo nginx -t && sudo systemctl reload nginx
Cloudflare で転送する場合
転送元のドメインを Cloudflare で管理しているなら、サーバーを用意せずに Cloudflare 側で転送できます。リダイレクトのルール(Redirect Rules)や、多数の URL をまとめて扱う一括リダイレクト(Bulk Redirects)などの機能があり、パスやクエリ文字列を引き継ぐかを選べます。Cloudflare が応答を返すには、転送元の名前の DNS レコードがプロキシ有効になっている必要があります。機能の名前や画面、無料プランで使える範囲は変わることがあるため、Cloudflare の公式ドキュメントで確認してください(2026年10月現在)。
WordPress 側で気をつけること
WordPress の「WordPress アドレス」「サイトアドレス」(siteurl と home)は、正規のドメインにしておきます。WordPress 自身は www の有無の違いはある程度正規化しますが、別のドメインでアクセスされた場合までは転送しません。サーバー側の転送を設定しないままドメインを向けると、同じ内容が複数のドメインで表示される状態になります。
ドメインを移転した直後は、本文中の内部リンクや画像の URL が旧ドメインのままになっていることがあります。転送があれば表示はされますが、転送の分だけ読み込みが遅くなるため、データベースの URL 置換で新しいドメインに直しておくと安心です。置換の前には、データベースのバックアップを取り、ステージング環境で試してください。
検索エンジンへの伝え方
旧ドメインから新ドメインへサイトを移転した場合は、Google Search Console のアドレス変更ツールで移転を伝えられます。新旧両方のドメインをプロパティとして所有確認しておく必要があります。リダイレクトは長期間(少なくとも1年程度)維持することが Google のサイト移転のガイドで推奨されています。なお、リダイレクトや移転の手続きをしても、検索順位や流入が維持されることが約束されるわけではありません。
確認の方法
設定したら、代表的な URL の組み合わせを curl で確かめます。
# 1回の 301 で正規の URL に着くか(Location ヘッダーを見る)
curl -sI http://www.example.net/about/?ref=test | grep -iE '^HTTP|^location'
# 転送の回数と最終的な URL を確認する
curl -sIL -o /dev/null -w '%{num_redirects} %{url_effective}\n' https://example.jp/about/
確認する組み合わせは、すべての転送元ドメイン × http / https × www の有無です。転送回数が1回で、最終的に https://example.com/about/?ref=test のようにパスとクエリが引き継がれていれば成功です。ループする場合は、ブラウザのキャッシュも疑い、curl で確かめます。
まとめ
- 正規のドメインを1つ決め、ほかのすべての URL から1回の 301 で、パスを引き継いで転送します。
- 転送元のドメインにも、DNS と有効な SSL 証明書が必要です。
- Apache は
.htaccessの WordPress の記述より前に、Nginx は転送専用の server ブロックで設定します。Cloudflare のルールで転送する方法もあります。 - WordPress のアドレスは正規のドメインにし、移転なら Search Console のアドレス変更ツールも使います。
- 確認は
curlで、ドメイン・プロトコル・www の組み合わせごとに行います。