**Ключи (Wordstat, показов/мес):** скликивание (686) • защита сайта от ботов (576) • защита от скликивания (185) • скликивание рекламы (173) • директ скликивание (144) • фейковые заявки (106)
## Знакомая история
Реклама крутится, бюджет уходит, заявки идут. Руководитель смотрит отчёт и радуется: сорок обращений за неделю. Отдел продаж смотрит на те же сорок и тихо звереет.
Потому что из сорока живых там пятнадцать. Остальное - номера, по которым никто не берёт трубку. Номера, где отвечают: «Я ничего не оставлял». Один и тот же телефон под четырьмя разными именами. Заявка, где в поле «имя» набор букв, а в поле «регион» - то, чего не бывает.
Менеджер обязан позвонить по каждой. Он не знает заранее, какая живая. Он тратит день на прозвон пустоты, а к вечеру у него замыливается глаз, и он уже без энтузиазма набирает того самого настоящего клиента, который был двадцать восьмым в списке.
Это и есть настоящая цена фейковых заявок. Не потраченный бюджет - с ним как раз можно смириться. Цена - выгоревший отдел продаж и упущенный живой человек, до которого дошли на автомате.
Ниже - как устроена защита сайта от ботов, защита от скликивания и от мусорных обращений на уровне принципов, и что из этого можно собрать себе. Без магии и без обещаний стопроцентной фильтрации, которых в этой области не бывает.
*Разберём, почему капча и чёрные списки не спасают, а в конце дам список из пяти защит, первые три из которых делаются за один вечер. Дочитайте до конца, пригодится.*
## Почему привычные способы почти не помогают
**Капча.** Останавливает совсем примитивные скрипты и раздражает живых людей. Современные решения по распознаванию капчи стоят копейки за тысячу, и всерьёз на неё рассчитывать нельзя. К тому же капча ничего не говорит о качестве заявки: бот, прошедший капчу, выглядит для формы идеальным гостем.
**Чёрный список телефонов.** Кажется очевидным решением, а на практике даёт худшие ошибки. Мы разбирали случай, когда человек не мог оставить заявку пятый день подряд: его номер однажды попал в список, и с тех пор форма молча его отвергала. Он приходил снова и снова, а бизнес пятый день не знал, что теряет клиента.
**Блокировка по IP.** За одним адресом сидит вся компания, весь коттеджный посёлок с общим интернетом или половина абонентов мобильного оператора. Блокируя адрес, вы блокируете всех, кто за ним.
Общее у всех трёх подходов одно: они судят по признаку, который человек не выбирал. Номер, адрес, способность разгадать искажённые буквы. А отличать надо не по паспорту, а по поведению.
## Что на самом деле отличает бота от человека
Живой человек оставляет за собой след, который очень трудно подделать целиком, и почти невозможно подделать дёшево.
**Он проводит время на странице.** Читает, сомневается, возвращается наверх, перечитывает цену. Пятнадцать секунд от загрузки до отправки - это не человек, изучивший предложение. Это скрипт.
**Он двигает мышью или касается экрана.** Причём двигает криво: рука дрожит, курсор ходит дугами, промахивается мимо поля и возвращается. Идеально прямые отрезки от кнопки к кнопке - признак программы.
**Он печатает.** Или вставляет из буфера, или пользуется автозаполнением - но что-то из этого происходит. Заявка, где значения появились в полях сами собой, без единого нажатия клавиши и без автозаполнения, приехала не от человека.
**Его браузер похож на браузер.** У настоящего есть история установленных плагинов, работающая видеокарта, реальное разрешение экрана, набор языков. У автоматизированного часто торчат уши: включённый признак автоматизации, программная отрисовка графики вместо видеокарты, пустой список языков, разрешение экрана как у типовой серверной машины.
**Его таймер дрожит.** Это тонкий признак, но надёжный. У живого браузера интервалы между кадрами всегда чуть плавают, потому что машина занята сотней других дел. У виртуального дисплея на сервере эти интервалы бывают идеально ровными. Идеальная ровность в реальном мире - сама по себе аномалия.
Ни один из этих признаков по отдельности ничего не доказывает. Человек может ответить с телефона за двадцать секунд, потому что уже всё решил. У кого-то в браузере отключён JavaScript. Поэтому работает не одиночный признак, а сумма.
## Как это собрать: баллы вместо приговора
Рабочая схема простая. Каждый подозрительный признак добавляет заявке несколько баллов. Набралось много - заявка помечается серой, набралось очень много - блокируется. Отдельно живёт короткий список жёстких правил, каждое из которых блокирует само по себе, без накопления.
В жёсткие идёт только то, что человек не может сделать случайно: включённый признак автоматизации браузера, заполненная ловушка - скрытое поле, которого живой человек не видит, - и серия заявок с одного адреса за минуты с разными телефонами. Последнее - почерк фермы, а не человека.
Всё остальное - мягкое. Не двигал мышью, отправил слишком быстро, нет языковых заголовков, телефон засветился под другими именами, имя похоже на набор символов. По одному - ничего, вместе - картина.
Такой подход даёт главное: он объясним. Когда заявка заблокирована, видно, из чего сложилось решение, и можно спорить с конкретным пунктом, а не с вердиктом оракула.
## Ошибка, из-за которой антифрод начинает резать живых
Это самое важное во всей статье, и на этом спотыкаются почти все.
**Отсутствие данных нельзя приравнивать к нулю.**
Если вы не измеряли движения мыши на телефоне - не пишите в заявку «движений мыши: ноль». Иначе правило «нет мыши - подозрительно» сработает на каждом человеке с телефона. Если у пользователя нет камеры и микрофона, а вы проверяете «список медиаустройств пуст» - не считайте это признаком робота: у половины офисных компьютеров он пуст законно. Если браузер не поддерживает какую-то проверку - это свойство браузера, а не улика.
В нашей системе для этого заведено жёсткое правило: не измерили - значение не отправляется вовсе. Правила читают отсутствующее значение как «неизвестно» и не начисляют за него баллов. Ноль отправляется только тогда, когда мы действительно померили и получили ноль.
Звучит как мелочь. На практике это разница между антифродом, который отсекает ботов, и антифродом, который отсекает всех, кто зашёл с айфона.
Вторая ошибка того же рода - считать повторную отправку признаком атаки. Живой человек, получивший отказ, пробует ещё раз. И ещё. Мы наблюдали случай, когда человек одиннадцать раз подряд отправлял форму, с каждым разом сокращая своё имя, потому что решил, что дело в нём. Это был не бот, а пожилой мужчина, который очень хотел оставить заявку. Серия отправок с одного номера - это отчаяние, а не ферма. Ферма - это серия с одного адреса с разными номерами.
## Где этому место в системе
Отдельно стоящий антифрод на сайте - половинчатое решение. Он видит один сайт и одну форму, и ничего не знает о том, что тот же телефон час назад приходил с другого лендинга, а тот же отпечаток браузера за сутки засветился на трёх площадках.
У нас антифрод встроен в систему приёма и распределения заявок - ту, через которую проходят обращения со всех источников сразу: сайты, лендинги, квизы, лид-формы соцсетей, звонки, площадки объявлений. Интеграция с amoCRM на выходе, приём с чего угодно на входе.
Это даёт антифроду то, чего у одиночного плагина нет: историю. Сколько заявок пришло с этого адреса за час и за сутки. Сколько разных телефонов за пять минут. Встречался ли этот телефон раньше под другим именем. Появлялся ли этот отпечаток браузера на соседнем сайте. Половина по-настоящему полезных признаков - не в браузере, а именно в истории, и подделать их из браузера нельзя.
Заодно решается вопрос, который обычно всплывает следом. Если заявка заблокирована - куда она девается? У нас она не исчезает: сохраняется вместе с вердиктом и причинами, просто не уходит в отдел продаж. Любую можно вернуть в работу одной кнопкой. Это принципиально: антифрод, который удаляет заявки без следа, невозможно проверить, а значит невозможно и доверять.
И третье - вопрос, который задаёт руководитель. Сквозная аналитика при таком устройстве получается сама собой: раз все заявки идут через одну точку, видно, какой источник приносит живых людей, какой - мусор, и во сколько обошёлся каждый. Не «сорок заявок за неделю», а «пятнадцать живых, и вот их источники».
## Обязательный шаг, который все пропускают
Никогда не включайте антифрод сразу на блокировку.
У нас предусмотрены четыре режима: выключен, наблюдение, пометка и блокировка. В режиме наблюдения система считает баллы и пишет вердикты, но никого не режет. Неделя в этом режиме показывает, что произошло бы, если бы вы включили блокировку, - на вашем реальном трафике, а не в теории.
Мы этот шаг прошли на своей шкуре. Один из антифродов, с которым мы работали на клиентском сайте, за четверо суток заблокировал пятнадцать живых людей из тридцати семи оставивших заявку. Сорок один процент живого потока. Причём среди пропущенных им были заявки с номерами из одних девяток и именем «Тест», а среди заблокированных - человек, проведший на странице семь минут и сделавший шесть тысяч движений мышью.
Без режима наблюдения это выяснилось бы только по выручке через месяц.
## Что можно сделать себе прямо сейчас
Короткий список по возрастанию сложности:
1. **Ловушка в форме.** Скрытое поле, которого не видно человеку. Заполнено - почти наверняка робот. Важно: назовите поле бессмысленно. Если в имени будет «email», «name» или «url», менеджер паролей заполнит его живому человеку, и вы забаните собственного клиента.
2. **Время от загрузки страницы до отправки.** Считается в две строки. Меньше нескольких секунд - повод присмотреться.
3. **Одноразовый ключ формы.** Сервер при отрисовке страницы кладёт случайное значение в куку и в скрытое поле. Не совпало - форму отправляли не со страницы.
4. **Счётчики поведения.** Движения, нажатия, касания, глубина прокрутки. Помня главное правило: не измеряли - не отправляем.
5. **История по телефону и адресу.** Требует хранилища заявок, зато даёт самые устойчивые к подделке признаки.
Первые три пункта закрывают базовые сценарии и делаются за вечер. Остальное имеет смысл, когда заявки уже собираются в одном месте.
И трезвая оговорка напоследок. Всё, что собирается в браузере, в принципе подделывается: код исполняется на стороне пользователя, и достаточно мотивированный человек пришлёт вам любые красивые цифры. Браузерный отпечаток - не стена, а фильтр по стоимости атаки: он отсекает массовое и дешёвое. Против целенаправленного скликивания директа конкурентом работают уже серверные признаки и история, а не то, что рассказал о себе браузер.
---
Если статья была полезной, поставьте 👍 - так её увидят те, кому она пригодится.
Где меня ещё найти:
- ТГ-канал «Кочегаров про таргет» - [t.me/kochegarov_pro_target](https://t.me/kochegarov_pro_target)
- ВК-сообщество «Кочегаров Кочегарит» - [vk.com/club179084362](https://vk.com/club179084362)
- ВК-группа сервиса «ПК-маркетинг» - [vk.com/club232439276](https://vk.com/club232439276)
- MAX-канал [«Кочегаров - автоматизация маркетинга»](https://max.ru/id672507662616_biz)
Меня зовут Вячеслав Кочегаров, отвечаю каждому лично.