HTTPS(SSL)ページをインデックスさせない方法

住所や生年月日、クレジットカードなどの個人情報をインターネット経由で伝えることが当たり前のようになり、セキュアな通信はますます重要になってきています。

SSLというのは、”Secure Sockets Layer”の略でインターネット(TCP/IPネットワーク)でやりとりする情報を暗号化して送受信するプロトコル(通信規約)です。

ウェブサーバーとブラウザの通信をSSLの仕組みを使って暗号化するのが、HTTPSです。

SSLは、公開鍵やら秘密鍵やらデジタル証明書やらデジタル署名やらいろいろな技術を使い、理解するのに難易度が高い仕組みです。

といっても、今日の記事はSSLの解説ではありませんので、中身は知らなくてもぜんぜんOKです。w

ブログ読者から質問をいただきました。

「HTTPSページをインデックスさせないようにするには、どうすればいいのか?」という質問です。

この方は、eコマースサイトを運用していて、SSL証明書を取得し購入プロセスにはHTTPS通信を利用しています。
ところが、一部のページで、通常のHTTPと暗号化したHTTPSの両方のバージョンがインデックスされてしまい重複URLを引き起こしているようなのです。

http://www.example.com/shopping/
と、
https://www.example.com/shopping/
は、
暗号化しているかしていないかだけの違いで、表示されるコンテンツはまったく同じです。

“s”が付くか付かないかだけなのですが、サーチエンジンにとっては異なるURLであり、したがって重複コンテンツ問題を発生させてしまうかも知れません。

僕にも経験がない設定なので、ウェブを検索したりフォーラムに投稿したりして解決策を探してみました。

2つの方法が見つかったので解説します。

ほぼ間違いく機能する設定のはずですが、ここがおかしいとか、こうしたほうがいいというのをご存知でしたら、教えてください。

1つめは、robots.txtでHTTPSページへのアクセスをブロックする方法です。

まず、HTTPSのアクセスに対するrobots.txtを別に作ります。

名前は、分かりやすく「robots_ssl.txt」にしておきます(任意の名前でOK)。

robots_ssl.txtに次のように記述します。

User-agent: *
Disallow: /

「すべてのロボットに対してすべてのコンテンツへのアクセスを禁止する」という命令ですね。

次に、.hatccessに次のように記述します。

RewriteCond %{SERVER_PORT} ^443$
RewriteRule ^robots.txt$ robots_ssl.txt

「ポート443への通信(=HTTPS)が発生したときは、robots.txtをrobots_ssl.txtに置き換えなさい」という命令です。
(インターネットで使われるTCP/IPという通信規約では、ポート番号といってサービスごとに固有の番号を持ちます。コンピュータ単位に割り当てられるのがIPアドレスですね。そのコンピュータの中で、HTTPなら80番、HTTPSなら443番、SMTPなら25番、FTPなら21番というように通信の種類ごとに番号が決まっています。)

一般的な検索エンジンのロボットは、サイトにアクセスしたときにまず最初にルートディレクトリにrobots.txtがあるかどうかを確認し、あれば中身をチェックします。

上の設定では、SSL通信のときには標準のrobots.txtではなく、独自の名前で作成したrobots_ssl.txtというファイルを読むように仕込んでいるわけです。

つまり、HTTPS通信のときはすべてのコンテンツへのアクセスを禁じます。

robots.txtを使ったHTTPSページのブロック方法は、シンプルで採用しやすいですね。

ただ問題もあります。

robots.txtの命令は守られないことも多いのです。
無視してアクセスして、インデックスしてしまうケースが往々にしてあるのです。
これは、GoogleもYahoo!もBingも該当します。

絶対に信用できるものではないんですね。

そこで、別の方法があります。

こちらは、.htaccessに次のように記述します。

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} ^.*googlebot.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*slurp.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*msnbot.*$
RewriteCond %{SERVER_PORT}443
RewriteRule ^(.*)$ http://www.domain.com/$1 [R,L]

「googlebot(googleのロボット)、slurp(Yahoo!のロボット)、msnbot(Bingのロボット)が、ポート443(HTTPS)でアクセスしてきたときには、通常のHTTPに書き換えてしまう」という設定です。

これは、ロボットがHTTPSで通信してきたときには否が応でもHTTPに置き換わってしまうので、HTTPSでアクセスすることはできません。

ただし、上の記述ではユーザーエージェントで指定しているので、3大検索エンジンのロボットに対してだけ有効です(とはいえ、他の検索エンジンは無視してもいいでしょう。必要であれば追加してください)。

今日お伝えした設定が役に立つ読者さんは、ほんの一握りだと思います。

ですが、今本格的なeコマースサイトを準備していたり、比較的大きなeコマースサイトのコンサルティングを請け負うことも増えてきそうなので、自分自身の備忘録としてエントリしました。