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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
PythonでURLの有無、存在をチェックするスクリプト
PythonでURLが存在するか否かのチェックスクリプト。ライブラリ「urllib2」を使い、指定のURLにアクセスしそのレスポンスコードを判別するという仕組み。
-
本当に?GMO系ロリポップ・ヘテムルを無料で運用する方法があった!
ロリポップ、ヘテムルを株主優待を利用して実質無料で運営しよう!という解説記事です。株主優待で提供されるサービスの内容を解説し、無料になる仕組みを解説します。
-
CentOS環境に ntpdをインストールして自動的に時刻を取得して合わせる設定にする
VirtualBoxに構築した CentOSの環境の時計がずれているとき、ntpdをインストールし、時計を合わせる方法を解説。NTPサーバを指定する方法や ntpdを自動起動する設定も解説。
-
コピーコンテンツ対策.htaccessで直リンク禁止しリダイレクトで対応
不正なコピーコンテンツからの直リンクを拒否する.htaccessの設定方法。拒否するサイトを指定、許可するサイトを指定する方法、単純な拒否と画像の差し替えを解説。
-
XSERVERにCakePHP3をインストール。コマンドラインのPHPのバージョンを変更する方法で解決
XSERVERにCakePHP3をインストールするときに問題となるのはサーバーパネルとSSH接続の時とで認識されるPHPのバージョンの違いがあるため。その解消方法を解説する。
-
直リンク禁止の.htaccessを超分かりやすく解説。日本語じゃなくてPHPで説明
直リンクを禁止する.htaccessの記述内容を日本語ではなくPHPで解説!私自身もこの方法ですっかり理解できました。.htaccessって簡単!って思えますよ。
-
SyntaxHighlighterを導入してソースコードを見やすくしてみました
PHP、HTMLなどのソースコードをブログで紹介するとき、SyntaxHighlighterを利用することで見やすく提供することが出来ます。
-
Apacheの起動しているかの確認方法と起動、再起動、終了のコマンド
Apacheが起動しているかを確認する方法の解説に加え、Apacheの起動、停止、再起動のコマンドを解説。再起動のコマンドには restart、condrestart、reload、gracefulがあり、違いを解説。
-
日本語は2バイト文字?3バイト文字?
日本語は2バイトという理解でしたが、UTF-8では事情が違います。その説明です。
-
サイト更新、引越時に.htaccessでリダイレクトする方法解説
サイト更新,引越しなどでサイトのURLが変わった場合のリダイレクトを.htaccessのRewriteEngineを使って処理する方法の解説です。