Как вычислить скликивание в Яндекс Директе по IP и заблокировать показы

Анатолий Кузнецов
Анатолий Кузнецов
SEO-оптимизатор с 20-летним стажем. Автор блога hozyindachi.ru о продвижении и доработке сайтов.

09:12, 09:14, 09:19, 09:26. Четыре клика подряд с одного устройства, каждый по 340–410 рублей, суммарное время на сайте — 26 секунд на все четыре визита вместе. И так девять дней подряд, всегда в первый час после включения показов.

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

Дальше я расскажу, как довёл это до конкретного IP-адреса, что с ним сделал и сколько денег это вернуло. Материал технический, но без магии: всё, что описано, можно повторить руками на любом сайте, где есть доступ к серверу.

Как вычислить скликивание в Яндекс Директе по IP и заблокировать показы

Почему Метрика показывает симптом, но не показывает виновника

Первое, что делает большинство рекламодателей, заподозрив неладное, — идёт в отчёт «Директ, сводка» и смотрит процент отказов. И действительно, там всё выглядит подозрительно: отказы 90 с лишним процентов, глубина просмотра 1,0, время на сайте — секунды.

Проблема в том, что это ничего не доказывает. Высокий процент отказов бывает у кривой посадочной страницы, у неудачно подобранных ключей, у рекламы, которая обещает одно, а на странице другое. Яндекс на претензию с такими аргументами отвечает шаблонно: система автоматически отсеивает недействительные клики, деньги за них возвращаются. И формально не врёт — часть фрода алгоритмы действительно режут. Но режут не всё, и человека с обычным браузером, обычным разрешением экрана и живой мышью алгоритм часто пропускает как валидный визит.

Второе, что обычно делают, — открывают Вебвизор. Это уже теплее. В записи видно поведение: мгновенное закрытие, отсутствие движения курсора, странная траектория, повторяющаяся один в один изо дня в день. Я пересмотрел восемнадцать записей и увидел одинаковый почерк: заход, полсекунды неподвижности, скролл ровно на один экран, закрытие. Живой человек так двигается только если он не читает, а проверяет, что реклама на месте.

Но и Вебвизор не даёт главного. Он не показывает IP-адрес. В интерфейсе Метрики IP посетителя вы не увидите нигде — ни в отчётах, ни в записи. Именно на этом месте большинство расследований и заканчивается: люди упираются, машут рукой и продолжают платить.

А доказательства лежат этажом ниже — в логах веб-сервера.

Как связать клик по рекламе с конкретным IP через yclid

Когда человек переходит по объявлению Директа, Яндекс дописывает к адресу параметр yclid — уникальный идентификатор клика. Выглядит это примерно так: site.ru/uslugi/?yclid=17384920174829310. Каждый клик получает свой номер, повторов не бывает.

И вот этот же адрес целиком попадает в access-лог вашего сервера. В стандартном формате nginx строка содержит IP клиента, дату, метод, запрошенный адрес со всеми параметрами, код ответа, реферер и user-agent. То есть в логе у вас лежит связка «IP — yclid — точное время», а в Метрике — связка «yclid — поведение — стоимость клика». Соединяем два источника по yclid и получаем то, чего не даёт ни один интерфейс: адрес того, кто кликал.

Практически это делается так. Забираем с сервера access.log за нужный период (обычно лежит в /var/log/nginx/). Дальше вытаскиваем только строки с рекламными переходами:

grep "yclid=" access.log | awk '{print $1, $4, $7}' | sort | uniq -c | sort -rn | head -40

На выходе — список IP-адресов с количеством рекламных заходов, отсортированный по убыванию. Нормальная картина выглядит как длинный хвост: почти у всех адресов по одному-два клика, изредка три. Ненормальная бросается в глаза сразу — сверху торчит один адрес с числом, которое ни во что не укладывается.

У меня сверху торчали 47 заходов с одного адреса за девять дней. Следующий по списку имел четыре.

Дальше проверяем распределение по времени, чтобы отсечь совпадения:

grep "yclid=" access.log | grep "IP_АДРЕС" | awk '{print $4}' | cut -d: -f2 | sort | uniq -c

Эта команда показывает, в какие часы приходили клики. У обычного посетителя разброс по всему дню. У моего фигуранта 41 клик из 47 приходился на промежуток с 9 до 11 утра. Ровно после включения показов по расписанию.

Что удалось узнать об источнике и почему это оказалось не случайностью

Пробиваем адрес через whois. Провайдер оказался питерским, тип подключения — корпоративный, не домашний динамический пул. Это уже говорит о многом: адрес закреплён за организацией и не меняется каждые сутки.

Дальше я сделал то, что советую делать всем: проверил этот же IP по логам за более длинный период, до запуска рекламы. И нашёл его. Тот же адрес регулярно ходил по моему сайту месяцами — по разделам услуг, по ценам, по страницам с кейсами. С характерной для конкурентного мониторинга частотой: раз в две-три недели, обход десятка ключевых страниц подряд за пару минут, никаких заявок.

То есть это был не робот-парсер из чужой страны и не случайный кликер. Это был человек, который следил за моим сайтом задолго до рекламы, а когда увидел объявления по своим же запросам — начал их выжигать по утрам, чтобы дневной бюджет уходил в ноль до обеда и его собственные объявления вставали выше.

Схема, кстати, старая как сам контекст. Она не требует ни ботов, ни прокси, ни специальных знаний. Достаточно каждое утро открывать выдачу и кликать по объявлению конкурента с рабочего компьютера. Автоматизированный фрод Яндекс ловит неплохо. А вот ручные клики живого человека с живого адреса — плохо.

Как заблокировать IP в Директе и почему через интерфейс это мучение

В Директе есть штатный механизм: список запрещённых IP-адресов на уровне кампании. Ограничение — до 25 адресов на одну кампанию. Задаётся в параметрах кампании, применяется к показам: адрес из списка ваших объявлений просто не видит, а значит, и кликнуть не может.

Ключевой момент, который многие упускают: список задаётся не на аккаунт, а на каждую кампанию отдельно. Если у вас двенадцать кампаний, придётся двенадцать раз зайти в параметры, двенадцать раз вставить адрес и двенадцать раз сохранить. А когда через неделю появится второй адрес — повторить всю процедуру заново. На аккаунте из тридцати кампаний это превращается в отдельную работу на полдня.

Поэтому я делаю это через API Директа. В объекте кампании есть поле для списка блокируемых адресов, и его можно обновить методом update массово — одним запросом пройтись по всем кампаниям аккаунта и записать актуальный чёрный список. Скрипт занимает пару десятков строк, запускается за секунды, и добавление нового адреса перестаёт быть событием.

Порядок действий у меня такой. Сначала методом get забираю список всех кампаний с их текущими блок-листами. Потом объединяю существующие адреса с новым, слежу за лимитом в 25 штук на кампанию, потом методом update отправляю обновлённый массив. Обязательно с проверкой ответа — Директ вернёт ошибку, если адрес записан в неверном формате или лимит превышен.

Отдельно предупрежу про частую ошибку: не вносите в блок-лист свои собственные адреса и адреса офиса «чтобы не тратить бюджет на себя». Заблокированный IP не увидит объявления вообще, и вы потом будете полдня выяснять, почему реклама «не показывается», проверяя ставки и модерацию.

Что делать, если адрес динамический

Мне повезло: адрес был статический, корпоративный, и одна блокировка закрыла вопрос. Но так бывает не всегда — с домашнего подключения адрес может меняться после каждого переподключения роутера.

В этом случае работает связка приёмов.

Первое — смотрим не отдельный адрес, а подсеть. Если клики идут с 178.xxx.xxx.14, потом с 178.xxx.xxx.87, потом с 178.xxx.xxx.203, значит, провайдер выдаёт адреса из одного пула. Директ не принимает маски, но 25 слотов позволяют закрыть самые активные адреса пула, а остальные обычно отваливаются сами, когда человек видит, что схема перестала давать эффект.

Второе — работаем с площадками. Если фрод идёт не с поиска, а из сетей, чистка списка площадок даёт больше, чем блокировка адресов. Я всегда первым делом отключаю показы во внешних сетях с идентификаторами вида dsp-*: качество трафика оттуда стабильно ниже, а доля мусорных кликов выше. Дальше собираю отчёт по площадкам, отсекаю те, где ноль конверсий при заметном расходе, и выношу их в запрещённые.

Третье — сегменты Метрики и корректировки ставок. Создаётся сегмент по признакам мусорного визита — время на сайте меньше 10 секунд, глубина 1, повторные визиты. Сегмент выгружается в аудиторию, на аудиторию ставится понижающая корректировка. Это не блокировка, но она снижает стоимость проблемы.

Четвёртое — расписание показов. Если основной удар приходится на конкретные часы, иногда дешевле сдвинуть расписание, чем воевать. Мой фигурант работал строго с 9 до 11. У его собственного бизнеса, судя по всему, рабочий день начинался в девять.

Результат в цифрах

За девять дней до блокировки: 47 кликов с одного адреса, средняя цена клика по кампании 372 рубля, потрачено на этот адрес около 17 500 рублей. Заявок с них — ноль, разумеется.

После блокировки: за следующие три недели с этого адреса ни одного показа. Дневной бюджет перестал выгорать к обеду и начал работать весь день. Стоимость заявки по кампании снизилась примерно на четверть — не потому, что заявок стало больше, а потому, что перестали оплачиваться пустые клики.

Всего за проверенный период по логам набралось три адреса с явно нездоровой активностью. Два оказались корпоративными, один — хостинговым (это уже парсер, а не человек). Все три ушли в блок-лист по всем кампаниям одним запросом.

Замечу честно: полностью скликивание не исчезает никогда. Часть кликов останется, и с ней придётся жить. Задача не в том, чтобы построить неприступную стену, а в том, чтобы сделать атаку экономически бессмысленной для того, кто её ведёт, и вернуть себе хотя бы очевидно украденное.

Почему я всё равно считаю Директ дорогим костылём

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

Посмотрите на конструкцию со стороны. Вы платите за каждый клик. Ваш конкурент может увеличивать ваши расходы, ничего не нарушая формально и не тратя ничего, кроме своего времени. Площадка получает деньги в любом случае — и с ваших целевых кликов, и с пустых. Вы вынуждены нанимать специалиста, лезть в логи, писать скрипты и вести чёрные списки просто чтобы платить не сверх меры.

И самое главное: в тот момент, когда вы перестаёте платить, трафик исчезает мгновенно. Полностью. В тот же час.

С органической выдачей так не работает. Страница, которая вышла в топ, приносит переходы каждый день, и по ней невозможно кликнуть так, чтобы вы что-то потеряли. Конкурент может изучать ваш сайт хоть каждое утро — вам это не будет стоить ни рубля. У меня есть проекты, которые держат первые позиции в Яндексе восемь лет и дольше, и всё это время они приводят заявки без счётчика расхода.

Я не призываю выключать рекламу. Директ хорош там, где нужен быстрый старт, тест спроса или сезонный всплеск. Но строить на нём весь поток заявок — это арендовать трафик по счётчику вместо того, чтобы владеть источником. Подробнее эту логику я разбирал в материалах по продвижению и аналитике, там есть расчёты по стоимости заявки из органики и из контекста на одних и тех же проектах.

Что делать, если целевого трафика мало, а реклама съедает бюджет

Если вы дочитали до этого места, скорее всего, ситуация вам знакома: заявки идут только пока крутится реклама, стоимость обращения растёт, а органика стоит на месте.

Я работаю с клиентами напрямую — без агентских прослоек, менеджеров-передатчиков и «команды из пятнадцати специалистов», которую вы никогда не увидите. Проект веду сам: разбираю логи, техническую базу, структуру, семантику, контент и коммерческие факторы. За плечами более 300 проектов и только белые методы — без накруток и схем, за которые потом прилетает фильтр.

Предлагаю два направления.

SEO-продвижение сайта — системная работа со всеми основными факторами ранжирования, которых на сегодня 1922. Результат — позиции и поток обращений, который не выключается вместе с бюджетом. Тариф «Старт» — от 55 000 ₽ в месяц. Отчётность прозрачная, все данные и доступы ваши.

GEO-продвижение — оптимизация под генеративные поисковые системы: YandexGPT, GigaChat, ChatGPT, Perplexity. Люди всё чаще спрашивают не поисковик, а нейросеть, и ответ формируется из тех источников, которые она сочла авторитетными. Конкуренция здесь сейчас минимальная. Через год вход в этот канал будет стоить в разы дороже.

Начать проще всего с диагностики: закажите бесплатный аудит сайта — я посмотрю индексацию, структуру и техническую базу и скажу прямо, что мешает получать заявки из поиска. Если хотите разобрать ситуацию предметно, включая расход на контекст и защиту от скликивания, приходите на SEO-консультацию. Технические правки закрываю сам — этим занимается доработка сайта, а тексты под коммерческие запросы можно заказать отдельно.

Не верите на слово — попросите контакты любого из моих действующих клиентов и позвоните им напрямую. Я даю их без вопросов. Часть результатов выложена в портфолио с кейсами.

Звоните: +7 (921) 333-77-45. Анатолий Кузнецов.

Короткий чек-лист по следам статьи: выгрузите access.log за последние две недели, отфильтруйте строки с yclid, сгруппируйте по IP и посмотрите верхние двадцать адресов. Если один из них выбивается из общей картины в разы — вы нашли то, за что платите зря.

Увеличьте позиции и продажи вашего сайта

Профессиональное SEO-продвижение с гарантией результата. Выберите подходящую услугу:

Анатолий Кузнецов — SEO-оптимизатор

Остались вопросы по продвижению?

Меня зовут Анатолий Кузнецов, я SEO-оптимизатор с 20-летним стажем. Разберу ваш сайт, отвечу на вопросы и подскажу, что улучшить для роста позиций в Яндексе и Google.

Связаться со мной →

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

 Нажимая «оставить комментарий» вы принимаетеправила конфиденциальности 

Прокрутить вверх