Який найкращий спосіб виключити ботів із кількості переглядів?


11

Мій веб-сайт підраховує кількість переглядів відвідувачів на певних сторінках. Я помітив, що Google та інші боти "натискають" на мій сайт, як божевільні, і деякі сторінки отримують нереальні підрахунки переглядів (порівняно з тими, які виробляють люди).

Я прошу найкращої практики виключити цих ботів із моєї точки зору. Очевидно, що простий "користувальницький агент" містить "бот" цього не зробить.

Я не думаю, що рішення щодо кулі немає, і воно мені не потрібно.

Примітка: я використовую PHP + MySQL.


Правильна відповідь на ваше запитання залежить від того, яке програмне забезпечення ви використовуєте для відстеження статистики.
Goboozo

@Goboozo Я використовую PHP + MySQL. Це не для відстеження моєї статистики. Йдеться про запити на "пов'язані", "гарячі" та "цікаві" записи.
eisberg

Відповіді:


19

Я радий, що ти знаєш, що це не може бути бронезахисним шляхом для цього. Це означає, що ваш світогляд є принаймні реалістичним.

Оскільки JavaScript не є варіантом, я б сказав, що вам залишилося:

  • Перевірте користувальницький агент на наявність у ньому слова "бот". Це зловить більшість із них.

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

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


Це виглядає перспективно. Мені подобається ідея пастки. Я роблю щось подібне для коментарів користувачів на своєму сайті з невидимим полем введення (замість некрасивого Captcha). :-)
eisberg

2
@eisberg, Це називається медоносом. Я сам великий прихильник їх.
Джон Конде

Мабуть, найкраще рішення ...
vkGunasekaran

7

Існує три досить прості способи:

  1. Використовуйте Google Analytics, який буде обробляти та обробляти всі дані для вас, а також представлятиме детальну статистику щодо відвідувачів та того, як вони потрапили на ваш сайт. Це, безумовно, найпростіше рішення.
  2. Використовуйте Javascript для підрахунку. Коли сторінка завантажиться, створіть запит AJAX до сценарію підрахунку. Роботи та павуки не запускають Javascript.
  3. Виявлення "бота" в рядку агента користувача насправді досить надійне. Крім того, ви можете дотримуватися лише відомих ботів, таких як Googlebot, Yahoo, MSNbot тощо. Перевірка цих трьох повинна охоплювати 99% вашого трафіку бота. На цій сторінці є деякі інші, але вона виглядає досить застарілою.

ОНОВЛЕННЯ: Googlebot і деякі основні боти справді працюють JavaScript. Тож використання опції №2 вже не є життєздатною. Однак це означає, що використання його у поєднанні з №3 має бути досить надійним, оскільки ви можете легко виключити більшість ботів за допомогою JS, а потім на стороні сервера виключити основних ботів, таких як Googlebot, які запускають JS.

Також, як зазначено в коментарях, ви можете спробувати скористатися API Google Analytics для відображення переглядів кожної сторінки.


1 і 2 не пов'язані з моїм запитанням. Можливо, я мав би запитати "Як мені отримати лічильник перегляду, як stackechange, який ігнорує ботів?" тож мій хибний :-) Тим не менш дуже приємний список у 3. Спасибі, я перевірю це.
eisberg

Вибачте, не зрозуміли, що відображається кількість переглядів на сторінці. У цьому випадку 2 і 3 є обома життєздатними.
НезадоволенеЗаключення

Дякую за старання. Принаймні, для мене JavaScript ніколи не є відповіддю, тому я застряг з 3, але є так багато показників :-(
eisberg

Насправді деякі боти запускають деякі JavaScript. Я створив запит Ajax для відстеження розміру вікна перегляду залежно від розміру екрана. Googlebot повідомляє про два різних розмірах екрана.
токсалот

Я знаю, що питання давнє і вже має рішення, але чому б не використовувати API Google Analitycs, якщо він лише показує лічильник людських поглядів? stackoverflow.com/questions/19484009 / ...
KeizerBridge

3

Якщо ви використовуєте Javascript для підрахунку переглядів, то більшість ботів не запускатимуть його, тому вони не включатимуться до вашої кількості переглядів. Ця відповідь може бути близькою до того, що ви хочете /programming/1973448/how-can-i-count-a-page-views


Ні, я не використовую Javascript. Це звичайний веб-сайт PHP + MySQL. Але дякую за відповідь все одно :-)
eisberg

Не дисконтуйте цю відповідь так швидко. Навіть на сайті, що використовує PHP + MySQL, ніщо не заважає вам випромінювати трохи JavaScript для створення лічильника перегляду. Замість того, щоб виводити лічильник безпосередньо, виведіть щось на зразок '<script> document.write (<counter-code>) </script>', де <counter-code> - все, що вам потрібно для створення лічильника.
Itai

@Itai Вибачте, але я не буду використовувати JavaScript для підрахунку відвідувачів. Але дякую все одно.
eisberg

Якщо ви не хочете використовувати JavaScript, просто введіть його у своє запитання чітко. Як сказав Itai, ніщо не заважає нам думати про рішення JavaScript для сайту PHP.
Тянь До

Насправді деякі боти запускають деякі JavaScript. Я створив запит Ajax для відстеження розміру вікна перегляду залежно від розміру екрана. Googlebot повідомляє про два різних розмірах екрана.
токсалот

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%')

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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.