ドメイン変更時に301リダイレクトするのは、必須です。
リダイレクトは、.htaccessに簡単な記述を追加すれば簡単に301リダイレクトできます。また、その記述方法もネットを検索すれば簡単に見つかるので自分で行うのも難しくありません。
ドメインの301リダイレクトは簡単なのです。
ところが、先日ドメイン変更時にいつものようにリダイレクトしたら思わぬ問題が発生しました。その時に、結構焦ったのでドメイン変更時の301リダイレクト方法をまとめておきたいと思います。
301リダイレクトの様々な方法

サブドメインがあるとリダイレクトはトラブりやすい
リダイレクトは公開ディレクトリのTOPに.htaccessを配置するのが一般的です。
サブドメインのリダイレクトの場合も、サブドメインの公開ディレクトリのTOPに.htaccessを配置します。
サブドメインの公開ディレクトリは、自分で決められるケースもありますが、サーバーの仕様で決まってしまっているケースもあります。
ドメインとサブドメインの公開ディレクトリの位置関係でトラブルの原因になりやすいです。
ドメインの公開ディレクトリにサブドメインの公開ディレクトリが含まれない場合
ドメインの公開ディレクトリとサブドメインの公開ディレクトリが横並びもしくは別階層の場合は、各.htaccessの主従関係がないので、リダイレクトの影響はお互いにありません。
+ domain-dir/.htaccess + sub1.domain-dir/.htaccess + sub2.domain-dir/.htaccess
ドメインの公開ディレクトリにサブドメインの公開ディレクトリが含まれる場合
ドメインの公開ディレクトリとサブドメインの公開ディレクトリが親子関係にある場合、各.htaccessは主従関係がありますので、上位の.htaccessが下位の.htaccessに影響を与えます。
このケースがトラブルになりやすいです。
+ domain-dir/.htaccess L sub1.domain-dir/.htaccess L sub2.domain-dir/.htaccess
サブドメインを含めてドメインを完全に別ドメインに変更する場合のリダイレクト
ドメインの公開ディレクトリにサブドメインの公開ディレクトリが含まれない場合
サブドメインの公開ディレクトリがドメインの公開ディレクトリに含まれない場合は、簡単です。よくある以下の記述を公開ディレクトリのTOPに配置すれば大丈夫です。
# Permanent redirect:
Redirect permanent "/" "https://new-domain.com/"
ドメインの公開ディレクトリにサブドメインの公開ディレクトリが含まれる場合
サブドメインの公開ディレクトリがドメインの公開ディレクトリに含まれる場合は、単純ではありません。ドメインの.htaccessがサブドメインの.htaccessに影響を与えてしまうからです。
old-domain.jp⇒new-domain.comへのドメイン変更の場合
URLから判定してリダイレクトする条件を限定します。
RewriteEngine On
RewriteCond %{http_host} ^www.old-domain.jp [OR]
RewriteCond %{http_host} ^old-domain.jp
RewriteRule ^(.*) https://new-domain.com/$1 [R=301,L]
sub.old-domain.jp⇒sub.new-domain.comへのドメイン変更の場合
下位階層に別の公開ディレクトリが無いので簡単に済ませます。
# Permanent redirect:
Redirect permanent "/" "https://sub.new-domain.com/"
ドメインとサブドメインの一部を別のドメインに変更する場合
特殊な例ですが、実際にあった話なので残しておきます。
例えば、以下のようなドメインのサイトがあったとします。
- old-domain.com
- sub1.old-domain.com
- sub2.old-domain.com
- sub3.old-domain.com
上記のようなサイトのドメインの一部新しいドメインに変更したいとします。
- old-domain.com ⇒ new-domain.com
- sub1.old-domain.com ⇒ sub1.new-domain.com
- sub2.old-domain.com
- sub3.old-domain.com
この時に、一部のサイトはold-domainのまま残します。
このような場合は、以下のようにURLを判定して.htaccessを書かないとトラブルのもとになります。
RewriteEngine On
RewriteCond %{http_host} ^www.old-domain.jp [OR]
RewriteCond %{http_host} ^old-domain.jp
RewriteRule ^(.*) https://new-domain.com/$1 [R=301,L]
まとめ
公開ディレクトリが親子関係にある場合は.htaccessも親子関係にありますので、301リダイレクトは特殊な対応が必要になります。
URLから判定する方法であれば、広く対応できるのでこの書き方を覚えておくと困らないと思います。