検索からの評価を考えた
重複コンテンツの改善(URLの正規化)

 

2007年12月19日記事

He even made this nifty chart to try to explain it better:

He even posted this example of how the Google robots.txt file at
https://www.google.com/humans.txt works fine but
https://www.google.com/humans.txt/ 404s.

Google On Trailing Slashes & How It Impacts SEO & Search Rankingsより抜粋(この表記は任意)

上記から、ドメイン部分は、スラッシュありなしは問題なく同じページとして認識される。ただ、下層ページは、スラッシュなしの場合ファイルとして認識される。

以下は、.htaccessでの対処について説明しています。実際には以下の記述以外にも方法があります。通常は、表示の検証をしながら、何がベストなのか探りながらすすめる作業ですので、以下の記述に関しては参考として考えてください。

( 初級編 )
以下のURLで同一のコンテンツ(webページ)が表示されるのです。意外と気がついていないケースがほとんどです。

  1. http://www.example.com/
  2. http://example.com/
  3. http://www.example.com/index.html
  4. http://www.example.com/index.htm
  5. http://www.example.com/index.php
  6. http://www.example.com/index.cgi
  7. http://example.com/index.html
  8. http://example.com/index.htm
  9. http://example.com/index.php
  10. http://example.com/index.cgi

正確には、上記以外にもサーバ管理のスタイルにもよりますが、index.wml、index.shtml、index.jsp、index.js、index.jp、index.phtml、default.htm、default.html、home.htmdefault.asp、default.aspxなども表示される場合があります。

これらを、ベストなURLにする。ベストなURLとは、まずは、

  1. http://www.example.com/
  2. http://example.com/

この二つのどちらかを選択していただく事です。

どちらでもかまいません。昨今は、wwwナシが多くなっているようにも感じます。これは、どちらかをご決定していただく事が最適化にとって重要です。

まず、1.2.のどちらかを決めて頂いて、仮に2.のwwwナシという事で説明していきます。.htaccessの記述として、

RewriteEngine on
 RewriteCond %{HTTP_HOST} ^www.example.com
 RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

この記述にしてください。301の記述をいれるのは、wwwナシと確定して今後もこのURLをつかいます。という意味です。

さらに、index.html、index.htm、index.php、index.cgi、のファイル名を /(スラッシュ)で終了するようにします。この場合、htaccessの記述は、

RewriteEngine on
 RewriteCond %{THE_REQUEST} ^.*/index.html
 RewriteRule ^(.*)index.html$ http://example.com/$1 [R=301,L]

上記、index.htmlを例にしています。index..htmやindex.phpなどのファイルがある場合は、その分の追加が必用です。

( 中級編 )
さらに中級編として、もし、index.htmlとindex.phpが、別のコンテンツだった場合。どちらかは、新しいファイル名に変更して、しかも、元々の検索からの評価を引き継ぐ必用がありますので、仮に、index.phpをnew_index.phpとして運用していくことを想定します。

この場合、htaccessの記述としては、

Redirect permanent /index.php http://example.com/new_index.php

といった記述にしてください。

さらに、SSLの部分、https://で始まるURLが、検索に認識されている場合、つまり、

  1. http://www.example.com/
  2. http://example.com/
  3. http://www.example.com/index.html
  4. http://www.example.com/index.htm
  5. http://www.example.com/index.php
  6. http://www.example.com/index.cgi
  7. http://example.com/index.html
  8. http://example.com/index.htm
  9. http://example.com/index.php
  10. http://example.com/index.cgi
  11. https://www.example.com/
  12. https://example.com/
  13. https://www.example.com/index.html
  14. https://www.example.com/index.htm
  15. https://www.example.com/index.php
  16. https://www.example.com/index.cgi
  17. https://example.com/index.html
  18. https://example.com/index.htm
  19. https://example.com/index.php
  20. https://example.com/index.cgi

これらのURL(壮大な量ですね)が同一のコンテンツを表示している場合。htaccessにこんな記述を追加してください。

RewriteEngine on
 RewriteCond %{HTTPS} on
 RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

こうする事で、SSLが関係したhttpsの部分が、すべてSSLではないhttpではじまるURLにリダイレクトされます。

RewriteEngine on
 RewriteCond %{HTTPS} on
 RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]

 

もしくは、http:→https:にリダイレクト、つまり、SSLにリダイレクトする場合は、

RewriteEngine On
RewriteCond %{ENV:HTTPS} !on
RewriteCond %{HTTP:X-Forwarded-Proto} http
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

 

( 上級編なのか、もしくは番外編 )
http://example.com/
http://example.com

この二つのURLで、同じコンテンツが表示されます。この場合、webマスターツールになるガイドラインとしては、

検索エンジンにとっては、この 2 種類の URL がそれぞれ異なるコンテンツを保有していたとしても、技術的には問題ありません。しかし、ユーザーにとっては、非常に分かりにくいと言えます。たとえば、www.google.co.jp/Web Masters と www.google.co.jp/Web Masters/ でまったく違うコンテンツが表示される場合を想像してみてください。

URL 末尾のスラッシュは必要?より抜粋

この様ですので、2つのURLとして捉えられてしまう様です。こうなりますと、2つのURLで同一のコンテンツが表示されることになりますので、やはり、表示は、/(スラッシュ)もしくは/(スラッシュ)なし、に統一する必用があります。仮にその/(スラッシュ)ありに設定する方法です。

RewriteEngine on
 RewriteCond %{REQUEST_URI} !/$
 RewriteCond %{REQUEST_URI} !.[^/.]+$
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule .* %{REQUEST_URI}/ [R,L]

htaccessに、この記述でいける様です。

 

( 上級編2 )

example.comというドメインを例にして、

http://example.com/service/menu001/
http://example.com/service/?p=001

CMSであるケースですが、この2つのURLで、同じコンテンツを表示してしまうようなケースです。この場合、正規のURLとして、

http://example.com/service/menun001/

こちらを選択した場合、

http://example.com/service/smenu001/
http://example.com/service/?p=001

この二つで表示されるコンテンツのhtmlのヘッダに、

<link rel="canonical" href="http://example.com/service/menu001/">

といった記述をする事で、

http://example.com/service/menu001/

このページが正規化された、と表現します。

つまり、集約されたURL、上記の例ですと、http://example.com/service/menu001/ に検索の評価が集約されますので、検索ランクの向上やサイトの検索クエリの増加が想定できますので、是非、実行してみてください。