Вопрос по web-crawler, php, advertising – Исключить ботов и пауков из счетчика просмотра в PHP

7

Я создал довольно простой менеджер рекламы для сайта на PHP.

Я говорю простой, потому что этоне такие сложные, как реклама Google или Facebook или даже самые высококлассные рекламные серверы. Безразлично»t обрабатывать платежи или что-либо еще или даже нацеливание на пользователей.

Он служит цели для моего сайта с низким трафиком, хотя просто показывает случайный баннер, подсчитывает количество показов и кликов.

Особенности:

Рекламное место / позиция на страницеИзображение баннераназваниеСчетчик просмотров / показовСчетчик кликовДата начала и окончания или никогда не заканчиваетсяОтключить / включить рекламу

Я хочу постепенно добавлять больше функциональности в систему, хотя.

Одна вещь, которую я заметил, это то, что счетчик показов / просмотров часто кажется раздутым.

Я считаю, что причина этого из социальных сетей " пауки и боты, а также пауки поисковых систем.

Например, если кто-то вводит URL-адрес со страницы на моем веб-сайте в Facebook, Google+, Twitter, LinkedIn, Pinterest и другие сети, эти сайты часто падают на мой сайт, собирая заголовок, изображения и описание веб-страниц.

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

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

Поэтому я обращаюсь за помощью или идеями о том, как достичь своей цели? Пожалуйста, не говорите использовать другую рекламную систему, которой нет в карточках, спасибо

Вы должны рассмотреть возможность фильтрации по пользовательскому агенту. Умный бот всегда сможет выдать себя за браузер. Andrey Akhmetov
Я бы посоветовал выпустить пост ajax после загрузки страницы с идентификаторами баннеров на странице. Кроме того, вы можете запретить этот скрипт обновления в robots.txt dev-null-dweller

Ваш Ответ

3   ответа
11

Вы должны обслуживать объявления с помощью JavaScript. Тот'Это единственный способ избежать большинства сканеров. Только браузеры загружают зависимости, такие как изображения, JS и CSS. 99% роботов избегают их.

Вы также можете сделать это:

// basic crawler detection and block script (no legit browser should match this)
if(!empty($_SERVER['HTTP_USER_AGENT']) and preg_match('~(bot|crawl)~i', $_SERVER['HTTP_USER_AGENT'])){
    // this is a crawler and you should not show ads here
}

Вы'Таким образом, статистика будет намного лучше.Используйте JS для рекламы.

PS:Вы также можете попробовать установить cookie в JS, а затем проверить его. Сканеры могут получать cookie-файлы, отправляемые в PHP по HTTP, но те, которые установлены в JS, имеют шансы на 99,9%пропущу это. Потому что им нужно загрузить файл JS и интерпретировать его. Тот'Это делается только браузерами.

Этот ответ больше не является правильным. Многие боты (включая Google) запускают все JS и полностью отображают страницу перед индексацией, чтобы обрабатывать растущее число сайтов, которые динамически загружают свой контент через AJAX (и одностраничные приложения) и т. Д. NickG
@alexalex Если кто-то создает специализированный сканер для показа рекламы,Нет остановки. Но он хочет минимизировать ложные срабатывания. Что означает 99% сканеров (1% знают JS). Это'намного лучше, чем ничего ... CodeAngry
хороший момент, спасибо, что нашли время, чтобы объяснить. jnhghy - Alexandru Jantea
Это решение кажется наилучшим на данный момент, но для саморазвитого рекламного приложения я бы не сталНе рекомендуется, чтобы гусеничные машины развивались очень быстрыми темпами. Поскольку все больше и больше сайтов будут использовать js для проверки пользователей, сканеры также будут реализовывать это ... jnhghy - Alexandru Jantea
0

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

Вы можете обнаружить сканер, если он за очень короткое время посещает огромное количество ссылок. Это может быть довольно сложно сделать в коде.

Но это'возможно только если вы нене хочу или не могузапустить Javascript. В противном случае пойти с CodeAngry 'ответ.

Изменить: в ответ на @keune 'ответ, вы могли бы сохранитьвсе IP-адреса посетителей и выполните их через список в задании cron, а затем опубликуйте обновленное количество посетителей.

Я ползаю в сети, как сумасшедший, но никогда не беспокоюсь оrobots.txt ;) Плюс отслеживаниеrobots.txt доступ может быть сделанraw access logs или жеgenerating the file in php, Это немного усложняет и выигрываетне допускать тенистых сканеров ...Скорость доступа может быть индикатором но я почти всегда загружаю одну страницу из каждого домена при сканировании. И это может серьезно ограничивать доступ к записи в БД, если не все сделано правильно. CodeAngry
человекSEO паук, Мы'все равно :) Зачем тебе торчать, когда нужно остаться незамеченным ... CodeAngry
Вы'тогда я грубый паук. rath
0

Вы можете сделать что-то вроде этого: здесь есть хороший список сканеров в текстовом формате:http://www.robotstxt.org/db/all.txt

предположить, что вымы собрали все пользовательские агенты в этом файле в массиве$botList

$ua = isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USER_AGENT']) : NULL;

if($ua && in_array($ua, $botList)) {
  // this is probably a bot
}

Конечно, пользовательский агент легко может быть изменен или иногда отсутствует, но поисковые системы, такие как Google и Yahoo, честны о себе.

Если вы жестко закодируете записи в списке в хэш-карту или словарь с постоянным доступом для чтения, вы, вероятно, не заметите никакого влияния на производительность веб-сайта. Это, безусловно, не полный подход, но и не так уж и плохо. И производительность здесь не аргумент, если вы понимаете предложение разумным способом. dsteinhoefel
-1 Вы не учите его просматривать 256 КБ пользовательских агентов и сравнивать строки с таким количеством возможностей! Вы не говорите ему, чтобы убить его сайт "производительность! Правильно? CodeAngry
Это нетоже ничего хорошего. Вы экономите время, избегая файлового ввода-вывода, ноТам есть несколько миллиардов записей - производительность в любом случае пострадает. Если только ты не'Вы работаете в облаке и генерируете массу прибыли и можете позволить себе несколько процессоров, чтобы просто просмотреть список. Извини я'м с @CodeAngry на этом. rath
Вы проверили этот список? Я сказал только взять текст пользовательских агентов и поместить их в массив. И я имел в виду не во время выполнения, а один раз под ручным кодированием. Это почти не повлияет на производительность. Ваше отношение очень неконструктивно, кстати. keune

Похожие вопросы