Webサイト公開時に重複コンテンツを排除する.htaccessのリダイレクトの設定のまとめ
2017/03/11
重複コンテンツを排除する.htaccessの設定
SEO的視点から重複コンテンツは排除すべき
Googleは、同じ内容のページを重複コンテンツとして処理します。
「記事の使いまわしもしていないし、コピーコンテンツもないから重複コンテンツなんてないよ」と思っていても、知らず知らずのうちに重複コンテンツを生み出している場合があります。
今回紹介する方法は、下記の 4つの対応です。
- 「http」を「https」にリダイレクトする
- 「www.」を表示するかしないかを正規化する
- 「index.html」を表示するかしないかを正規化する
- エックスサーバでサブフォルダを表示させない
例えば、
http://s-giken.net/index.php
http://s-giken.net
は同じページが表示されますので、内容は全く同じなのですが、URLは違うものとなります。
そのため、これが重複コンテンツとして処理されてしまうわけです。
これは意図して重複コンテンツを作ろうとしたのではなく、サーバの仕様、使用している WordPressの仕様などによって発生しうる重複コンテンツなのです。
これらの意図せずに発生する重複コンテンツを一つにする(正規化する)ことで重複コンテンツをなくし、Googleから正しい評価を与えてもらえる環境にしよう、ということがこの記事での趣旨です。
「http」を「https」にリダイレクトする
SSLの対応をした場合、URLは
http://...
から
https://...
に変わります。
ですが、何も設定しない場合は、httpでも httpsでもアクセスすることができますので、重複コンテンツとなってしまいます。
そのため、httpでアクセスした場合は httpsにリダイレクトさせる必要があります。
ドキュメントルートにある .htaccessに下記の記述を追加します。
1 2 3 |
RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://example.com/$1 [R=301,L] |
「http」を「https」にリダイレクトする .htaccessの解説
上記の .htaccessの記述ですが、内容は非常にシンプルです。
1行目は URLをリダイレクトするための処理を開始します、という宣言です。
2行目はアクセスが httpsかどうかの判断です。
httpsでのアクセスが offの時、つまり、httpでアクセスしたとき、という条件です。
3行目が、リダイレクトをする処理です。
「example.com」の部分を自分のサイトの URLを設定します。また、「www.」やサブドメインがある場合はそれも含めて記述をします。
「^(.*)$」は、正規表現で記述されたドメインを除いた URLの部分で、「$1」の部分に置き換えられて編集されます。
「[R=301,L]」は、301リダイレクト(恒久的に URLが変更になったリダイレクト)であり、「L」の部分はリダイレクトをしたらこのリダイレクトルールの適用は終了です、ということを指定しています。
また、3行目は、下記のように表現することもできます。
1 |
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} |
「http」と「https」の両方にアクセスできる場合の Googleの処理
httpと httpsの両方の URLが存在する場合の Googleの検索結果への対応ですが、現状では特にペナルティもなく、httpsの方を優先的に出してくれます。
そのため、httpと httpsの両方でアクセスできることにメリットがあれば、積極的に httpsにリダイレクトする設定をしない、という判断も可能です。
SSL対応する場合の WordPressの対応
WordPressでは、左メニューの「設定」-「一般」から遷移する「一般設定」の画面に「WordPress アドレス (URL)」「サイトアドレス (URL)」を設定する項目があります。
ここにはサイトの URLを入力しますが、SSLに対応するサイトを構築した場合は、個々の設定も https://... のURLになっているかを確認しておきましょう。
「www.」を表示するかしないかを正規化する
多くのレンタルサーバでは、下記のように「www.」があってもなくても同じページを表示するようになっている場合が多々あります。
http://example.com/
http://www.example.com/
「www.」のありなしのどちらでもアクセスできる便利な機能なのですが、SEOの視点から見た場合は、これも重複コンテンツとしてみなされてしまいますので、「www.」を付けるのか、なしでいくのか、それを決めたうえで統一をする必要があります。
SEOの視点からは、「www.」があるか、ないかによる違いはありません。
入力が楽、という理由で「www.」なしの方がいいんじゃないか、と思う程度です。
この「www.」あり、なしの統一も .htaccessにリダイレクトの設定をすることで対応を行うことができます。
「example.com」の部分は、各自のドメインに変更をしてください。
「www.」ありに統一する場合
1 2 3 4 |
Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^example\.com$ RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] |
「www.」なしに統一する場合
1 2 3 4 |
Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.example\.com$ RewriteRule ^(.*)$ http://example.com/$1 [R=301,L] |
「index.html」を表示するかしないかを正規化する
最初のサンプルで説明しましたが、弊社のコーポレートサイトは、下記のいずれの URLでも同じページが表示されます。
http://s-giken.net/index.php
http://s-giken.net
ですが、Googleは別のページとして認識しますので、これもどちらかに統一しておく必要があります。
※弊社のコーポレートサイトで、inxe.phpのありなしの正規化をしていないのは特に理由はありません。単に面倒でやっていないだけです。
が、ここで記事にしてしまったのでやれなくなりましたね(苦笑)。
WordPressの場合は index.phpは表示されませんが、静的な HTMLで組んだサイトの場合は、index.htmlを出すか出さないかは好みの問題です。
出さない方が URLが短くなるのでいいかな、と思う程度です。
「index.html」を表示するかしないかを正規化する場合の .htaccessのリダイレクト設定は以下のようになります。
1 2 3 4 |
Options +FollowSymLinks RewriteEngine on RewriteCond %{THE_REQUEST} ^.*/index.html RewriteRule ^(.*)index.html$ http://www.example.com/$1 [R=301,L] |
3行目で「index.html」を条件にして「index.html」を表示しないようにする設定になっています。
「index.html」を「index.php」に変更することもできます。
ただし、「index.html」と「index.php」の両方の対処をしたい場合は下記のようになります。(2通りの記述の方法があります。)
1 2 3 4 5 6 |
■1行にまとめて書く場合 RewriteCond %{THE_REQUEST} ^.*/(index.html|index.php) ■2行に分けて書く場合 RewriteCond %{THE_REQUEST} ^.*/index.php [OR] RewriteCond %{THE_REQUEST} ^.*/index.html |
※「RewriteCond」は条件を記述するところですが、「[OR]」を指定しない場合は「[AND]」が指定されたものとみなされますので、条件に合致しなくなりますので注意が必要です。
サブフォルダがサブドメインの場合(エックスサーバ)
エックスサーバのサーバ設定では、サブドメインのドキュメントルートは、ドメインフォルダの中にサブフォルダとして設定されます。
そのため、下記の 2つの URLが同じページを見ることになります。
http://blog.example.com
http://example.com/blog
エックスサーバなど一部の共有サーバの場合は、サーバの仕様上サブフォルダとサブドメインが同じ場所となりますので、そのままにしておくとこれも重複コンテンツとなってしまいます。
そのため、サブフォルダ形式ではアクセスできないように制限を行います。(ロリポップサーバなどは全く関係ない話ですが。)
そのほかの設定と同じく、.htaccessに下記の情報を設定します。
1 2 3 4 5 |
# サブフォルダでのアクセス禁止 SetEnvIf Host "^blog.example.com$" host order deny,allow deny from all allow from env=host |
重複コンテンツに対する正確な理解
重複コンテンツを作るとペナルティを受ける、と考えている方は多いのですが、正確にはマイナスのペナルティーを受けるわけではありません。
例えば、先に説明したとおり、下記のページは同じページが表示されます。
http://s-giken.net/index.php
http://s-giken.net
これに対して、Googleがどちらかのページにペナルティーを与えるということはありません。
ですが、これらの重複コンテンツに限った話ではないのですが、同じような情報が掲載されているページが複数あった場合、Googleは、検索結果の一覧には「一番重要な情報が掲載されている」と判断したページのみを表示しようとします。
そのため、重複コンテンツのページは、いずれか 1ページのみ表示がされることになります。
「どちらかが表示されるならいいじゃないか」と思うかもしれませんが、同じ内容のページが複数ある場合、Googleの評価もアクセスも複数のページに分散されるため、トータルで見ると検索結果の上位には出てきにくくなる、ということにつながるわけです。
分かりやすく数値で表現するなら、正しい処理(正規化)をしている場合は、1ページだけとなりますので、100点の 1ページが存在していると判断されます。
ですが、重複ページが存在すると、50点のページが 2ページ存在していると判断されます。
そうなると、100点のページは検索にヒットする可能性がありますが、50点のページではその他のサイトのページの方がポイントが高くなりますので、そもそもどちらも表示されなくなる、ということにつながるわけです。
なので、重複コンテンツにつながる事象は排除し、このサイトではこの URLの表現が唯一のものです、ということを明確にすべきなのです。
そして、その作業のことを Googleは「正規化」と呼んでいて、サイトの管理者は対応すべきものとして案内しています。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
本当に?GMO系ロリポップ・ヘテムルを無料で運用する方法があった!
ロリポップ、ヘテムルを株主優待を利用して実質無料で運営しよう!という解説記事です。株主優待で提供されるサービスの内容を解説し、無料になる仕組みを解説します。
-
mod_pagespeedでWebサイトを超簡単高速化・Google謹製の最終兵器
Webサイトの表示スピード高速化の最終兵器、Google謹製mod_pagespeedの解説です。レンタルサーバではX-Serverでしか利用できませんが、ワンクリックで高速化します。
-
CentOS環境に ntpdをインストールして自動的に時刻を取得して合わせる設定にする
VirtualBoxに構築した CentOSの環境の時計がずれているとき、ntpdをインストールし、時計を合わせる方法を解説。NTPサーバを指定する方法や ntpdを自動起動する設定も解説。
-
Selenium WebDriver、Pythonをインストールし Chromeの自動操作の環境構築手順のまとめ
Selenium WebDriverを使ってChromeを自動操作する環境を構築する手順のまとめ。使用するPythonのインストールから、サンプルスクリプトの動作確認までを詳細解説。
-
日本語は2バイト文字?3バイト文字?
日本語は2バイトという理解でしたが、UTF-8では事情が違います。その説明です。
-
X Serverへの引越しの注意点まとめ。ロリポップとの違いと対処方法 6事例
ロリポップからX Serverに引越し。ロリポップとX Serverの違いに注目することでX Serverの設定方法を明確にします。またX Serverならではの設定ポイントなども解説。
-
ブラウザのキャッシュを活用するの対策!広告バナーを消して表示を高速化
あなたのサイトが遅いのはバリューコマースのバナーではないですか?バリューコマースのバナーを外すだけでmod_deflateとmod_expiresを設定するより効果があります!
-
直リンクとは何か?直リンクとディープリンクの違いと著作権問題
直リンクは著作権違反なのか?議論の前にまず「直リンク」の意味を正しく理解しよう。直リンクは他のサイトの画像を読み込む、ディープリンクなど多様な意味がある。
-
PythonでUTF-8など日本語(全角文字)を使う方法。コメントにも必要。
Pythonの標準では日本語(全角文字)を利用できないので、利用する際は文字コードを宣言する必要がある。「# coding: utf-8」の様に記述すればOK。
-
FTPでダウンロード時にファイルが重複するため上書きしますか?と表示される問題
FTPでファイルをダウンロードする際に「ファイルが重複しています。上書きしますか?」というメッセージが出る場合がありますが、これの原因と対策、解決策の記事です。