17
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【ドメイン正規化】Nginxで「www」ありのURLを「www」なしにリダイレクトする【nginx Ver.1.12.2】

Last updated at Posted at 2018-04-01

概要

www.example.com にアクセスした際、 example.com にリダイレクトさせる。
このように、wwwありなしのいずれかにまとめることをドメイン正規化という。

そもそも以下のような選択肢がある。

  1. wwwありとなし、どちらも使える
  2. wwwありとなし、一方のみ使えるようにできる(使わない方にはアクセスできない)
  3. 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
17
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?