web-dev-qa-db-ja.com

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

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

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

私は、弾丸の解決策があるとは思いませんし、必要もありません。

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

11
eisberg

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

JavaScriptはオプションではないので、次のことができます。

  • その中のWord「ボット」のユーザーエージェントを確認してください。それはそれらのほとんどをキャッチします。

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

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

18
John Conde

3つの非常に簡単な方法があります。

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

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

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

7
DisgruntledGoat

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

3
paulmorriss

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

  1. ユーザーエージェント文字列の先頭をMozilla|Opera|PSP|Bunjalloo|wiiと照合して、Webブラウザーとコンソールのみをフィルターします。ユーザーエージェントのなりすましのおかげで、このチェックはほとんどすべてのブラウザーを検出します
  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'] );
}
3
Anton Gudov

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

データベースのページビューを更新する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);
2
Ashraf

単純なユーザーエージェント解析除外を使用します。私のページに侵入するボットの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%')
2
jagarock