ブラウザで自分のブログに対して、www有りのURLでアクセスしてもwww無しのURLでアクセスしても自分のブログが表示できる場合、Googleなどの検索エンジンに、自分のブログのSEOが不当に低く評価されているかもしれません。
この問題は、www有りのURLとwww無しのURLをどちらか一方に統一することで解決することができます。
今回は、URLのwww有り・無しを統一する方法ということで、URLの正規化について説明します。
※以下の環境を例に説明します。
- サーバOS:CentOS6
- WEBサーバ:Apache2.2
目次
1.URLの正規化とは
URLの正規化とは、同じコンテンツにアクセスできるURLを1つに統一することです。
例えば、自分のブログに対して、以下の4つのURLでアクセスできる場合で説明します。
- http://blog1.com/
- http://www.blog1.com/
- http://blog1.com/index.php
- http://www.blog1.com/index.php
Googleなどの検索エンジンは、URLが異なればそれぞれ別のコンテンツとして認識します。
つまり、検索エンジンは、上記4つのURLをそれぞれ別のコンテンツであり、内容が全く同じコンテンツであると認識します。
このような場合、検索エンジンはこのコンテンツを重複コンテンツとして認識し、このコンテンツの評価を下げてしまいます。
また、上記4つのURLが他サイトからリンクされる場合、本来であれば上記4つのURLはすべて同じコンテンツなので、どのURLがリンクされたとしても同じコンテンツの評価としてほしいところですが、検索エンジンは別のコンテンツとして認識するため、実際には評価が分散されてしまいます。
検索エンジンから低評価を受けると、それだけ検索結果ページに表示される順位が下がり、検索者からアクセスされる可能性が低くなります。
このようなリスクに対して、URLの正規化を行うことにより対応します。
URLの正規化は、301リダイレクトという方法により行います。
2.301リダイレクトとは
301リダイレクトとは、URLが恒久的に変更された場合に使用する転送処理のことです。
301リダイレクトにより、URLについて、wwwの有無、index.phpの有無を統一することができます。
例えば、www無しのURLに統一したい場合、301リダイレクトにより、www有りのURLをwww無しのURLに転送します。
また、index.php無しのURLに統一したい場合、301リダイレクトにより、index.php有りのURLをindex.php無しのURLに転送します。
このような転送処理を行うことにより、異なるURLで同じコンテンツにアクセスできる場合であっても、検索エンジンにSEOを正当に評価してもらうことができます。
なお、アクセス先のコンテンツがWordPressの場合、デフォルトでindex.php有りのURLをindex.php無しのURLに301リダイレクトにより転送します。
3.httpd.confの設定方法
それでは、301リダイレクトによるURLの正規化の設定を行います。
以降の手順で、www有りのURLをwww無しのURLに転送します。
3-1.httpd.confのバックアップ
301リダイレクトの設定は、「/etc/httpd/conf」フォルダ配下にある「httpd.conf」ファイル(Apacheの設定ファイル)で設定します。
「httpd.conf」ファイルを編集する前に、「httpd.conf」ファイルのバックアップを行いましょう。
① まず、サーバにrootユーザでログインします。
[root@ ~]#
② 次に、「httpd.conf」ファイルがある「/etc/httpd/conf」フォルダへ移動します。
「cd /etc/httpd/conf」と入力してEnterを押します。
[root@ ~]# cd /etc/httpd/conf
「/etc/httpd/conf」フォルダへ移動できました。
[root@ conf]#
③ 編集前の「httpd.conf」ファイルをバックアップするため、「httpd.conf」ファイルをコピーして、「httpd.conf.yyyymmdd」というファイル名で保存します。
「cp httpd.conf httpd.conf.yyyymmdd」と入力してEnterを押します。
なお、「yyyymmdd」は設定変更を行う日など任意の年月日とします。
(以下は、20170301とした例)
[root@ conf]# cp httpd.conf httpd.conf.20170301
これで、「httpd.conf」ファイルをバックアップできました。
3-2.httpd.confの編集
「httpd.conf」ファイルをバックアップできたら、「httpd.conf」ファイルを編集していきます。
① 「vim httpd.conf」と入力してEnterを押します。
[root@ conf]# vim httpd.conf
「httpd.conf」ファイルの内容が表示されます。
② バーチャルホストの設定箇所を探します。
「httpd.conf」ファイル内で、以下のように記載されている箇所を探します。
<VirtualHost *:80> ServerName any <Location /> Order Deny,Allow Deny from all </Location> </VirtualHost> <VirtualHost *:80> ServerName blog1.com DocumentRoot "/var/www/blog1/public" DirectoryIndex index.html index.php ErrorLog /var/log/httpd/blog1_error.log CustomLog /var/log/httpd/blog1_access.log combined AddDefaultCharset UTF-8 <Directory "/var/www/blog1/public"> AllowOverride All </Directory> </VirtualHost> <VirtualHost *:80> ServerName blog2.net DocumentRoot "/var/www/blog2/public" DirectoryIndex index.html index.php ErrorLog /var/log/httpd/blog2_error.log CustomLog /var/log/httpd/blog2_access.log combined AddDefaultCharset UTF-8 <Directory "/var/www/blog2/public"> AllowOverride All </Directory> </VirtualHost>
※バーチャルホストの設定については、以下の記事を参考にして下さい。

③ 上記②のバーチャルホストの設定箇所の下に、以下の設定を貼り付けます。
「i」を入力して編集モードに切り替え、以下の設定をコピー&ペーストして下さい。
これは、www有りのURLでアクセスされた際に、301リダイレクトにより、www無しのURLへ転送する設定です。
<VirtualHost *:80>
ServerName www.blog1.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.blog1\.com$
RewriteRule ^/(.*) http://blog1.com/$1 [R=301,L]
</VirtualHost>
<VirtualHost *:80>
ServerName www.blog2.net
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.blog2\.net$
RewriteRule ^/(.*) http://blog2.net/$1 [R=301,L]
</VirtualHost>
④ vimで開いた「httpd.conf」ファイルの設定を保存し、ファイルを閉じます。
Escを押し、ノーマルモードに切り替え、「:wq」と入力してEnterを押します。
:wq
3-3.httpd.confの有効化
httpd.confの編集が完了したら、設定した内容を有効化するために、Apacheを再起動します。
「service httpd restart」と入力してEnterを押します。
[root@ conf]# service httpd restart
Apacheの再起動が完了しました。
httpd を停止中: [ OK ] httpd を起動中: [ OK ]
これで、301リダイレクトの設定が有効化されました。
3-4.httpd.confの動作確認
301リダイレクトの設定を有効化したら、動作確認を行います。
① はじめに、URLの正規化の動作確認を行うためのツールを準備します。
InternetExplorerやChromeでF12を押して、ブラウザの標準機能である開発者ツールを起動します。
以下のようなツールが表示されるので、「ネットワーク」をクリックし、左側に表示される再生ボタンをクリックして下さい。
これで、このブラウザが行う通信をキャプチャすることができるようになりました。
② ツールの準備ができたら301リダイレクトの動作確認を行っていきます。
まず、www無し、index.php無しのURLでアクセスし、以下のように、1行目が「200」となることを確認します。
これは、www無し、index.php無しのURLでアクセスすると、301リダイレクトによる転送が行われないことを表します。
③ 次に、www無し、index.php有りのURLでアクセスし、以下のように、1行目が「301」となることを確認します。
これは、www無し、index.php有りのURLでアクセスすると、301リダイレクトにより、www無し、index.php無しのURLへ転送されることを表します。
④ 次に、www有り、index.php無しのURLでアクセスし、以下のように、1行目が「301」となることを確認します。
これは、www有り、index.php無しのURLでアクセスすると、301リダイレクトにより、www無し、index.php無しのURLへ転送されることを表します。
⑤ 最後に、www有り、index.php有りのURLでアクセスし、以下のように、1行目、2行目が「301」となることを確認します。
これは、www有り、index.php有りのURLでアクセスすると、301リダイレクトにより、まず、www無し、index.php有りのURLへ転送され、次に、www無し、index.php無しのURLへ転送されることを表します。
以上により、301リダイレクトによるURLの正規化が正常に動作していることが確認できました。