Файл 02 · Директ
Как защитить форму и обучить рекламу на реальных клиентов
Гайд состоит из двух частей. Первая рассчитана на десять минут: проблема, самопроверка и список действий. Вторая объясняет, как всё устроено, и содержит инструкции, код и таблицы.
В тексте указано, откуда взято утверждение. Пометка (справка) значит, что это написано в официальной справке Яндекса. Пометка (практики) значит, что так наблюдали специалисты на своих проектах, и на вашем результат может отличаться. Пометка (оценка) обозначает оценку автора, которую никто независимо не проверял.
Автостратегии Директа обучаются на тех конверсиях, которые вы им передали. Если конверсией считается заявка из формы, а часть заявок оставляют боты, стратегия начинает искать посетителей, похожих на этих ботов. Заявок становится больше, клиентов нет, а цена лида при этом может выглядеть отлично.
Автор рилса оценивает долю бот-трафика в Директе в 30% (оценка). Один из практиков проверил около миллиона посетителей собственным скриптом и получил 35% ботов при 10% ошибочных срабатываний на реальных людях (практики). Эти числа нельзя переносить на свой проект без проверки, поэтому ниже есть тест.
Защита состоит из трёх слоёв. Щит не пускает бота в форму. Фильтр отличает бота от человека в данных Метрики. Учитель определяет, на какой конверсии учится Директ. Большинство ограничивается щитом, а самый сильный эффект даёт третий слой.
Откройте Метрику и CRM, отметьте то, что у вас совпадает, и нажмите кнопку.
Отмечайте выполненное: полоса бот-трафика вверху будет падать.
Цепочка выглядит так. Стратегия оптимизирует конверсию «заявка». Бот отправляет форму, конверсия засчитывается. Алгоритм делает вывод, что посетители с такими признаками хорошо конвертируются, и закупает похожих. Бюджет уходит на трафик, который выглядит как люди, а клиентов в CRM не прибавляется.
В отдельных нишах (практики называют недвижимость и авто) боты подставляют в формы данные реальных людей из утёкших баз. Тогда менеджеры звонят людям, которые ничего не оставляли, а в Метрике у каждой такой заявки аккуратная конверсия.
Что делает сам Яндекс. Антифрод Директа отсеивает фродовый трафик на трёх уровнях: до показа объявления, в момент клика (при подозрении может появиться капча) и после перехода на сайт. Отфильтрованные события не участвуют в обучении кампании и не списываются, их объём виден в Мастере отчётов, строка «Недействительные клики и конверсии» (справка).
Чего Яндекс не делает. Антифрод очищает статистику Директа и не знает, что произошло с заявкой в вашей CRM. Бота, который заполнил форму чужими настоящими данными, он может не отличить (практики).
Один признак ничего не доказывает. Действовать стоит, когда совпали минимум три.
Шаг 0. Фильтр роботов. В настройках счётчика есть опция «Фильтровать роботов по поведению». Она убирает из данных визиты роботов, определённых по поведению, начиная с момента включения. Уже собранные данные не пересчитываются. Перед включением сохраните отчёты, чтобы было с чем сравнивать. Отчёт «Роботы» (Отчёты, Мониторинг, Роботы) остаётся доступным (справка).
Шаг 1. Сравнение сегментов. Создайте два сегмента: проверяемый источник и весь остальной трафик (или органика). Сравните их по показателям из таблицы. Ориентиры взяты из методики ppc.world и зависят от ниши (практики).
| Источник | Визиты | Отказы | Время | Мобильные | Роботность |
|---|---|---|---|---|---|
| Директ, поиск «Ремонт» | 4 210 | 31% | 2:14 | 64% | 4% |
| Директ, РСЯ «Квиз» | 3 870 | ||||
| Органика | 6 120 | 38% | 2:41 | 61% | 3% |
| Директ, бренд | 1 040 | 24% | 3:05 | 59% | 2% |
Нажмите на красные ячейки, чтобы увидеть, что в них не так.
Дополнительные проверки (практики).
Нулевое время на сайте само по себе не признак бота: бывают незакрытые вкладки. Смотрите на сочетание признаков.
Боты настроены на типовую форму из имени и телефона. Любое нестандартное действие нарушает автоматику. Продвинутого бота можно научить и этому, поэтому ставят два-три способа вместе.
| Способ | Сложность | Против каких ботов | Риск потерять живых клиентов |
|---|---|---|---|
| Нестандартное поле | низкая | простые | низкий |
| Ловушка и таймер | низкая | простые | низкий |
| Слайдер | средняя | простые, частично сложные | средний |
| Квиз или чат-бот | высокая | простые и средние | средний |
| Невидимая капча | средняя | простые и средние | низкий |
| Проверка и скоринг на сервере | высокая | разные | зависит от настройки |
| Защита кликов по контактам | средняя | боты, кликающие мессенджеры | низкий |
> ожидание отправки…
Нестандартное поле (практики). Добавьте вопрос, который автомат не поймёт: текущий день недели или простую арифметику. В одном из проектов после вопроса про день недели бот-заявки перестали поступать. Если вопрос связан с делом, он заодно улучшает реальные заявки. Например, «длина, ширина, высота помещения» останавливает бота и даёт менеджеру цифры.
Ловушка и таймер (практики). Скрытое поле, которое человек не видит, а бот заполняет. Таймер измеряет время от загрузки формы до отправки: если оно меньше трёх-пяти секунд, форму отправил не человек. Поле называйте нейтрально (website, а не honeypot), скрывайте его без ущерба для доступности (tabindex="-1", aria-hidden) и периодически меняйте имя. Готовый код в приложении А.
Слайдер (практики). Вместо кнопки «Отправить» ползунок «Проведите, чтобы подтвердить». Простые боты не умеют проводить. Продвинутый бот простой слайдер обойдёт, поэтому серьёзные решения проверяют траекторию, скорость и характер движения: программный клик, рывок или движение в неверную сторону помечает визит как бот и блокирует отправку. Проверку нужно дублировать на сервере.
Квиз или чат-бот (практики, оценка). Многошаговая форма с нестандартными вопросами сложнее для бота и отсеивает неподходящие заявки. Участник встречи директологов из строительной ниши сообщил, что обычный квиз даёт 60–70% целевых обращений, а воронка «реклама, одноэкранный лендинг, чат-бот, мини-квиз, заявка» около 95%. Это данные одного проекта. Проверяйте на части трафика.
Невидимая капча (справка Yandex Cloud). В режиме невидимой капчи SmartCaptcha кнопки «Я не робот» нет, задание показывается только подозрительным пользователям. Токен обязательно проверять на сервере: сервер отправляет POST-запрос на https://smartcaptcha.cloud.yandex.ru/validate с параметрами secret, token и ip и принимает заявку только после положительного ответа. Если проверка пропускает всё подряд, проверьте, не включён ли «ограниченный режим» сервиса: в нём на все запросы валидации приходит ответ ok.
Проверка и скоринг на сервере (практики). Складывайте сигналы: заполнена ловушка, слишком быстрая отправка, подозрительное устройство, повторяющиеся данные, много заявок с одного IP. Три сигнала и больше означают «вероятно бот». Удобный вариант: подозрительную заявку не блокировать, а не засчитывать как конверсию в Метрике. Если сработало ложно, живой клиент всё равно останется в CRM, а Директ не научится на боте.
Защита кликов по контактам (практики). Боты кликают иконки мессенджеров и номер телефона, и в Метрику уходит конверсия. Не отправляйте цель, пока клик не подтверждён слайдером или проверкой.
Минимальный набор. Для небольшого бюджета достаточно нестандартного поля, ловушки и таймера: это бесплатно и делается за вечер. Для среднего добавьте слайдер и невидимую капчу с проверкой на сервере. Для крупного бюджета подключите скоринг на сервере, составную цель (раздел 4) и тест квиза или чат-бота на части трафика.
Директ оптимизируется на ту цель, которую вы указали. Поэтому цель должна быть такой, чтобы бот не мог её выполнить: квалифицированная заявка, дозвон или сделка. Их подтверждает менеджер или CRM.
Практики поднимаются по этим ступеням по мере накопления данных. Директу нужно около десяти конверсий в неделю на кампанию. Если не набирается, кампания может перейти в статус «Обучение остановлено». Ориентир по бюджету: недельный бюджет примерно равен цене конверсии, умноженной на десять (справка, практики).
Рабочий порядок (практики). На старте запустить рекламу на пакетной стратегии кликов, пока данных нет. Параллельно настроить передачу «квалифицированной заявки» в Метрику. Когда наберётся около десяти таких конверсий в неделю, переключить кампанию на цель «квалифицированная заявка», пропустив цель «заявка».
qualified_lead.Шаблон файла. Точные названия столбцов сверьте с шаблоном на странице загрузки.
ClientId,Target,DateTime
1234567890123456789,qualified_lead,2026-11-10 14:35:00
Пример (ppc.world). Клиника в узкой нише передала в Метрику офлайн-конверсии (оплаченные приёмы и обращения из мессенджеров) через коннектор коллтрекинга. Конверсий стало 15 в неделю вместо 5, кампании перестали выпадать из обучения.
Механика обсуждалась на встрече директологов. Скрипт на сайте определяет, человек посетитель или бот (поведение, ловушки, отпечаток браузера). Если это человек, в Метрику уходит цель «Определён человек». Если бот, уходит отдельная цель «бот». В Метрике создаётся составная цель из шагов: определён человек, отправлена заявка, конверсия. Если заявку отправил посетитель, помеченный как бот, цель не достигается. Директ учится только на заявках, прошедших проверку.
По справке Метрики, составная цель содержит до пяти шагов, а нецелевые действия между шагами её не прерывают. Цепочку выбирайте так, чтобы каждый следующий шаг был невозможен без предыдущего.
«Клик по кнопке», «переход в мессенджер», «время на сайте», «открытие формы». В отдельных проектах оптимизация на них увеличивала долю некачественных конверсий. Лучше показывали себя «отправка формы», «страница благодарности» и квалифицированная заявка.
В единой перфоманс-кампании в стратегии «Максимум конверсий» можно выбрать несколько целей, например заявку, звонок и обращение в чат. При добавлении новой цели в работающую кампанию обучение начинается заново. Названия стратегий менялись («Оптимизация конверсий» объединили с «Целевой долей рекламных расходов» в «Максимум конверсий»), поэтому сверяйтесь с интерфейсом.
Аудитория «боты» (практики). Трекер передаёт в Метрику цель «бот», из неё собирается аудитория, на которую понижают ставки. Когда сложился портрет покупателя (пол, возраст, доход, операционная система), ставки на эту аудиторию повышают. По справке Директа корректировки по аудиториям доступны в кампаниях всех типов и применяются последовательно, а не суммируются. Допустимые диапазоны проверьте в интерфейсе.
Площадки (практики). В отчёте «По площадкам» и в Мастере отчётов исключайте площадки и приложения с нулевой конверсией в квалифицированную заявку. Универсального чёрного списка нет. Оставьте только города, где вы продаёте.
Следите за четырьмя показателями. Доля пустых заявок снижается. Цена квалифицированной заявки не растёт. Конверсия из лида в продажу растёт. Роботность в Метрике ниже 10%. По словам автора поста на встрече практиков, после перехода на оптимизацию по реальным клиентам цена лида снижалась на 20–25%, а конверсия из лида в продажу росла на 15–20%. Это ориентир, а не обещание (оценка).
Ниже простая математика. Цифры в примере условные: подставьте свои из Метрики и CRM. Расчёт показывает порядок величин и не обещает результат: деньги экономит внедрение защиты, а не само вступление куда-либо.
Формулы
Прямые потери в месяц = Бюджет × Доля бот-визитов в оплаченном трафике
Потери менеджеров = Пустые заявки × Минуты на звонок / 60 × Стоимость часа
Экономия в месяц = (Прямые потери + Потери менеджеров) × Снижение потерь
Окупаемость = Экономия ÷ Стоимость подписки
Доля бот-визитов в оплаченном трафике это то, что осталось после фильтра Яндекса. Автор рилса оценивает бот-трафик в Директе до 30% (оценка), но часть Яндекс отсеивает сам, поэтому для расчёта берите свою цифру из «Источники, сводка» и CRM, а не общую.
Пример на условных цифрах
Прямые потери: 300 000 × 0,20 = 60 000 ₽ в месяц. Потери менеджеров: 80 × 10 / 60 × 500 = 6 667 ₽ в месяц. Всего уходит: 66 667 ₽ в месяц.
Пусть защита формы, офлайн-конверсии и чистка источников снизили потери на 50%. Тогда экономия составит 33 333 ₽ в месяц, или около 400 000 ₽ в год. Подписка в клубе стоит 2 200 ₽ в месяц, то есть экономия в этом примере больше стоимости примерно в 15 раз.
Здесь не учтено главное: Директ перестаёт учиться на ботах и начинает искать реальных клиентов. Этот эффект растёт со временем и в расчёт не вошёл, поэтому пример консервативный.
Как меняется экономия от бюджета и доли ботов (снижение потерь на 50%, менеджеры не учтены)
| Бюджет в месяц | Доля ботов 10% | Доля ботов 20% | Доля ботов 30% |
|---|---|---|---|
| 100 000 ₽ | 5 000 ₽ | 10 000 ₽ | 15 000 ₽ |
| 300 000 ₽ | 15 000 ₽ | 30 000 ₽ | 45 000 ₽ |
| 1 000 000 ₽ | 50 000 ₽ | 100 000 ₽ | 150 000 ₽ |
Каждая сумма в таблице экономии в месяц. Для сравнения: подписка в клубе стоит 2 200 ₽ в месяц.
Когда это окупается. Чтобы подписка вернула свою стоимость, достаточно вернуть 2 200 ₽ потерь. Формула: стоимость подписки ÷ (доля ботов × снижение потерь). При доле ботов 20% и снижении на 50% это бюджет от 22 000 ₽ в месяц. При доле 10% и снижении 50% от 44 000 ₽. При доле 30% и снижении 25% от 29 300 ₽.
Калькулятор. Подставьте свои цифры.
Закрытый клуб Петроченкова
Пространство для тех, кто живёт маркетингом: сильные специалисты, агентства и предприниматели. Каждую неделю новые разборы, эфиры и рабочие материалы.
Подписка стоит дешевле одной ошибки в воронке, а она обычно обходится в десятки тысяч рублей.
Продление автоматическое. Карту можно отвязать в любой момент.
HTML внутри формы:
<form id="lead" method="post" action="/lead">
<input name="name" placeholder="Имя">
<input name="phone" placeholder="Телефон">
<!-- ловушка: человек её не видит, бот заполняет -->
<div style="position:absolute;left:-9999px" aria-hidden="true">
<label>Сайт <input name="website" tabindex="-1" autocomplete="off"></label>
</div>
<input type="hidden" name="t0" id="t0">
<input type="hidden" name="cid" id="cid">
<input type="hidden" name="yclid" id="yclid">
</form>
JavaScript (номер счётчика Метрики: XXXXXXXX):
<script>
// момент загрузки формы, нужен для проверки скорости заполнения
document.getElementById('t0').value = Date.now();
// ClientID Метрики для привязки офлайн-конверсий из CRM
ym(XXXXXXXX, 'getClientID', function (cid) {
document.getElementById('cid').value = cid;
});
// yclid из адреса для привязки конверсий к кликам Директа
var y = new URLSearchParams(location.search).get('yclid');
if (y) { localStorage.setItem('yclid', y); }
document.getElementById('yclid').value = localStorage.getItem('yclid') || '';
</script>
Проверка на сервере (логика, язык любой):
если заполнено поле "website" -> бот: заявку не принимать, цель не отправлять
если now - t0 < 3000 мс -> вероятно бот
иначе -> принять заявку, сохранить ClientID и yclid в CRM,
после этого отправить цель:
ym(XXXXXXXX, 'reachGoal', 'human_lead')
Цель в Метрику отправляйте только после ответа сервера, а не при нажатии на кнопку. Иначе бот попадёт в конверсии, какой бы хорошей ни была ловушка.
Скрипты, которые собирают технические параметры посетителя (отпечаток браузера, fingerprint), могут считаться обработкой персональных данных по закону 152-ФЗ. Для обычного сайта это политика конфиденциальности, согласие на cookie и аналитику, уведомление Роскомнадзора, хранение данных россиян на серверах в России. Позицию регулятора именно по браузерному отпечатку я не нашёл, поэтому схему перед внедрением покажите юристу. Это не юридическая консультация.
Официальные материалы: справка Директа о недействительном трафике, курс ЯРД по антифроду, роботы в Метрике, офлайн-конверсии, yclid, составная цель, аудитории в Директе, SmartCaptcha, проверка токена, невидимая капча.
Блоги и практики: 8 шагов поиска фрода в Метрике, офлайн-конверсии для автостратегий, оплата за конверсии, несколько целей в ЕПК, антифрод в Директе, площадки РСЯ, cookie и 152-ФЗ.
Личный опыт: автор рилса и материалы встречи практикующих директологов. Это наблюдения конкретных специалистов, а не независимая статистика.
Три действия, около часа. Остальное гайда подождёт.