先日から動いていたブログの移転作業が完了しました。
って、このページをご覧の方は新URLでアクセスして来ておられるのですから、何を今さらという話ですね。
皆様、今後ともどうぞご贔屓にお願い致します。
以下は自分用メモのような意味合いで、今回行った手順を整理しておきます。
1. サーチエンジンのロボットを排除
robots.txtで新旧それぞれのサブドメインへのアクセスを止めます。
User-agent: *
Disallow: /
2. Googleからインデクスを削除
ウェブマスターツールから[クローラのアクセス]→[URLの削除]→[新しい削除リクエスト]で申請。数時間で完全に削除されました。
3. サーバーのサブドメイン設定を変更
新しいサブドメインをブログが置かれたディレクトリにポイントし、古いサブドメインのポイント先に新しいディレクトリを作成します。新しいディレクトリの中身は空ですから、これにより以前のURLではブログにアクセス出来なくなります。
4. 旧サブドメインのポイント先にエラーメッセージを準備
作成したディレクトリには、更に /error ディレクトリを作成して403と404のページを準備。アクセスがあった際にエラーを返すと同時に、新サブドメインへ誘導するメッセージを記載しておきます。
5. .htaccessの書き換え
新ドメインのドキュメントルートには旧ドメインで使用していた.htaccessをそのまま置きますが、エラードキュメントのURLのみ変更しておきます。
ErrorDocument 404 http://cyber.bonmee.com/error/404.html
ErrorDocument 403 http://cyber.bonmee.com/error/403.html
AddDefaultCharset utf-8
Order Allow,Deny
Allow from allDeny from ***
旧ドメインの方にも.htaccessを置きます。
ErrorDocument 404 http://blog.bonmee.com/error/404.html
ErrorDocument 403 http://blog.bonmee.com/error/403.html
AddDefaultCharset utf-8
Order Allow,Deny
Allow from all
6. 新サブドメインのrobots.txtを書き換え
新しいサブドメインへのロボットアクセスを許可します。ただし、エラーメッセージや画像があるディレクトリへのアクセスは禁止しておきます。
User-agent: *
Allow: /
Disallow: /image/
Disallow: /error/
エラーメッセージがインデクスされても検索結果にゴミが混ざるだけですし、画像をインデクスされても困りますからね。
7. WordPressのブログURLを変更
Dashboardの[Settings]からWordPress addressとBlog addressを変更。これにより、自動生成される内部リンクのサブドメインが新しい方に書き換えられます。
8. 記事内に記述された内部リンクの変更
記事内に貼られた過去記事へのリンクを見直します。が、これは各ページをチェックしながらの手作業ですので時間を要しますね。後になって見落としが発覚しそうな気もします。
9. 外部JavaScriptファイル内の記述を変更
外部JavaScript内に旧サブドメインが記載されていますので、それを新サブドメインに書き換えます。これはEmacsで M-x replace-string を使えば一瞬ですべてが書き換わります。
10. ドメイン内の他サイトから貼られたリンクを修正
www.bonmee.comやgourmet.bonmee.comなどに記述されているブログへのリンクを書き換えます。これも手作業だと非常に面倒な作業になりますが、htmlファイルですからね。コンソールからPerlでプログラムを打ち込んで書き換えれば一瞬です。
# perl
@files= `ls -l`;
foreach $files(@files){
$_ = `cat $files`;
$_ =~ s/blog\.bonmee.\com/cyber\.bonmee\.com/g;
$new = $files + “.tmp”;
`touch $new`;
print $_, $new;
rename $new, $files;
}
C^d
各ディレクトリを `ls -l` でリスティングして cat でファイルを開き、s///でリプレースします。touch で空のファイルを作成して書き換えた内容を出力し、ファイル名に”.tmp”を付加して保存。その後、元のファイル名にリネームします。簡単ですね。
11. リンクして頂いている他サイトへ書き換えの依頼
これは他人様の問題でもありますので、私一人ではどうしようもありませんね。折にふれて、順次お願いに巡回することにします。
こちらのブログは個人のダイアリーですので、記事をお読みになる方だけに来て頂きたいものですから、何かの情報を求めて検索サイトから来られる方を制限しています。
ですが、最初にお断りを入れているにもかかわらず、パッと見てサッと帰る方が一向に減らないコンテンツがあります。
それはコンピュータのトラブルに関する記事に多く、恐らくご自身のコンピュータが何らかの問題を抱えており、それを解決する手段を情報として求めておられるのは容易に想像出来ます。
しかし、私のブログは情報サイトではなく、その日にたまたまそういうトラブルを抱えたお客様のところへ仕事で行きましたよ、という記事を書いているに過ぎません。
もちろん私はそのお客様宅でトラブルを解決して帰って来てはいますが、こちらはリファレンスサイトじゃありませんのでね。その原因や解決の手法を書くことは滅多にありません。
そのため、情報を期待して検索エンジンから来られた方には情報目的での閲覧をお断りする旨を表示し、ご同意頂いて初めてページが表示される仕組みにしてあるのですが・・・。
明らかな情報目的であるにもかかわらず、サイトポリシーには同意したフリをする方が多いようですのでね。それならば、該当するページは検索エンジン経由では表示しないようにしてしまえ、ということで。
あまり手の内を晒すのもアレなんですが、ちゃんとコンテンツをお読みになる方はこのコンテンツもお読みになるでしょうから、こちらには手法を公開しておきます。
var lh = location.href;
splh1 = new Array;
if(lh.match(/\&/)){
splh1 = lh.split(’&');
lh = splh1[0];
}
splh2 = new Array;
splh2 = lh.split(’=');
lh = splh2[1];
dsln = new Array(”1234″,”5678″,”9012″,”3456″,”7890″,”11234″);
var dsflag = 0;
for(i=0;iif(dsln[i] == lh){
dsflag = 1;
cbmds = dsln[i];
break;
}
}
if(dsflag == 1){ setCookie("__cbmds", cbmds); }
if((cbmds == lh) && (iflag == 0) && (cbmsd == 1) && (dsflag == 1)){
alert("このコンテンツは表示出来ません。\n\n問題解決のための情報は他のサイトでお探し下さい。");
cbmr = getCookie("__cbmr");
clearCookie("__cbm");
location.href = cbmr;
}
ページにアクセスがあった時点でそのページのURLを取得し、”&”が含まれる場合は”&”で分割して配列 splh1 に収め、URLの前半部分を変数 lh に代入します。
例:
http://blog.bonmee.com/?p=1234″&”Comment
↓
http://blog.bonmee.com/?p=1234 ←ここが変数 lh に格納される
次に、lh に代入された文字列を “=” で分割し、今度は後半部分を変数 lh に代入します。この時点で変数 lh にはパーマリンクの数字部分のみが格納されています。
例:
http://blog.bonmee.com/?p”=”1234
↓
1234 ←ここが変数 lh に格納される
配列 dsln に該当ページの数字部分だけを格納しておき、forで回しながら lh と照合、マッチした時点でフラグを立て、マッチした数字をcookieで送ります。
初めてのアクセスだった場合はその下の行は実行されず、以下のスクリプトへ飛びます。
if(dsflag == 1){
alert(”このコンテンツは表示出来ません。\n\nサーチエンジンからこのページへの訪問者は概ね直帰率が高く滞在時間も短いため\t\n先に表示した「何らかの問題を解決するための情報をお探しの方」に該当すると認めます。\n\n情報目的の閲覧をお断りする旨については既にご同意頂いておりますので\n問題解決の参考になる情報は他のサイトでお探し下さい。”);
clearCookie(”__cbm”);
cbmsd = 1;
setCookie(”__cbmsd”, cbmsd);
location.href = cbmr;
}else{
location.reload();
}
サーチエンジンからのアクセスを判定してサイトポリシーを表示し、OKがクリックされた時点でフラグが立っていた場合、該当ページを表示する前に弾きます。
そのままでは、弾かれたユーザーがブラウザのアドレスバーにURLを直接入力すれば表示されてしまいますね。それを回避するために “__cbmsd” というcookieを食わせて識別します。このcookieを食った状態では、配列dslnに登録されたページは何をやっても表示されません。
これを回避するには一旦トップページを表示させ(cookieが消去される)、サイト内のリンクをたどって該当ページへ行き着く必要があります。
しかし、そこで先を急いで次から次へとリンクを辿ると、今度は1ページ10秒の制限に引っかかることになります。このブログは、10秒未満のページ移動を3回繰り返せば警告メッセージが表示され、更に3回繰り返せば403に飛んで以後のアクセスは拒否される仕組みになっているからです。
要するに、「情報が欲しいだけでコンテンツに興味がない人は来ないでくれ」と言ってるのと同じことですね。
何度も書きますけれども、確かにサイト内でユーザーがどのように振る舞おうがユーザーの自由ですが、一方では管理者が誰にサイトを公開するかを決めるのもまた自由ですので。
それから、アクセス制限にcookieを利用しますので、cookieを拒否されていればこの手法は通用しませんね。ですから、最初の部分に以下のスクリプトを埋め込んでおきます。
var cbmt = 1;
setCookie(”__cbmt”, cbmt);
(中略)
cbmt = getCookie(”__cbmt”);
if(cbmt == “”){
alert(”cookieを有効にして下さい。”);
history.back();
}
clearCookie(”__cbmt”);
“__cbmt” というテスト用のcookieを送り、その後で受信して中身を確認します。もしも受け取ったcookieの中身が空だったらブラウザはcookieを食っていないことになりますので、その場合は history.back() で元のページに戻って頂くことに。
後はJavaScriptを切って来られた場合ですが、noscriptで無理やり403へ飛ばしてもいいのですけれども、今のところはそこまでは考えていません。JavaScriptを切ってある場合、私のブログ記事は半分以上が読めない作りになっているからです。
これでまた少し様子を見てみます。
数秒でクローズする余計なセッションを減らそうと、先月から実験を続けているところです。
明らかに記事を読んでいないと分かるアクセスは、サーバー負荷と転送量を増加させるだけですからね。こちらにとってデメリットはあってもメリットは何もありません。
参照エントリー:
ブログカスタマイズ – 余計なアクセスの制限を少し変更
ブログカスタマイズ – 余計なアクセスの制限をFirefoxに対応
ブログカスタマイズ – 余計なアクセスを制限
サーチエンジンにインデクスされたリンクをクリックした際に「個人の日記サイトなので情報はありませんよ」と確認メッセージを表示させていますので、あからさまな情報目的のアクセスは確かに減って来てはいるようなのですが。
それでも、相変わらずKingsoft無料版を無料のままで広告だけ非表示にしたい人が、チートな裏技でもないかと期待して見に来られますのでね。ライセンスを購入して下さいと書いてあると、「期待した情報はなかった」とばかりに数秒でお帰りになります。
まったく無駄なアクセスですので、そういうのを可能な限り排除したいと。それで、今回また新しい機能をひとつ追加してみました。
今回追加したのは下記のコードです。
function checkStaySeconds(){
if(cbme == 1){
stSec = new Date;
stc = stSec.getTime();
cbms = getCookie(”__cbms”);
if(cbms == “”){ cbms = 0; }
if(navigator.userAgent.match(/MSIE/)){ sflag = 3; }else{ sflag = 3; }
if(cbms == sflag){
cbms = sflag + 1;
setCookie(”__cbms”, cbms);
lgflag = confirm(”10秒未満でのページ移動が一定の回数を超えました。\n\nあと3回でアクセス禁止が設定されます。\n\nお帰りになりますか?”);
if(lgflag == true){
cbmr = getCookie(”__cbmr”);
location.href = cbmr;
}else{
location.reload();
}
}
if(cbms > sflag + 3){
deny = 1;
setCookie(”__deny”, deny);
clearCookie(”__cbm”);
clearCookie(”__cbms”);
alert(”10秒未満でのページ移動が制限回数を超えました。\n\nコンテンツをお読みになる意志はないものと認め、\n\n以後のアクセスはお断りします。”);
location.href=”http://blog.bonmee.com/error/403.html”;
}
}
}
function checkSecondsUntilLeave(){
if(cbme == 1){
lvSec = new Date;
lvc = lvSec.getTime();
lvc2 = lvc – stc;
if(lvc2 < 10000){
cbms++;
setCookie("__cbms", cbms);
}else if(lvc2 > 30000){
clearCookie(”__cbms”);
}
}
}
サーチエンジンのURLをリファーラーに持つアクセスに cbme=1 というフラグを立て、該当する場合にのみ上記のfunctionを実行します。
stc = stSec.getTime(); でアクセスがあった日時を秒まで取得して変数に格納し、そのページを去る時に lvc = lvSec.getTime(); でも時刻を取得、stc と比較して10秒が経過していない場合に cbms という変数の値に1を設定してcookieを送り込みます。
次にまた10秒以内に去った場合、cbms の値はひとつインクリメントされてcookieで送られます。この cbms の値は10秒以上の滞在があった場合でも保持されますが、30秒を超える滞在があった時点で一旦ゼロにリセットされます。コンテンツをお読み頂いた方を簡単に排除しないためです。
そして、cbmsの値が3になった時、つまり10秒以下でのページ遷移が3回目に達した時点でconfirmによるメッセージを表示。あと3回でアクセス禁止が設定される旨を警告して、閲覧を続けるかどうかを尋ねます。
[キャンセル]がクリックされた場合(お帰りになる場合)は、最初のアクセスがあった時点で cbmr というcookieに保持されたリファーラー宛に location.href で送り返します。このリファーラーは、最初のアクセスのトリガーとなったサーチエンジンの検索ページです。
[OK]がクリックされた場合(滞在を続ける場合)は、変数 cbms に4が代入されてcookieで送られます。
その後も10秒未満でのページ移動があった場合は cbms がインクリメントされ、その値が6を超えた時点で deny というフラグが立ち、cookieが送られます。この deny に値を持つ状態でアクセスがあった場合は、どのような形であれ(たとえブラウザのアドレスバーにURLが入力されたとしても)403エラーを返します。
cookieを削除すればまたアクセス出来るようになりますが、それで頻繁に同じことを繰り返されるようであれば、今度は該当するIPアドレスを.htaccessに登録してdenyすることになりますね。
この処理は、あくまでサーチエンジンから来られた単発のアクセスにのみ実行されます。ブックマークや他サイトのリンクからのアクセスについては、ある程度ページをご覧頂けていますのでね。今のところは必要ないと見ています。
12月中旬から余計なアクセスを制限するコードを実装していますが、今回その一部を見直すことにしました。余計なアクセスとは、数秒から十数秒でお帰りになるアクセスを指します。
参照エントリー:
ブログカスタマイズ – 余計なアクセスの制限をFirefoxに対応
ブログカスタマイズ – 余計なアクセスを制限
上記の小ネタを仕込んだところ、確かに2~3日は効果があったようです。しかし、すぐに元通りに戻ってしまいまして。
元々私のサイトは個人のダイアリーですから、何かでお困りの方に有用な情報などありません。そこへ何かを期待して検索エンジンから来られますので、その方はページを一瞥しただけで、ガッカリしてお帰りになります。当然ですね。
こちらとしては、あくまでも文章をお読み頂ける方に来て欲しいものです。急いで来てあちこちクリックして急いで帰るというアクセスは、サーバーの負荷や転送量の面から見て、あまり有難いものではありません。
以前の仕込みで、検索エンジンにヒットした私のブログへのリンクをクリックした際に、
サーチエンジンから来られた方へ。
このブログは個人のサイトで、主に日記やエッセイのようなものを掲載しています。
大した情報はなく、きっと検索のお役には立てないでしょう。
このまま読み込みを続けますか?
というconfirmを表示させ、それでも良ければ”OK”をクリックしてページを表示させるようにしてありました。
しかし、どうもその文章すらお読みにならない方が多いようですね。そういう方は、なおさら私の記事などお読みになる筈がありません。
それでは意味がないので、どうしようかと考えました。OKとキャンセルを入れ替えて「盲目的なOKクリック」を排除しようともしましたが、今度は盲目的に「キャンセル」する人が流れ込んで来ます。難しいですね。
そこで、ちょっとコードをいじってみました。
if((cb == 1) && (rflag == 3) && (dn == 0)){
cfTime = new Date();
scs = cfTime.getTime(); // 時刻を取得
var flag = confirm(”メッセージ”); // 確認メッセージを表示
if(flag == false){
clearCookie(”__cbm”); // キャンセルをクリックでcookie消去
history.back(); // 前のページに戻る
}else{
cfTime1 = new Date();
scs1 = cfTime1.getTime(); // OKクリックの時刻を取得
scs2 = cfTime1 – cfTime; // 確認メッセージ表示とOKクリックの時間差
if(scs2 > 10000){
clearCookie(”__cfcnt”);
location.reload();
}else{ // 10秒以内のOKクリックはメッセージ未読と判断
alert(”文章をよくお読みになった上でクリックして下さい。” + scs2);
clearCookie(”__cbm”); // cookie消去
cfcnt = getCookie(”__cfcnt”); // フライング回数を取得
if(cfcnt == “”){ cfcnt = 0; }
cfcnt++;
if(cfcnt > 2){
deny = 1; // フライング3回でdenyフラグを立てる
setCookie(”__deny”, deny); // 以後のアクセス禁止を決定
}
setCookie(”__cfcnt”, cfcnt);
history.back(); // 前のページに戻る
}
}
}
loadFlag = 1;
}
confirm表示の時刻とOKがクリックされた時刻を比較して、10秒以内にOKがクリックされた場合は「メッセージを読んでいない」と判断。フライングとして扱い、もう一度メッセージをよくお読み頂くよう確認します。
フライング回数は”__cfcnt”というcookieに記録され、ブラウザに送られます。もう一度アクセスして来た時にその回数を読み取り、またフライングがあれば”__cfcnt”の値が1つインクリメントされます。
“__cfcnt”の値が3になった時点で”__deny”というcookieが書き込まれ、それ以降のアクセスは強制的に403エラーを返します。事実上のアクセス拒否ですね。
少々意地悪な仕込みではありますが、アクセス拒否を決めるcookieはおおむね24時間でexpireしますので、まぁちょっと驚かせる程度のものですね。cookieを消去して来られたらまた最初からになりますので、「読まない人は来なくていいよ」という意志表示をしたというだけのことで。
ユーザーがどこでどのように振る舞おうがユーザーの自由ですが、同時にブログアーサーがどのようなターゲットにエントリーを公開するか決めるのもまた自由です。
これで少し様子を見てみます。
先日仕込んだ「ブログカスタマイズ – 余計なアクセスを制限」するコードですが、Firefoxでは正常に動作しないため一旦はMSIEのみを対象にしていました。
今回、その辺のコードを見直して修正をかけ、ブラウザの限定を解除しました。
この機能は、検索エンジンのリンクをクリックして「初めて」このブログを訪れたユーザーに、「これは個人の日記ですよ? 調べものに馴染む情報はありませんよ?」と確認を促し、ページを見る/見ないをユーザーに決めて頂こうというものです。
アクセスアップやSEOといった観点から言えば考え方が真逆なのですが、情報を求めてクリックされてもここはただの日記サイトですから、私がダラダラと勝手な文章を書いているだけに過ぎません。
何かを調べようと考えて検索している人にとっては、個人の日記なんかどうでもいい筈。だからこそ、数秒ごとにページを切り替えてはそのまま去って行く人がいる、ということです。その人の求める情報が、ここにはないからです。
これは、私にとってもサーバーの負荷が高まり転送量が増加するなど、あまり良いとは言えない結果を招くことにもなります。
お互いにとって良くないのであれば、無駄なアクセスは減らす方が良いのではないかと。
検索エンジンから初めてこのサイトを訪問される方に確認メッセージを表示して、OKをクリックした場合のみページが表示されるようスクリプトを書いたのですが、Firefoxでは何故かOKをクリックしてもページの読み込みが止まってしまいます。
これは私が普段使用しているLinux版のみならず、Windows版でもMac版でも起きます。理由は調べていないので分かりません。
そこで当座の扱いとして、問題が起きないMSIEのみに限定していました。今回はそれをゆっくり見直すことで、Firefoxでの問題を解決しました。
ユーザーが検索エンジンのリンクをクリックしたら、getCookie()で「初めて」かどうかを判別します。2回目以降のアクセスならばcookieを返しますので、その値が”1″か”2以上”かを後で確認します。
times = getCookie(”Times”);
if(times == “”){
times = 1;
}
その後、主な検索エンジンからの訪問をdocument.referrerで判別して、初めてのアクセスならフラグを建てます。
var ua = navigator.userAgent;
var rf = document.referrer;
var uflag = 0;if(rf.match(/google/)){ rflag = 3; }
if(rf.match(/yahoo/)){ rflag = 3; }
if(rf.match(/goo/)){ rflag = 3; }
if(rf.match(/msn/)){ rflag = 3; }
if(rf.match(/search.livedoor/)){ rflag = 3; }
if(rf.match(/excite/)){ rflag = 3; }
if(rf.match(/infoseek/)){ rflag = 3; }
フラグが建った場合のみ確認メッセージを表示させます。ここまでは問題ありません。
問題は、そこでOKをクリックした際に起こります。なので、OKをクリック「されなかった」場合にフラグを建ててhistory.backで戻って頂く処理を、OKをクリック「された」場合はlocation.reload()でページをリロードして頂くことにしました。
if((times == 1) && (rflag == 3) && (deny == 0)){
var flag = confirm(”サーチエンジンから来られた方へ。\n\nこのブログは個人の日記サイトで、調べものに馴染む情報は少ないかも知れません。\t\nこのまま続けますか?\n”);
if(flag == false){
clearCookie(”Times”);
clearCookie(”Date”);
history.back();
}else{
location.reload();
}
}
timesというcookieの値が「1」で(初回訪問という意味です)uflagという変数の値が「3」(検索エンジンからの訪問)の場合にのみ確認メッセージを表示、OKをクリックした場合はlocation.reload()でリロードして頂くという方法です。
これだとFirefoxも素直に反応してくれます。
JavaScriptを切ってアクセスされたらこの方法は通用しませんが、それだと折り畳まれた記事が展開出来ませんので、ユーザーはそこでわざわざJavaScriptを有効化しなくてはなりません。検索で急いでいる人がそこまでするかと問えば、私ならしませんね。面倒ですから。
この小ネタを仕込んでからの2日間に関しては、アクセス数は減りましたがサイトの平均滞在時間は向上しました。サーバーの負荷と転送量はそれほどでもありませんが、今後も観察を続けます。
情報の価値をどのように評価するかは人それぞれですから、求める人に求められる情報を提供する、という考え方もあって良いのではないかと私は考えます。
こちらのブログ、再開してからもう1年が過ぎました。早いものですね。
以前はLivedoorでお世話になっていましたが、2005年の春ごろから更新しなくなってそのまま放置してしまい、また始めようということでWordPressを使い始めたのが去年の11月。とりあえずまだ続いています。
カスタマイズとは言っても目に見える部分ではなく、ちょっと裏でゴソゴソと小技を仕込んでみました。外観は何も変わらないということで(笑)。
弄った点は大まかにふたつ。
1. 主要な検索エンジンからの訪問者に確認メッセージを表示
2. 特定の検索エンジンからの訪問者を遮断する
どちらもブラウザでJavaScriptを切られたら役に立ちませんが、それだとサイトの閲覧そのものが出来ないのでまぁいか、みたいな。
以下で簡単に説明しますが、全体のコードは右クリックでこのページのソースコードをご覧下さい。
アクセスログを眺めていて、数秒から十数秒ごとにページを切り替えては去って行くユーザーをよく見かけることに気付きまして。多分何かの情報を探して、ただの日記サイトに何も情報がないことを悟り、また検索するために戻って行かれるのでしょうね。
そういう方に、リンクを踏んだ瞬間「これは日記ですよ?情報ありませんよ?」とメッセージを表示して、無駄なアクセスを減らしてみようかということで。
先にdocument.referrerでリファーラーを取り、変数 rf に格納しておきます。それをパターンマッチで選別して、主要な検索エンジンのリンクからのアクセスにフラグを立てます。
if(rf.match(/google/)){ rflag = 3; }
if(rf.match(/yahoo/)){ rflag = 3; }
if(rf.match(/goo/)){ rflag = 3; }
if(rf.match(/msn/)){ rflag = 3; }
if(rf.match(/search.livedoor/)){ rflag = 3; }
if(rf.match(/excite/)){ rflag = 3; }
if(rf.match(/infoseek/)){ rflag = 3; }
検索エンジンからの訪問だけを絞り込んだら、getCookie()でcookieを取得して初めてのアクセスのみを選別。確認メッセージを表示して、”NO”をクリックされた場合は変数 flag が false を返し、history.back()でひとつ前のページに戻って頂きます。
if((ts == 1) && (rflag == 3) && (deny == 0)){
var flag = confirm(”サーチエンジンから来られた方へ。\n\nこのブログは個人の日記サイトで、調べごとに馴染む情報は少ないかも知れません。\nこのまま続けますか?\n”);
}
if(flag == false){
clearCookie(”Times”);
clearCookie(”Date”);
history.back();
}
clearCookie()でcookieを消去するのは、また検索でこのブログの別なページはヒットしてしまった際にも確認メッセージを表示するため。間違ってリンクを踏んでしまった時に「ああ、またこいつか」と思って頂くためのものです。
ちなみに、一度OKボタンを押してサイトを訪問された方には二度とこのメッセージは表示されません。そのためのcookieでもあります。
ただ・・・Firefoxだと動作がおかしくなるので、IEにのみ反応するようにしています。ブラウザの判定はnavigator.userAgentが返す値を(/MSIE/)にマッチさせて判定しています。
特定の検索エンジンとは、迷惑なことで有名なbaidu(百度)とnaverです。特にbaiduはメチャメチャにspiderを飛ばして来て、.htaccessで蹴っても蹴ってもIPアドレスを変えては攻撃して来ます。
そこまでして蹴り返して来るほど粘着されるのであれば、こちらも覚悟を決めることになりますね。baiduのリンクを踏んだ場合はすべてアクセス禁止に、ついでに一度でもリンクを踏んだブラウザもアクセス禁止にします。
var rflag = 0;
if(rf.match(/baidu/i)){ rflag=1 }
if(rf.match(/naver/i)){ rflag=2 }
if(rflag == 1){
alert(”このサイトのリンクからはアクセス出来ません。\n您没有权限访问此链接。”);
clearCookie(”Times”);
clearCookie(”Date”);
setCookie(”Deny”);
history.back();
}
if(rflag == 2){
alert(”このサイトのリンクからはアクセス出来ません。\n권한이 링크에 액세스할 필요가없습니다.”);
clearCookie(”Times”);
clearCookie(”Date”);
setCookie(”Deny”);
history.back();
}
if(dn == 1){
alert(”アクセスは拒否されました。\n访问被拒绝\n액세스가 거부되었습니다”);
clearCookie(”Times”);
clearCookie(”Date”);
setCookie(”Deny”);
history.back();
}
document.referrerで取得した値を変数 rf に格納し、baiduとnaverからのアクセスを特定してフラグを立てます。フラグによってalert()のメッセージは変わりますが、これは中国語と韓国語の違い。Googleの翻訳サイトで英語からそれぞれ翻訳したものをコピー&ペーストしました。正しいかどうかは分かりません。
メッセージを表示したところで、アクセス禁止を決めるDenyというcookieを食わせると同時に、アクセス履歴を保持するTimesとDateのふたつのcookieを消去します。ユーザーがOKをクリックしたら、ひとつ前に戻って頂きます。
ここで一度Denyというcookieを食ったブラウザは、その後は他のサーチエンジンで検索しようがURLをアドレスバーに入力しようがアクセスは拒否されます。それを解除するには、ブラウザが食ったcookieを削除する必要があります。
完全に遮断するにはIPアドレスを.htaccessで蹴るなどの方法に頼らざるを得ませんが、抑止力はそれなりにあると踏んでいます。何故ならば、あまりブラウジングに明るくないユーザーはcookieそのものを知りませんし、知っている人はまさか個人サイトで食わされるとは思っていないでしょうから。
そして、cookieを無効化したブラウザからのアクセスは無条件に拒否しておきます。
確かにブログを書く以上は多くの方に見て頂きたいと思うのが普通ですし、もちろん私にも「個人的には」その気持ちはあります。が、このブログはWordPressやMySQLの他に、そういった対策の手法と効果についてのデータ取得を主な目的にしていますのでね。どのような規制をかければどの程度ユーザーが減少するとか、そういう数字の取得もまた目的のひとつ、ということです。
まぁ、取得したデータそのものは公開出来ませんが、そういったテストの手法は出来る限り公開したいとは考えています。そういったリソースを必要としておられる立場の方も、きっと世の中には大勢おられるでしょうから。
