Как защитить сайт от скликивания контекстной рекламы
Метод №1. Смотрим сессии через вебвизор «Яндекса»
Заходим в вебвизор, выбираем максимальный диапазон доступных дат, выбираем тип трафика.
Включаем столбцы:
Устанавливаем активность:
Получаем перечень сессий с низкой активностью, начинаем анализ. Нужно обращать внимание на странные закономерности:
— много сессий с одной и той же IP-сети;
— много сессий с мобильной IP-сети, но заход был выполнен с ПК;
— много сессий с пустым User-Agent;
— много сессий с непопулярными User-Agent вроде типа Linux, CentOS, PaleMoon;
— много сессий с повторяющимися визитами;
— много сессий из одного региона или страны;
— много сессий из московского региона по фразам, которые относятся к другим регионам;
— много сессий с ПК, но разрешение экрана 360 х 720.
Вот пример подозрительной сессии:
IP-сеть Metropolitan branch of OJSC MegaFon AS25159 31.173.0.0/18. Заход был с ПК ОС Windows 10.
Регион — Москва, ключевое слово относится к Питеру.
Что тут странного? Выполнен вход на сайт из московского метро с персонального компьютера из результатов поиска по ключевому слову, которое относится к Питеру. Сессия длилась 1 минуту 21 секунду, из которых 1 минута 19 секунд — время бездействия.
Задача: выявить максимальное количество подозрительных сессий и их IP-сети через вебвизор «Яндекс.Метрики», записать IP-сети в файл, даже если в поле IP-сеть фигурирует только название, например “Mobile subscribers pool” или “Biterika Grupp OOO”. Файл с перечнем IP-сетей понадобиться нам далее.
Ищем IP-сеть по названию
Допустим, мы знаем только название сети, например “Mobile subscribers pool”, идём в Google и ищем IP-сети используя следующий запрос “Mobile subscribers pool cidr” или “Mobile subscribers pool ip network”.
Получаем адреса вида 85.140.0.0/21, заносим их в файл.
Можно искать по номеру AS, если он есть в названии IP-сети, как в случае с Metropolitan branch of OJSC MegaFon AS25159.
Берем AS25159 и вводим в поиск на сайте ipinfo.io, кликаем слева в менюшке IP Address Ranges, записываем в файл все диапазоны, которые начинаются с “Metropolitan branch of OJSC MegaFon”.
Метод №2. Собираем IP-адреса сессий
В Google Analytics и «Яндекс.Метрика» по умолчанию нельзя собирать IP-адреса пользователей. Приватность, все дела. Но нам нужно решать свои задачи, поэтому есть два способа.
Первый способ: через Google Tag Manager
Заходим в GTM, Tags → New → Custom HTML, добавляем это:
<script type="application/javascript"> function getIP(json) { dataLayer.push({"event":"ipEvent","ipAddress" : json.ip}); } </script> <script type="application/javascript" src="https://api.ipify.org?format=jsonp&callback=getIP"></script>
Заходим в Triggers → New → Page View, нажимаем This trigger fires on Some Page Views. Выбираем Referrer → does not contain, вводим адрес своего сайта:
Далее заходим сюда: Navigate to Variables → User-Defined Variables → New → Data Layer Variable. Устанавливаем поле Data Layer Variable Name = ipaddress.
Заходим сюда: Navigate to Triggers → New → Custom Event, вводим имя события ipevent.
Всё готово, переходим в режим предварительного просмотра, там появится запись об IP-адресе.
Второй способ: через сервер
Тут всё зависит от хостинга. Можно собирать данные, включая IP-адреса пользователей из логов сервера.
При использовании Apache + nginx можно собирать сессии пользователей, предварительно установив модуль rpaf.
Логи можно лицезреть тут: /var/log/apache2/access.log.
Отсеиваем подозрительные IP-адреса, проверяем каждый тут ipinfo.io в строке поиска, получаем перечень подсетей, записываем в файл.
Третий способ: блокируем все страны, кроме той, где продвигаемся
Берем список ip-сетей с распределением по странам тут: www.ipdeny.com/ipblocks
Приступаем к блокировке
Для начала нужно знать, на каком сервере работает ваш сайт, вплоть до версии. От этого зависит то, как лучше всего заблокировать паразитный трафик.
Беру для примера Apache 2.4, на нём работает множество сайтов.
Итак, у нас есть перечень IP-сетей и нежелательных User-Agent, которым мы хотим заблокировать доступ к нашему сайту.
Открываем в корне сайта файл .htaccess и вводим следующее:
Блокировка IP-сетей, пример:
<RequireAll> Require all granted Require not ip 31.173.0.0/18 Require not ip 31.173.80.0/21 Require not ip 213.87.160.0/22 Require not ip 213.87.128.0/19 Require not ip 91.193.178.0/23 </RequireAll>
Блокировка нежелательных User-agent, пример:
<IfModule mod_setenvif.c> SetEnvIf User-agent ^-?$ bad SetEnvIfNoCase User-Agent Embedly bad SetEnvIfNoCase User-Agent TweetmemeBot bad SetEnvIfNoCase User-Agent discobot bad SetEnvIfNoCase User-Agent Linux bad SetEnvIfNoCase User-Agent PaleMoon bad SetEnvIfNoCase User-Agent Pale Moon bad <Limit GET POST HEAD> Order Allow,Deny Allow from all Deny from env=bad </Limit> </IfModule>
Строка SetEnvIf User-agent ^-?$ bad отвечает за блокировку доступа к сайту для сессий с пустым User-Agent.
Блокировка реферального спама (переход с других сайтов на ваш сайт), пример:
фиксируем паразитные переходы с сайтов semalt.com, buttons-for-website.com
RewriteCond %{HTTP_REFERER} semalt\.com [NC,OR]
RewriteCond %{HTTP_REFERER} buttons-for-website\.com [NC,OR]
RewriteRule .* – [F]
Перенаправление пользователей с определенными IP на другой сайт
Если есть большая вероятность отсечь реальных пользователей путем блокировки доступа к сайту для определенных подсетей, то рекомендую направлять трафик с подозрительных IP на другой сайт, например лендинг, который никак не продвигается в SEO.
Делается это вот так:
RewriteEngine On RewriteCond expr "! -R '83.180.64.0/18'" RewriteRule .* https://site.com/ [R=301,L]
83.180.64.0/18 — подозрительная подсеть, https://site.com/ — сайт, на который автоматически будут перенаправлены пользователи.
Как проверить, что всё настроено верно
Проверяем статус ответа сервера тут calcus.ru/proverka-otveta-servera, актуально, если заблокирован доступ для определенных User-Agent:
На скриншоте видно, что сервер возвращает ошибку 403 (доступ запрещен) при попытке открыть сайт пользователем с User-Agent: Linux.
Также, смотрим статус ответа сервера тут webmaster.yandex.ru/tools/server-response/, должно быть так:
Код 200 говорит о том, что запрос успешно обработан и сайт доступен для основного робота «Яндекса».
Как отсечь нежелательные IP-адреса из контекстной рекламы
«Яндекс.Директ»: можно отключить максимум 25 IP-адресов в каждой кампании в разделе "Специальные настройки".
Решение по отсечению ботов в «Яндекс.Директ»:
1) Создаем сегмент в «Яндекс.Метрика» с теми, кто заходил на сайт и провел на нём менее 5–10 секунд, сохраняем сегмент.
2) Создаём аудиторию на основе сегмента в сервисе «Яндекс.Аудитории».
3) В настройках кампании ищем пункт «Корректировка ставок», добавляем сохраненный сегмент с корректировкой минус 100%. Profit.
Google Ads: можно отключить по-человечески всё, что вам нужно, и какие угодно IP-адреса, включая ipv6, и подсети, в разделе кампании «Настройки» → «Исключение IP-адресов».
На 100% отключить скликивание контекстной рекламы можно только если выключить саму рекламу.
В Google Ads рекомендую сделать анализ времени до конверсии и повторные заходы с рекламы, далее всё это отсечь через списки ремаркетинга.
Дополнительные методы защиты
Настраиваем www.cloudflare.com/products/argo-smart-routing, рекомендую для нагруженных сайтов, чтобы не прозевать атаку, ведь данные в GA идут с задержкой.
Полезный сервис с базой спамных IP, подсетей, email, доменов — cleantalk.org/blacklists.
Если сайт уже подбирается к топу в суперконкурентной нише, то продумать и закрыть заранее нежелательные User-Agent, страны и IP-сети или продумать умную переадресацию на другие сайты: лендинги, которые никак не продвигаются в SEO или сайты ваших конкурентов.