ビュー数からボットを除外する最良の方法は何ですか?


11

私のウェブサイトは特定のページの訪問者の閲覧をカウントしています。Googleや他のボットがクレイジーに私のサイトに「クリック」していて、一部のページが(人間が作成したものと比較して)非現実的なビュー数になっていることに気付きました。

これらのボットを私のビュー数から除外するためのベストプラクティスを求めています。単純な「ユーザーエージェント」に「ボット」が含まれていると、それはできません。

弾丸証明ソリューションがあるとは思いませんし、必要もありません。

注:私はPHP + MySQLを使用しています。


質問に対する正しい答えは、統計の追跡に使用するソフトウェアの種類によって異なります。
Goboozo

@Goboozo PHP + MySQLを使用しています。これは私の統計を追跡するためのものではありません。これは、「関連」、「ホット」、および「興味深い」エントリのクエリについてです。
eisberg、2011

回答:


19

これを達成するための防弾方法がないことを知ってうれしいです。つまり、あなたの見通しは少なくとも現実的です。

JavaScriptはオプションではないので、私はあなたが残っていると言います:

  • ユーザーエージェントに「bot」という単語がないか確認します。それはそれらのほとんどをキャッチします。

  • 既知のボットのリストをコンパイルしある種の一意の識別子(おそらくユーザーエージェント)に基づいてそれらをフィルタリングします。

  • ユーザーエージェントやIPアドレスを収集するページにリンクする非表示のリンクをウェブサイトのフッターに配置します。ユーザーには表示されませんが、ボットには表示されます。したがって、そのページにアクセスする人は誰でもボットになります。それらを記録し、統計からブロックします。


これは有望に見えます。トラップのアイデアが好きです。私のサイトのユーザーコメントに対して、(醜いCaptchaの代わりに)非表示の入力フィールドを使用して同様のことをしています。:-)
eisberg、2011

2
@eisberg、ハニーポットと呼ばれています。私自身も彼らの大ファンです。
ジョンコンデ

おそらく最良の解決策...
vkGunasekaran 2014年

7

3つのかなり単純な方法があります。

  1. すべてのデータを処理および処理し、訪問者および訪問者がサイトに到達した方法の詳細な統計を提示するGoogle Analyticsを使用します。これは、最も簡単な解決策です。
  2. Javascriptを使用してカウントを行います。ページが読み込まれたら、カウントスクリプトへのAJAXリクエストを生成します。ロボットとスパイダーはJavascriptを実行しません。
  3. ユーザーエージェント文字列で「ボット」を検出することは、実際にはかなり信頼できます。または、Googlebot、Yahoo、MSNbotなどの既知のボットのみを使用することもできます。これらの3つをチェックすると、ボットトラフィックの99%がカバーされます。このページには他にもいくつかありますが、古くなっています。

更新:Googlebotといくつかの主要なボット最近JavaScriptを実行します。したがって、オプション#2だけを使用することは、もはや現実的ではありません。ただし、これは、JSを使用してほとんどのボットを簡単に除外できるため、#3と組み合わせて使用​​すると非常に信頼できることを意味します。次に、サーバー側で、JSを実行するGooglebotなどの主要なボットを除外します。

また、コメントで述べたように、Google Analytics APIを使用して各ページのビューを表示することもできます。


1と2は私の質問とは関係ありません。「ボットを無視するstackechangeのようなビューカウンターを取得するにはどうすればよいですか?」だから私の偽:-)それでも3の非常に素晴らしいリストです。ありがとうございます。これを確認します。
eisberg、2011

表示回数がページに表示されていることに気づきませんでした。その場合、2と3はどちらも実行可能です。
DisgruntledGoat

努力をありがとう。少なくとも私にとっては、javascriptが答えになることは決してないので、3で立ち往生していますが、非常に多くの指標があります:-(
eisberg

実際、一部のボットはJavaScriptを実行しています。画面サイズに関連してビューポートのサイズを追跡するAjaxリクエストを設定しました。Googlebotは2つの異なる画面サイズを報告しています。
toxalot 2013年

私は質問が古く、すでに解決策があることを知っていますが、人間の意見のカウンターを表示するだけの場合は、Google Analitycs APIを使用しないのはなぜですか stackoverflow.com/questions/19484009/...
KeizerBridge

3

JavaScriptを使用してビューをカウントする場合、ほとんどのボットはJavascriptを実行しないため、ビューカウントに含まれません。この答えはあなたが望むものに近いかもしれません/programming/1973448/how-can-i-count-a-page-views


いいえ、JavaScriptを使用していません。これは通常のPHP + MySQL Webサイトです。とにかく返信をありがとう:-)
eisberg

この回答をそれほど早く割引しないでください。PHP + MySQLを使用するサイトであっても、ビューカウンターを生成するために少しのJavaScriptを発行することを妨げるものはありません。カウンターを直接出力する代わりに、「<script> document.write(<counter-code>)</ script>」のようなものを出力します。ここで、<counter-code>は、カウンターを作成するために必要なものです。
板井

@イタイ申し訳ありませんが、訪問者のカウントにはJavaScriptを使用しません。とにかくありがとう。
eisberg、2011

JavaScriptを使用したくない場合は、質問に明確に入力してください。イタイが言ったように、PHPサイトのJavaScriptソリューションについて考えるのを妨げるものは何もありません。
Tien Do

実際、一部のボットはJavaScriptを実行しています。画面サイズに関連してビューポートのサイズを追跡するAjaxリクエストを設定しました。Googlebotは2つの異なる画面サイズを報告しています。
toxalot 2013年

3

私のアプローチには2つのパスが含まれます。

  1. ユーザーエージェント文字列の先頭をと照合して、ウェブブラウザとコンソールのみをフィルタリングしMozilla|Opera|PSP|Bunjalloo|wiiます。ユーザーエージェントのおかげでこのチェックはほとんどすべてのブラウザーを検出します
  2. 一般的なストップ文字列でボットを除外する bot|crawl|slurp|spider

したがって、最初のステップに合格した場合、それはブラウザーであり、その背後に実際のビジターがいると想定します。私が発見したように、一部のボットはMozilla互換性のあるふりをしてユーザーエージェント文字列をそれで開始します。そのため、2番目のパスが役立ち、それらを排除することができます。

function isBrowser () {

    return preg_match( '/^(Mozilla|Opera|PSP|Bunjalloo|wii)/i', $_SERVER['HTTP_USER_AGENT'] ) && !preg_match( '/bot|crawl|slurp|spider/i', $_SERVER['HTTP_USER_AGENT'] );
}

2

単純なユーザーエージェント解析除外のみを使用します。ボットの99%が私のページに侵入しなくなります。

SELECT * FROM `live_visitors` where (
lower(agent) != '%bot%' and
lower(agent) != '%slurp%' and
lower(agent) != '%spider%' and
lower(agent) != '%crawl%' and
lower(agent) != '%archiver%' and
lower(agent) != '%facebook%')

1
これは(少なくとも私の場合は)役に立たないでしょう。その動作(あまりに高速なブラウジング、すべてのリンクの時系列的なブラウジングなど)で識別できるほぼすべてのボットは、有効なUser-Agentを使用するためです。しかし、他のプロジェクトには良い考えです。
eisberg

2

画像をカウンターとして使用できます。この場合、ボットはカウントされず、ページ名は画像名を含むクエリとして渡されます

これをimg.phpで使用して、データベースのページビューを更新します。

<?php
$xnt = $_GET["ID"]; if (isset($xnt) && is_numeric($xnt)) {
$DBServer = "localhost"; $DBUser = "xxx"; $DBPass = "xxx"; $DBaze = "xxx";
$conn = mysqli_connect($DBServer, $DBUser, $DBPass, $DBaze); 
mysqli_query($conn, "UPDATE stats SET stats_vz=stats_vz+1 WHERE stats_id=".$xnt);
mysqli_close($conn);}
$im = @imagecreatetruecolor(1, 1); imagesavealpha($im, true); imagealphablending($im, false); $white = imagecolorallocatealpha($im, 255, 255, 255, 127); imagefill($im, 0, 0, $white);
header("Content-type: image/png"); imagepng($im); imagedestroy($im);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.