重複コンテンツを301リダイレクトで統一する.htaccessの設定・書き方まとめ
重複コンテンツを避けるために設定する.htaccessファイルの書き方のご紹介です。 SEO対策として、一般的によく使われている重要な設定をまとめました。
重複コンテンツとは
重複コンテンツとは、URLは異なるけど 内容が同じページのことをいいます。 例えば、以下のようなURLのサイトがあると仮定します。
これは、以下のように書いても同じことです。
その理由はWebサーバの仕組みによるもので、index.htmlは省略しても同じページにアクセスできるようになっているからです。 (詳細はindx.htmlの特徴に記載しています。)
このように、URLは異なるけど、表示される内容は同じページのことを重複コンテンツといいます。 そしてやっかいなことに、重複コンテンツは意図しなくても知らずのうちにできてしまう可能性があるのです。
そうならないように、これからいくつかの重複コンテンツ対策をご紹介しますが、 その前に重複コンテンツ対策に重要な.htaccessファイルについてご説明をします。
.htaccessの301リダイレクトとは
.htaccessとは、Webサーバーの動作を制御するファイルのことです。 .htaccessファイルを使えば、自分のサイトのアクセスを制御したり、 URLが変更されたときにリダイレクトをしたりできます。
ブログやサイト運営でよく使われるのが、301リダイレクト設定です。 .htaccessファイルに301リダイレクト設定を書き足すことで、重複コンテンツを1つにまとめることが可能なのです。
例えば、先ほどのindex.htmlがあるURLと、ないURLについて301リダイレクト設定を当てはめてみます。 index.htmlがあってもなくても同じなので、普通は省略したほうに統一するのが主流です。
301リダイレクトを使ってindex.htmlなしに統一する設定をすると以下のようになります。
このように、複数のURLを1つにまとめて、アクセスを統一することを301リダイレクトといいます。 統一することを専門用語で正規化するともいいます。
重複コンテンツの可能性があるのはindex.html以外にも色々あります。 URLのwwwあり・なしや、httpとhttpsのちがいなどがそうです。 これらはどちらか一方に統一されているのが望ましいので、そのためにhtaccessファイルに301リダイレクト設定を追記します。
wwwあり・なしの統一 | |
---|---|
301リダイレクト前 | 301リダイレクト後 |
http://www.test.com/ | http://test.com/ |
http://test.com/ | |
index.htmlあり・なしの統一 | |
301リダイレクト前 | 301リダイレクト後 |
~test.com/index.html | ~test.com/ |
~test.com/ | |
httpとhttpsの統一 | |
301リダイレクト前 | 301リダイレクト後 |
http://test.com/ | https://test.com/ |
https://test.com/ |
URLを統一して正規化することで、検索エンジンの評価やアクセスの分散を防ぐことができ、 SEO対策になります。
ただし、htaccessファイルの設定はApacheを使用しているサーバでないといけません。 多くのレンタルサーバでは設定可能となっていますが、念のためにお使いのレンタルサーバで確認をしておくと安心です。 htaccessが使えるかどうかは、各レンタルサーバ公式サイトの質問コーナーなどに記載されています。
また、各レンタルサーバでhtaccessファイルの設置方法なども案内があると思うので、 あわせて確認をしておくと良いでしょう。
htaccessの書き方
301リダイレクト設定を使って、URLを統一するhtaccessの書き方のご説明です。 ここでは、index.htmlのありなし、wwwのありなし、httpとhttpsを統一して、正規化する書き方についてご紹介します。
index.htmlのあり・なしを統一する書き方
index.htmlはなしで統一し、正規化するのが一般的なので、ここでもなしで統一するhtaccessの書き方をご紹介しています。 詳しくは別ページにまとめました。 index.htmlについて基本的なことから、実際にhtaccessに書く内容までまとめています。
wwwあり・なしを統一する書き方
URLの「http://」の次にくるwwwをありで統一するのか、なしで統一するのかについてです。 index.htmlとちがい、こちらは好みの問題であるため、お好きな方で統一して良いと思います。 こちらも、詳しくは別ページにまとめています。
httpとhttpsを統一する書き方
httpとhttpsを統一して正規化する場合は、サイトやブログをSSL化したときです。 SSL化すると、httpという部分がhttpsになります。 URLが変わるので、この場合もhtaccessに301リダイレクトを記述して統一する必要があります。
.htaccessファイルに書く内容は以下のようになります。
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
こちらのソースは何も変更せずにそのままコピペして使えます。
簡単にソースコードの意味をご説明しますが、 コピペで済むので、なんとなくこんなことをしているのだなと思っていただければ結構です。
RewriteEngine on
Rewrite機能(URL書き換えエンジン)を有効にしています。 複数のURLを書き換える場合でも、何回もRewriteEngine onを記述する必要はなく、1度でOKです。 (書き換えるたびに記述しても問題ありませんが)
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCondは条件式で、 その条件はhttpsアクセスではないときという意味です。 別の書き方として「RewriteCond %{HTTPS} off」と書いても同じことです。 そして、その条件に一致したときに実行されるのがRewriteRuleとなり、その内容は httpsアクセスに301リダイレクトするというものです。
これらをhtaccessに書き足すことで、httpアクセスがhttpsアクセスで統一され、正規化されます。
まとめて統一し、正規化する.htaccessの書き方
index.htmlあり・なしや、wwwあり・なし、httpとhttpsの統一方法はそれぞれご紹介しましたが、 実際にはこれらをまとめて設定することが多いと思うので、その書き方をご紹介します。 ここではよく使われるであろう以下の2つをご説明します。
- wwwあり+index.htmlなし+https
- wwwなし+index.htmlなし+https
wwwあり、index.htmlなし、httpsで統一する書き方
wwwはありで、index.htmlはなし、そしてSSL化対応のhttpsでURLを統一して正規化するhtaccessの書き方です。
# wwwあり対応
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^test\.com$
RewriteRule ^(.*)$ https://www.test.com/$1 [R=301,L]
# index.htmlなし対応
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ https://www.test.com/$1 [R=301,L]
# SSL化対応
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
赤字のtest.comの箇所はご自身が運営しているサイトのURLに置き換える必要がありますが、 それ以外は完全コピペで書いてOKです。 ただ、#の行はコメントなので削除しておいてください。
wwwなし、index.htmlなし、httpsで統一する書き方
wwwとindex.htmlは両方ともなしで統一して、さらにSSL化対応のhttpsでURLを統一して正規化するhtaccessの書き方です。
# wwwなし対応
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.test\.com$
RewriteRule ^(.*)$ https://test.com/$1 [R=301,L]
# index.htmlなし対応
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ https://test.com/$1 [R=301,L]
# SSL化対応
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
こちらも赤字のtest.comの箇所はご自身が運営しているサイトのURLに置き換えてください。 #のコメントは削除し、その他は完全コピペで書いてOKです。