HTTPS URLをgoogleへインデックスしない

ブログを立ち上げて、独自のドメインを使い始めると、必要に応じてHTTPs経由のSSL通信を行ないたい場合があるが、一般公開のブログには、HTTPs通信までを求めないユーザーも多いと思う。

ここで問題なのは、HTTPs経由でもHTTP経由でも同時にアクセスが可能なサイトを作った場合、自分は、一般公開用のURLは、HTTPs通信を使わず、検索エンジンへのインデックスも、HTTP経由のアドレスのみをインデックスさせたいと考えても、同一のページがHTTPs経由でアクセス可能である場合、HTTP経由のURLよりも優先されて、HTTPs経由のURLがインデックスされてしまう。

この件は、googleの公式見解なので、HTTPsをインデックスさせたくなければ、最初からHTTPs対応にしないでサイトを作らなくてはならない。
これも場合によっては都合が悪く、同じURL中にHTTPs経由のページを置きたい場合などには対応が出来ない。

そもそも、HTTPs経由で一般公開のブログを置く決定的なメリットは見当たらないし、まして、サイトのアクセススピードが低下してしまったのでは、本末転倒ということにもなりかねない。
デメリットを承知の上で、あえて、HTTP経由のみのインデックスをさせたければ、それなりの対策をしておく必要がでてきたと理解して良いろう。

前回書いた記事で、概ねの対策について検討した結果、Robots.txtのみを書き換えると、HTTP経由のインデックスもされなくなってしまうので、唯一残る方法は、HTTPs経由でアクセスされた場合に、強制的に、HTTP経由のURLへリダイレクトさせるのが良い方法だった。検索エンジンのインデックスが、HTTP経由になれば良いだけで、通常のユーザーは、インデックスされたURLへアクセスすることになるので問題ない。

HTTPs  –> HTTP リダイレクトの方法

.htaccessの先頭に以下を記入する。

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTPS} on
  RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

結局のところ、検索エンジンにHTTPs経由のページの存在を教えないということになるだけなのだが、これで、HTTPs経由とHTTP経由が同時にアクセス可能なURLでも、HTTP経由のURLのみがインデックスされるようになる。

逆に、HTTP経由で作ったURLをHTTPs経由に変更したい場合には、SSLキーを取得して、サイトをSSL対応とした状態で、サイトを更新していけば、ほぼ、1ヶ月程度で、殆どのURLがHTTPs経由のURLに置き換わる。
それも、待ちたくない場合には、上記の応用でHTTP経由でアクセスしてきたら、HTTPsへリダイレクトさせれば良いことになる。

ただし、サイトの安全性を評価では、トップページにHTTP経由のURLリンクが含まれると、外部リンクに安全ではないものが含まれると言う判定になるので、HTMLソースも含めて、全てのアドレスをHTTPs経由にしておく必要がでてくる。結構、こういった作業は地道な作業なのである。

Google検索~なんかえらいことになってた~

~Google サーチエンジンがひどいことになってた~

SEO対策で検索トップに表示されるようにと言う記事は、もう既に過去のものとなったのか、日進月歩というか、今や、HTTPsがメインのサーチ対象となっていて、すっかり油断していたら、当ページのインデックスが全て、HTTPs経由のインデックスしか出てこないではないか。

もともと、個人ユースなので、HTTPsでのアクセスを主体に考えておらず、WordPressのベースURLも”HTTP://hoge/”というのを基本に設定しているので、勝手にHTTPs経由になってしまうと、とても困るのである。
FireFOXを使っていて、最近、黙っていると、HTTPsに転送されるものが大変多くなってきていて、「安全な接続が出来ませんでした」のような、警告メッセージが表示されるのが、多くなってきたなあ。と言う程度だったのだが、これには理由があった訳ですよね。

「意図せずに、HTTPs経由のインデックスがされる。」これは、ある程度既知なのだけれど、この選択は、ユーザーによって自由に選択できて良いと思うのだが、不幸にして、HTTP経由と、HTTP経由のアクセスが同時に可能な場合には、ベースURLのアドレスに関係なく、HTTPsが優先的にインデックスされてしまうのである。
これは、まずい・・と慌てて、HTTPsアドレス経由のアクセスを消しても、事は既に遅いのであり、Googleエンジンにインデックスされた以降にこれをすると、閉鎖してしまったような振る舞いをして、本来はアクセスできなくてはならないページが全くアクセス不能となるので、仕方なく、HTTPsでのアクセスも生かしつつ、それでも、普段は、HTTP経由でアクセスしてよね。
と、いうことで、HTTPS://hoge/のインデックスを停止する仕組みを作ったのだが、正直、これをやると、インデックスそのものがされなくなってしまうのではないかという不安も出てくるわけで、大変困ってしまった。

とりあえず、通常通りに、http://hoge/でインデックスするための工夫をしてみた。
Robotsが真面目に、robots.txtの指示を守ってくれるかどうかは、多少疑問点はあるが、下記のような設定をしてしばらく様子を見ることにした。

~/public_html/.htaccessに以下を記述

#<IfModule mod_rewrite.c>
#RewriteEngine On
#RewriteCond %{HTTPS} on
#RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
#</IfModule>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} ^443$
RewriteRule ^robots.txt$ robots_ssl.txt
</IfModule>

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

この状態で、robots_ssl.txtには以下を記述した。

User-agent: *
Disallow: /

追記)
HTTPsによるインデックスを呈するだけでは、なんの役にもたたず、単に、検索エンジンにインデックスされないだけだったので、青字の部分を生かし、様子を見ることにした。
今度は、どちらがインデックスされるかということなのだが。。

これで、HTTPs経由で、robots.txtが参照されると、全てのRobotsには、Disallow: /となるので、HTTPsはインデックスされない事になる。
これでもだめなら、青文字の部分を生かし、HTTPsを強制的にHTTP経由にしてしまう。

現行で問題なのは、ブラウザーによっては、HTTPsの中間証明書が正しく機能しないので、HTTP経由でアクセスしてきたユーザーが場合によっては警告メッセージをみることになってしまう点である。
もしや、FireFOXだけの問題なのかもしれないが、困った問題である。