Каков наилучший способ исключить ботов из числа просмотров?

11

Мой веб-сайт считает количество посетителей на определенных страницах. Я заметил, что Google и другие боты «щелкают» по моему сайту как сумасшедшие, и некоторые страницы получают нереалистичное количество просмотров (по сравнению с теми, что созданы людьми).

Я прошу лучшую практику, чтобы исключить этих ботов из моих просмотров. Очевидно, что простой «пользовательский агент», содержащий «бота», этого не сделает.

Я не думаю, что есть решение для проверки пули, и оно мне не нужно.

Примечание: я использую PHP + MySQL.

Eisberg
источник
Правильный ответ на ваш вопрос зависит от того, какое программное обеспечение вы используете для отслеживания вашей статистики.
Гобоозо
@Goboozo Я использую PHP + MySQL. Это не для отслеживания моей статистики. Речь идет о запросах «связанных», «горячих» и «интересных» записей.
Эйсберг

Ответы:

19

Я рад, что вы знаете, что не будет пуленепробиваемого способа сделать это. Это означает, что ваш взгляд по крайней мере реалистичен.

Поскольку JavaScript не вариант, я бы сказал, что у вас осталось:

  • Проверьте пользовательский агент на слово «бот» в нем. Это поймает большинство из них.

  • Составьте список известных ботов и отфильтруйте их по уникальному идентификатору, возможно, по их пользовательскому агенту.

  • Поместите в нижний колонтитул вашего сайта скрытую ссылку, которая ссылается на страницу, на которой собраны пользовательские агенты и / или IP-адреса. Пользователи этого не увидят, а боты увидят. Так что любой, кто посещает эту страницу, будет ботом. Запишите их, а затем заблокируйте их от вашей статистики.

Джон Конде
источник
Это выглядит многообещающе. Мне нравится идея ловушки. Я делаю что-то похожее для комментариев пользователей на моем сайте с невидимым полем ввода (вместо уродливой капчи). :-)
eisberg
2
@eisberg, это называется honeypot. Я их большой фанат.
Джон Конде
наверное лучшее решение ...
vkGunasekaran
7

Есть три довольно простых способа:

  1. Используйте Google Analytics, которая будет обрабатывать и обрабатывать все данные для вас, а также предоставлять вам подробную статистику посетителей и того, как они попали на ваш сайт. Это, безусловно, самое простое решение.
  2. Используйте Javascript для подсчета. Когда страница загрузится, сгенерируйте AJAX-запрос к вашему скрипту подсчета. Роботы и пауки не запускают Javascript.
  3. Обнаружение «бота» в строке пользовательского агента на самом деле довольно надежно. Кроме того, вы можете придерживаться только известных ботов, таких как Googlebot, Yahoo, MSNbot и т. Д. Проверка этих трех должна охватывать 99% вашего бот-трафика. На этой странице есть и другие, но она выглядит устаревшей.

ОБНОВЛЕНИЕ: Googlebot и некоторые крупные боты в настоящее время используют JavaScript. Таким образом, использование только варианта 2 больше не жизнеспособно. Однако это означает, что использование его в сочетании с # 3 должно быть достаточно надежным, поскольку вы можете легко исключить большинство ботов с помощью JS, а на стороне сервера исключить основных ботов, таких как Googlebot, которые запускают JS.

Также, как упоминалось в комментариях, вы можете попробовать использовать API Google Analytics для отображения просмотров для каждой страницы.

DisgruntledGoat
источник
1 и 2 не имеют отношения к моему вопросу. Может быть, я должен был спросить: «Как мне получить счетчик просмотров, такой как stackechange, который игнорирует ботов?» так что мой ложный :-) Тем не менее очень хороший список в 3. Спасибо, я проверю это.
Эйсберг
Извините, не понял, что вы отображаете количество просмотров на странице. В этом случае 2 и 3 являются жизнеспособными.
DisgruntledGoat
Спасибо за усилия. По крайней мере, для меня javascript никогда не является ответом, поэтому я застрял с 3, но есть так много показателей :-(
eisberg
На самом деле, некоторые боты запускают JavaScript. Я настроил Ajax-запрос для отслеживания размера области просмотра относительно размера экрана. Робот Google сообщает о двух разных размерах экрана.
Токсалот
Я знаю, что вопрос старый и уже имеет решение, но почему бы не использовать Google Analitycs API, если он только показывает счетчик просмотров? stackoverflow.com/questions/19484009/…
KeizerBridge
3

Если вы используете Javascript для подсчета просмотров, большинство ботов не будут его запускать и не будут включены в ваши подсчеты. Этот ответ может быть близок к тому, что вы хотите /programming/1973448/how-can-i-count-a-page-views

paulmorriss
источник
Нет, я не использую Javascript. Это обычный сайт PHP + MySQL. Но все равно спасибо за ответ :-)
eisberg
Не сбрасывайте со счетов этот ответ так быстро. Даже с сайтом, использующим PHP + MySQL, ничто не мешает вам генерировать немного JavaScript для генерации счетчика просмотров. Вместо непосредственного вывода счетчика выведите что-то вроде «<script> document.write (<counter-code>) </ script>», где <counter-code> - это то, что вам нужно для создания счетчика.
Итай
@Itai Извините, но я не буду использовать javascript для подсчета посетителей. Но все равно спасибо.
Эйсберг
Если вы не хотите использовать JavaScript, просто четко задайте его. Как сказал Итай, ничто не мешает нам думать о решении JavaScript для сайта PHP.
Tien Do
На самом деле, некоторые боты запускают JavaScript. Я настроил Ajax-запрос для отслеживания размера области просмотра относительно размера экрана. Робот Google сообщает о двух разных размерах экрана.
Токсалот
3

Мой подход включает в себя два прохода:

  1. Фильтруйте только веб-браузеры и консоли, сопоставляя начало строки пользовательского агента с Mozilla|Opera|PSP|Bunjalloo|wii. Благодаря подмене пользовательского агента эту проверку обнаружат практически все браузеры
  2. Исключить ботов по общим стопам bot|crawl|slurp|spider

Поэтому, если первый шаг пройден, мы предполагаем, что это браузер, и за ним стоит настоящий посетитель. Однако, как я выяснил, некоторые боты притворяются Mozillaсовместимыми и запускают с них строку своего пользовательского агента. Вот почему второй проход может пригодиться и устранить их.

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%')
jagarock
источник
1
Это не поможет (по крайней мере, в моем случае), потому что почти каждый бот, которого я могу определить по его поведению (слишком быстрый просмотр, хронологический просмотр всех ссылок, ...), использует действующий User-Agent. Но хорошая идея для других проектов.
Айсберг
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);
Ашраф
источник