Привет! Эта статья была прислана нам в рамках второго конкурса статей и заняла 2 место. Приятного чтения!
В этой статье я опишу основные способы детекта ботов, а так же расскажу как монетизировать ботовый трафик с ROI +1000
Практически в любом покупном трафике будут присутствовать боты. Даже если источник белый и пушистый, по нему могут бродить сторонние парсеры, которые будут попадать к вам на лендинг.
К тому же ботов будут подливать владельцы площадок, причем часто они будут делать это без злого умысла. Что бы понять как на сайтах появляются боты, нужно знать как получают трафик сайты, с которых вы его в дальнейшем выкупаете.
Тут два пути. Первый – это поисковый трафик; второй – покупка и обмен трафиком с сайтами похожей тематики. Если с первым пунктом все понятно – здесь трафик приходит с поиска и он очень качественный. Во втором же случае на сайте устанавливаются скрипты обмена трафиком.
Первоначально сайт закупает трафик, часть которого уходит на обмен, и сайту возвращается другой трафик. Посетитель обычно просматривает несколько страниц, делает несколько кликов по баннерам, следовательно, один посетитель попадает на несколько сайтов и какбы «размножается». С этого посетителя зарабатывают все участники обмена трафиком.
На обычном сайте есть как поисковый трафик, так и обменный. В обменном трафике может содержатся определенное количество ботов, которых скрипт обмена гоняет по разным сайтам. Причем количество ботов может быть разным в разное время. Сегодня сайту налили ботов, сайт наливавший ботов удалили из обмена, и завтра на сайте опять нормальный траф, послезавтра опять появились боты и т.д. Если мы будем блокировать такой сайт в момент, когда на нем куча ботового трафика, мы можем не получить тот трафик, который будет на нем завтра.
Поэтому я стараюсь блокировать только пабы с 100% ботами, если у паба есть хотя бы 1% живых пользователей, я его оставляю в работу.
Получать информацию о ботовых пабов в трекере мне позволяет система событий трекера Binom https://docs.binom.org/events.php. Это уникальный инструмент, с помощью которого я могу видеть реальную картину покупаемого трафика.
Теперь давайте разберем скрипты, которые позволяют мне принимать решение ботовый паб или нет.
Начнем со скриптов для работы с мобильным трафиком.
Закупая мобильный трафик, важно понимать откуда он пришел. Если вы покупаете мобильный попандер или редирект, вам могут налить ботов из приложений.
Здесь нам поможет заголовок HTTP_X_REQUESTED_WITH
Мы на PHP пытаемся получить данный заголовок и если он есть, создаем две переменные, которые в дальнейшем будут обработаны на JS
<?php if ($_SERVER['HTTP_X_REQUESTED_WITH']){ $xrw = $_SERVER['HTTP_X_REQUESTED_WITH']; echo "<script> var keyxrw = 'yes'; var rxrw = \"$xrw\"; </script>"; { ?> <script> if (keyxrw == 'yes') { // отправляем в трекер информацию что зафиксирован xrw url = 'домен трекера' + '/click.php?event4=1'; var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.open('POST', url, true); xhr.send(); // отправляем название приложения url = 'домен трекера' + '/click.php?lp=data_upd&xrw=' + rxrw; var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.open('POST', url, true); xhr.send(); // помечаем, что данный переход ботовый key_bot = true; } </script>
В скрипте выше, я использую AJAX для отправки информации на сервер. Браузер, получив запрос на AJAX, отправит его, даже если страница будет закрыта. Это помогает делать мгновенный редирект после детекта нужных нам параметров.
Второй скрипт, который я использую для детекта ботов при закупке мобильного трафика, это скрипт распознающий движение телефона в пространстве.
Боту чтобы представиться телефоном достаточно подставить мобильный юзерагент. Более продвинутые боты могут править объект navigator, подставляя нужные данные для ориентации, батареи и т.д. Но ботов эмулирующих движение телефона я не встречал. Несколько лет назад была проблема с небольшой с задержкой в получении данных с телефона, но сейчас эти данные получаются практически мгновенно.
На десктопе вы увидите такую картину
В связи с тем, что код скрипта достаточно объемный, выкладываю ссылку для скачивания
https://yadi.sk/d/8Yh0k8tZmCJbGw
Так же этот скрипт позволяет защититься от всех известных мне спайсервисов, включая адплексети.
Перейдем к десктопу. В отличии от мобильных устройств, которые непрерывно двигаются в пространстве, детектить ботов на десктопе значительно сложнее. Ведь боты могут рассылаться физическим сервером в датацентре с реального браузера или расширениями браузера зараженного компьютера пользователя и т.д.
По сути у нас остается только движение мыши
// отлавливаем движение мыши var key_move_otpravka = "net"; document.onmousemove = function(e) { // отстук в Binom if (key_move_otpravka=="net"){ // меняем ключ, без него мы при каждом движении мыши будим слать запрос к серверу key_move_otpravka = "da"; url = 'домен трекера' + '/click.php?event9=1'; var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.open('POST', url, true); xhr.send(); } }
Если движения мыши на лендинге не произошло, то я не считаю посетителя ботом, информация отправляется в Binom для последующего анализа. В отличии от мобильного трафика для принятия решения о блокировки паба по ботовости, приходится сливать значительно больше трафика. Обычно, если слито 200-300 кликов и не было ни одного движения, я считаю паб ботовым.
Теперь рассмотрим универсальный скрипт, который используется как при работе с мобильным, так и с десктопным трафиком.
Выкупая трафик в определенном гео, мы знаем, в какой таймзоне живут люди из данного гео. Очень редко боты подставляют правильную таймзону. Обычно таймзону я передаю в гет-запросе к ленду в переменных tz1и tz2.
Для США они равны &t1=-10&t2=-4, для России &t1=2&t2=12. Для стран, которые переводят часы на зимнее время я дополнительно увеличиваю интервал на один час, что бы не потерять трафик в момент перевода часов
// считываение параметров function getURLParameter(name) { return decodeURI( (RegExp(name + '=' + '(.*?)(&|$)').exec(location.search) || [, null])[1] || '' ); } var tz1 = getURLParameter('t1'); var tz2 = getURLParameter('t2'); // обработка таймзоны xd = new Date(); xd2 = -Math.floor(xd.getTimezoneOffset()/60); if (xd2 >= tz1 && xd2 <= tz2) { // сообщаем трекеру, что посетитель имеет правильную таймзону url = 'домен трекера' + '/click.php?event5=1'; var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.open('POST', url, true); xhr.send(); } else { key_bot = true; } // сообщаем трекеру фактическую таймзону посетителя url = 'домен трекера' + '/click.php?lp=data_upd&timez=' + xd2; var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.open('POST', url, true); xhr.send();
Совокупность данных скриптов позволяет с высокой долей вероятности определить, является ли посетитель ботом или нет.
Иногда я использую recaptcha v3. Основной минус рекапчи – огромные потери на поп/редирект трафике. Рекапча отправляет данные на сервер гугла и ждет их получение. В среднем это ожидание на десктопе занимает пару секунд, на мобильном трафике может доходить до 5-7. Мало какой пользователь будет ждать 5 секунд, пока вы ему покажите серый ленд.
В отличие от рекапчи, скрипты приведенные выше срабатывают практически мгновенно. Это позволяет сразу показывать живому человеку серый ленд. Тут я использую следующую схему: сразу после загрузки ленда он скрыт, показывается только гифка загрузки; через несколько миллисекунд, которые требуются для отработки скриптов, показывается серый ленд для человека.
Ботов мы определили, но что с ними делать дальше?
Первая идея – продать туда же, от куда купили. Собственно, когда-то я так и сделал. Покупая трафик в плаграше, я создал ак паблишера и слил им их же ботов. В результате получил блокировку аккаунта. Аргументы, что это ваши же боты не помогли.
Тогда я обратил внимания на адсенс. Идея была в том, чтобы накручивать показы ботовым трафиком, а клики делать живыми людьми. Я исходил из предположения, что какими бы мощностями не обладал гугл, хранить подробную информацию о всех показах очень затратно и скорее всего хранится минимум, позволяющий вычислить CTR. По кликам собирается максимально подробная информация, которая детально анализируется. И если на сайте CTR сильно выше среднего для подобных сайтов, то выделяются ресурсы для подробного анализа кликов. Ботовый трафик как раз поможет снизить CTR.
Если с наливом ботового трафика все было более менее понятно, то как заставить живых людей кликать по рекламе?
Тут нам поможет javascript. После некоторого времени нахождения человека на сайте запускается скрипт, который подставляет под мышку блок с адсенсом, при этом любой клик происходит по блоку с адсенсом. Ниже представлена демонстрация технологии. В реальных условиях блок с адсенсом не видим посетителю
Теперь о безопасности. Естественно, если вы такой скрипт повесите на свой сайт, бан вам будет обеспечен, но тут есть нюансы.
Во-первых, трекер Binom позволяет нам отфильтровать всех ботов гугла.
Для этого достаточно создать правило в трекере и отправить все, что связанно с гуглом на белый контент
Во-вторых, данный скрипт появляется только у трафика, который прошел через трекер и который скрипты детекта ботов пометили как человека.
И, в-третьих, данный скрипт сработает у посетителя только один раз, при повторном посещении сайта он не сработает.
Как вы уже поняли, выстраивается модель арбитража поп-трафика на адсенс. Для полноты схемы нужно, что бы в трекер передавалась информация о кликах по рекламе, и кнопка БАБЛО готова.
Проблема в том, что реклама открывается в iframe, и исходя из стандартов безопасности мы не можем из родительского окна получить доступ к контенту внутри iframe. Но если очень хочется, то стандарты безопасности можно обойти. Нам не обязательно знать, что происходит в айфрейме, нам достаточно того, что мышка исчезла из нашего окна, значит с высокой вероятностью произошел клик. Задача по исполнению данного механизма была очень сложна. На ее проработку и реализацию было потрачено большое количество часов, и теперь у меня есть скрипт, позволяющий засекать клики по iframe.
Тут я хочу напомнить, что у трекера Binom есть исключительный функционал, которым мало кто пользуется. Это Click API и возможность отправить информацию в трекер с любого сайта зная id клика. Его я передаю в гет-параметре. Данный код отстукивает в трекер конверсию и сообщает сколько прошло времени от начала загрузки страницы до клика
//получаем время начала загрузки страницы var tm1 = window.performance.timing.navigationStart; // отправка при клике лида в Binom jQuery(document).ready(function($) { $('.block_ad iframe').iframeTracker({ blurCallback: function(event) { url1 = 'домен трекера/click.php?cnv_id=' + cid + '&payout=' + po; var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.open('GET', url1, true) xhr.send(); // отправляем время проведенное до клика var tm2 = new Date; var tm3 = tm2 - tm1; url1 = 'домен трекера/click.php?lp=data_upd&' + 'ttc' + '=' + tm3 + '&uclick=' + uclick; var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.open('GET', url1, true) xhr.send(); }, }); });
В свою очередь, зная среднюю цену клика по гео, вы можете передать ее в постбэке, и тогда в трекере появятся сумма выплаты за клик. Это позволит вам видеть расходы и потенциальные доходы прямо в трекере.
Как вы понимаете, масштабировать схему можно на все гео, выбирая дешевый трафик и работая в +1000 ROI. Я стараюсь держаться в стандартных рамках 1к дейли.
Однако, я должен упомянуть, что данная схема противоречит правилам гугла, и вы понимаете риски ее использования.
Если у вас есть вопросы или требуется помощь по скриптам, пишите мне в телеграм @Fostynel.