概要
www.example.com
にアクセスした際、 example.com
にリダイレクトさせる。
このように、wwwありなしのいずれかにまとめることをドメイン正規化という。
そもそも以下のような選択肢がある。
- wwwありとなし、どちらも使える
- wwwありとなし、一方のみ使えるようにできる(使わない方にはアクセスできない)
- wwwありとなし、一方のみ使えるようにできる(使わない方にはアクセスした際、使える方にリダイレクトされる)
「1.」と「2.」を選ばない理由
1. wwwありとなし、どちらも使える
こちらに関しては、検索エンジンがwwwありとなしの両方を別のページとしてインデックスしてしまうため、重複コンテンツとみなされ、評価が下がってしまう可能性がある。つまりSEOに弱くなる。
参考:
重複するコンテンツ - Search Console ヘルプ
https://support.google.com/webmasters/answer/66359?hl=ja
2. wwwありとなし、一方のみ使えるようにできる(使わない方にはアクセスできない)
こちらの選択肢は「1.」のようなSEO的なデメリットはないものの、ユーザビリティが良くない。
ユーザーが誤ってアクセスを試みた際にページが閲覧できず、流入機会の損失となる可能性がある。
3. wwwありとなし、一方のみ使えるようにできる(使わない方にはアクセスした際、使える方にリダイレクトされる)
この方法であれば、「1.」と「2.」で挙げたようなデメリットがない。
また、静的なWebページではなくWebアプリケーション(Ruby on Railsなどで作るようなやつ)の場合、リクエストURLのホスト名の部分で処理を分岐させるようなこともあるので、そういった点も「1.」では期待した動きにならない場合があるが、「3.」では期待通りの動きになる。
設定手順
1. DNSでレコードを追加する
example.com IN A 0.0.0.0 # Aレコードで0.0.0.0のグローバルIPアドレスにexample.comのドメイン名が紐付けられている
example.com IN CNAME www.example.com # CNAMEレコードでwww.example.comのドメイン名にexample.comのドメイン名が紐付けられている
※サーバーのグローバルIPアドレスが0.0.0.0でドメイン名がexample.comの場合
この時点ではexample.com、www.example.comのどちらにアクセスしても0.0.0.0に繋がる。
詳細な設定方法はドメインレジストラ(お名前.comなど)によって異なるため割愛
2. 設定ファイル( nginx.conf
)の設定を変更する
/etc/nginx/nginx.conf
server {
listen 80;
server_name www.example.com;
return 301 http://example.com$request_uri;
}
server {
server_name example.com;
// 省略
}
serverディレクティブを追加し、www.example.comへのアクセスをexample.comにリダイレクトさせる。
このとき、$request_uriと記述しているので、URLのホスト名以降のパスやパラメータを保持したままリダイレクトしてくれる。
例:
www.example.com/hoge?lang=jp
というリクエストが
example.com/hoge?lang=jp
にリダイレクトされる。
3. nginxを再起動する
# service nginx restart
あるいは、
# systemctl restart nginx.service
再起動することで設定が反映される。
これで対応完了。
備考
.htaccess
に記述することでドメイン正規化する方法もある。
検証環境
# nginx -v
nginx version: nginx/1.12.2
# cat /etc/system-release
Amazon Linux release 2 (2017.12) LTS Release Candidate