Усі статті
11 хв читання

Клік-фрод і бот-трафік: як виявляти та фільтрувати його в платних кампаніях

Щільний рій ідентичних механічних комах, що прямує до дрібного сита, яке відловлює більшість із них

Нутра-кампанія, затаргетована на Німеччину, показує CTR 4.8% — майже втричі вище середнього по акаунту — і click-to-registration rate 22%, що зазвичай є приводом одразу подвоїти бюджет. Але хтось відкриває сирий лог кліків. Двісті одинадцять реєстрацій за день завершилися за 2-4 секунди після кліку. 68% цих кліків прийшли з однієї підмережі /24, що резолвиться у дата-центровий ASN у країні, яка не є таргетованим гео. Жодна з них не пройшла далі другого кроку воронки. Ця кампанія не «перформила» — по ній били клік-фродом, і кожен витрачений долар навчав алгоритм закуповувати ще більше такого ж сміттєвого трафіку.

Це тихий режим провалу платного залучення трафіку: бот-трафік і невалідні кліки не просто спалюють бюджет, який вони напряму споживають, — вони псують сигнал оптимізації, за яким платформа шукає наступну партію користувачів. Кампанія, забруднена на 15-20% невалідом, не виглядає зламаною — вона виглядає як кампанія з посереднім креативом, тож ти її вбиваєш, або, що гірше, виглядає переможцем, і ти масштабуєш. У будь-якому разі ти оптимізуєшся під шум. Виправити це — не параноя, а базовий контроль якості трафіку: та сама дисципліна, яку застосовуєш до будь-якого показника, що визначає, куди йдуть гроші далі.

Що вважається невалідним трафіком у платній кампанії

«Бот-трафік» — це збірний термін, але джерела невалідного трафіку в реальній платній кампанії діляться на кілька окремих категорій, кожна зі своєю сигнатурою:

  • Боти й краулери — автоматизовані скрипти, скрапери та інструменти моніторингу, які клікають по посиланнях без жодної людини за кермом. Частина з них шкідливі, частина — просто криво налаштовані SEO- чи uptime-інструменти, які випадково потрапляють у твій ланцюжок редиректів.
  • Клік-спам — високооб’ємний клікінг з низьким інтентом, який генерує малварь на заражених пристроях, click-injection SDK, вбудовані в низькоякісні застосунки, або бот-ферми, що працюють через пули резидентних проксі, щоб виглядати менш підозріло за дата-центровий трафік.
  • Дата-центровий і проксі/VPN-трафік — кліки, що йдуть від хостинг-провайдерів, хмарних регіонів або комерційних proxy/VPN exit-нод замість реальних резидентних чи мобільних провайдерів. Частина реальних користувачів справді сидить через VPN, але сплеск, сконцентрований у жмені ASN, — це вже зовсім інша історія, ніж фоновий шум.
  • Інсентивізований або фейк-конвертуючий трафік — трафік, який технічно «реальний» (людина справді тапнула по чомусь), але їй заплатили за клік або за імітацію конверсії, часто через клік-обмінні мережі чи зловживання офер-волами. Його найважче зловити, бо він проходить прості перевірки на ботів.
  • Клікові атаки конкурентів — навмисне, повторюване клікання по твоїх оголошеннях конкурентом або найманим сервісом, щоб спалити денний бюджет ще до того, як реальні потенційні клієнти взагалі побачать рекламу.

Жодна з цих категорій не виглядає як «0 конверсій, очевидно фейк». Найдорожчі варіанти справді конвертують потроху, і саме тому сирі CTR і CR недостатньо, щоб їх зловити.

Сигнали, які реально викривають бот-трафік

Кожна з категорій вище залишає відбиток десь у даних, які ти вже й так збираєш. Фішка в тому, щоб дивитися на комбінації, а не на окремі метрики ізольовано.

Аномалії CTR і CR. CTR, що в 2-3 рази вищий за середній по акаунту на одному плейсменті чи одному джерелі трафіку, у парі з конверсією, яка або підозріло висока (швидка, однорідна, надто хороша), або суцільна стіна кліків без жодної подальшої активності, — перший тривожний дзвінок. У реального трафіку є варіативність; сфабрикований трафік зазвичай неприродно рівний.

Глибина сесії й час на сторінці. Живі відвідувачі гортають сторінку. Вони скролять, зупиняються, стрибають між двома-трьома сторінками перед конверсією чи виходом. Бот-трафік часто показує сесію з одним переглядом сторінки й майже нульовим часом на ній, або протилежну крайність — сесію, яка «висить» відкритою годинами, бо з’єднання насправді ніхто не закриває.

Репутація IP і ASN. Звіряй IP кліків з відомими дата-центровими діапазонами, публічними списками proxy/VPN exit-нод і власниками ASN. Кластер кліків з AWS, DigitalOcean чи опублікованих IP-діапазонів VPN-провайдера — сильний сигнал невалідного трафіку сам по собі, а в комбінації з будь-чим іншим зі списку — майже стовідсотковий.

Таймінг клік-конверсія. Реальним користувачам потрібен час, щоб прочитати лендінг, оцінити оффер і заповнити форму — навіть швидка, добре зроблена форма рідко конвертиться менш ніж за 3-4 секунди. Конверсія, що спрацьовує через 1-3 секунди після кліку, і так регулярно, вказує на скрипт, який проходить воронку програмно, а не на людину.

Стіна ідентичних годинників, всі застигли в одну й ту саму секунду, з оголеними шестернями

Невідповідності пристрою й user-agent. User-agent, що видає себе за конкретний мобільний браузер, але без touch-event і viewport сигналів, які надіслав би реальний пристрій цієї моделі. Ідентичні, застарілі або криво сформовані UA-рядки, що повторюються в «різних» сесіях, — класичний відбиток бота.

Розбіжності гео. Гео, визначене за IP, яке не збігається з таргетованим, або збігається, але сидить у дата-центровому блоці, зареєстрованому на хостинг-компанію, а не на споживчого провайдера в цій країні, — обидва варіанти означають, що клік прийшов не від того, від кого каже платформа.

Відбиток пальця, утворений доріжками друкованої плати замість природних ліній, під лупою

Приклад на практиці: як читати сигнали разом

Повертаємось до німецької нутра-кампанії. Жоден з чотирьох пунктів нижче окремо не був би приводом для жорсткої зупинки — але разом вони не залишають сумнівів:

  1. Час клік-конверсія: медіана 2.8 секунди (базовий рівень по акаунту: 94 секунди)
  2. Концентрація по підмережі джерела: 68% кліків з однієї /24
  3. ASN: зареєстрований на дата-центр/хостинг-провайдера, а не на резидентного провайдера
  4. Глибина сесії: 1 перегляд сторінки, 0% глибини скролу — у 100% позначених сесій

Будь-який окремий сигнал міг би бути збігом — можливо, є легітимна причина швидкого заповнення форми, можливо, одна офісна мережа ділить блок IP. Але всі чотири, накладені на один і той самий зріз трафіку, — це вже не збіг, а патерн фроду, і саме таке потрібно відфільтровувати і з витрат, і зі звітності, поки воно не тягне середнє по акаунту вниз і не переконує алгоритм, що саме тут живуть твої покупці.

Одна грозова хмара, що ллє ідентичні рівномірні краплі на вузьку ділянку землі, поки навколишнє поле лишається сухим

Типи клік-фроду, сигнали та дії фільтрації

Тип фродуОсновний сигналДія фільтрації
Боти / краулериВідомі UA ботів, немає виконання JS, миттєвий відскокБлокування за патерном UA та поведінковим флагом на рівні трекера
Клік-спам (малварь/injected)Високий об’єм кліків, майже нульова глибина сесії, повторювані device IDРейт-ліміт за фінгерпринтом пристрою; ліміт кліків на IP за годину
Дата-центр / проксі / VPNASN-перевірка збігається з діапазонами хостингу чи VPN-провайдераАвтовиключення позначених діапазонів ASN з витрат і звітності
Інсентивізовані / фейкові конверсіїКонверсії кластеризуються у короткі часові вікна з вузького діапазону IP, низький LTV далі по воронціЗвірка з доходом/утриманням далі по воронці перед зарахуванням конверсії
Клікові атаки конкурентівПовторювані кліки, одне джерело, без конверсій, бюджет швидко спалюється на одному плейсментіПозначення й виключення на рівні джерела; алерт на денну концентрацію кліків

Побудова правила фільтрації: від сигналу до дії

Щоб перетворити ці сигнали на щось застосовне, треба виразити їх як умови, які трекер реально може оцінювати по кожному кліку чи сесії, а не просто розглядати таблицю очима, коли бюджет уже спалено. Базовий флаг невалідного трафіку об’єднує кілька зважених перевірок в один скор підозри:

fraud_score =
    (asn_is_datacenter_or_vpn ? 40 : 0) +
    (click_to_conversion_seconds < 4 ? 30 : 0) +
    (session_pageviews <= 1 && scroll_depth == 0 ? 20 : 0) +
    (clicks_from_source_ip_last_hour > 25 ? 25 : 0) +
    (ua_missing_expected_device_signals ? 15 : 0)

if fraud_score >= 60:
    action = "exclude_from_spend_and_reporting"
elif fraud_score >= 30:
    action = "flag_for_review"
else:
    action = "pass"

Точні ваги мають менше значення, ніж сама структура: жоден окремий сигнал автоматично не вбиває клік, але сигнали накопичуються, і виключається лише трафік, що перетинає реальний поріг. Саме тут себе виправдовує шар кастомних метрик — замість того, щоб вручну перераховувати цей скор у таблиці щотижня, ти визначаєш його один раз як формулу над власними даними кліків і конверсій, і він стає постійною колонкою, яку можна сортувати, ставити на алерти й фільтрувати — по джерелу, по кампанії, по дню.

Детекція проти фільтрації: чому потрібні обидва процеси постійно

Детекція каже тобі, що проблема існує. Фільтрація — це те, що реально захищає акаунт, і обидва процеси мають працювати безперервно, а не як разовий аудит після того, як кампанія вже злилась.

Детекція означає виявляти аномалії в момент їх появи — джерело, що раптово прискорилося за швидкістю клік-конверсія, ASN, якого вчора не було, плейсмент, у якого за ніч обвалилась глибина сесії. Це задача моніторингу: потрібна аналітика, яка розбиває перформанс за джерелом, ASN і пристроєм, а не видає одну усереднену цифру по кампанії, бо саме усереднена цифра ховає ті 15% невалідного зрізу всередині в цілому нормальної кампанії.

Фільтрація означає діяти на основі того, що знайшла детекція, — до того, як поганий трафік забруднить розподіл витрат або зарахується як реальна конверсія, що піде назад в оптимізацію платформи. Це задача окремих правил якості трафіку, що стоять перед воронкою — оцінюють вхідні кліки за тим самим набором сигналів вище і виводять позначений трафік і з цифр ефективності витрат, і з лічильника «реальних» конверсій, автоматично, на кожному кліку, а не лише на тих, які хтось випадково переглянув вручну.

Якщо запустити тільки детекцію, отримаєш дуже інформативний посмертний розбір кампанії, яка вже злила гроші. Якщо запустити тільки фільтрацію без циклу детекції за нею, правила застаріють у той момент, коли джерела фроду поміняють IP чи ASN, — а вони роблять це постійно. Потрібні обидва процеси, що працюють разом, як постійна частина того, як оцінюється трафік, а не як разовий проєкт з прибирання.

Типові помилки

  • Оцінювати якість трафіку тільки за CTR і CR. Високий CTR з відповідним CR виглядає як перемога — доки не перевіриш глибину сесії й не побачиш, що кожна тривала менше двох секунд. Усереднені топлайн-метрики ховають саме ту аномалію, яку ти намагаєшся зловити.
  • Блокувати по країні замість ASN. Виключення цілого гео через сплеск фроду вбиває заодно й усіх реальних користувачів у цій країні. Сигналом ніколи не була країна — це був дата-центровий ASN усередині неї.
  • Сприймати один тривожний сигнал як доказ. Один клік з VPN — ще не фрод; VPN серед реальних користувачів — звичайна і дедалі поширеніша практика. Фільтрація за одним сигналом замість накопиченого скору генерує фолс-позитиви, що непомітно ріжуть хороший трафік разом з поганим.
  • Перевіряти якість трафіку раз на місяць замість постійно. Джерела фроду швидко міняють інфраструктуру — блок ASN, чистий минулого тижня, цього тижня може бути бот-фермою. Місячний аудит фіксує збитки вже добряче після того, як бюджет зник.
  • Зараховувати конверсії без перевірки того, що відбувається далі. «Конверсія», яка ніколи не перетворюється на депозит, кваліфікований лід чи утриманий дохід, — не конверсія, а цифра, яку фрод-мережа чи інсентивізоване джерело трафіку підсунули тобі, щоб виглядати легітимно.

FAQ

Скільки насправді невалідного трафіку в моїх платних кампаніях?

Дуже сильно залежить від вертикалі, гео й платформи, але найчастіше цитовані цифри тримаються десь на рівні 5-10% платних кліків як груба базова оцінка, а окремі кампанії чи конкретні джерела трафіку можуть показувати значно вищі цифри, коли їх активно атакують. Будь-який фіксований відсоток варто сприймати як стартове припущення для перевірки на власних даних, а не як універсальну константу.

Чи можна повністю зупинити клік-фрод, чи лише зменшити його?

Повністю прибрати його не вийде — джерела фроду адаптуються так само швидко, як покращуються фільтри. Реалістична мета — постійно зрізати частку невалідного трафіку до рівня, який більше не спотворює сигнал оптимізації і суттєво не з’їдає бюджет, і регулярно перевіряти цей рівень наново, а не покладатись на набір фільтрів піврічної давнини.

Чи впливає фільтрація невалідного трафіку на звітні обсяги?

Так, вона зменшує топлайн-цифри кліків і конверсій — але ці цифри й так були роздуті трафіком, який ніколи б не приніс дохід. Звітний обсяг, побудований на невалідному трафіку, — не актив, а шум, під який ти вже майже почав оптимізуватися.

Чи завжди швидка конверсія означає фрод?

Ні. Деякі реальні воронки — підписка в один тап, попередньо заповнена форма для користувача, що повернувся, — справді конвертяться швидко. Саме тому таймінг клік-конверсія має бути одним зваженим сигналом у комбінованому скорі, а не окремим правилом, яке автоматично відхиляє кожну швидку конверсію.

Тримати дані чистими

Тут йдеться не про те, щоб щось від когось приховати, — а про те, щоб цифри, які визначають твоє наступне бюджетне рішення, відображали реальних людей, які справді можуть конвертитись. Трекер DarkCore оцінює вхідний трафік за сигналами ASN, пристрою, таймінгу й сесії в момент надходження, тож невалідні кліки відфільтровуються з витрат і звітності до того, як зіпсують середнє по хоча б одній кампанії, а кастомні метрики дозволяють точно визначити, яка комбінація сигналів важлива саме для твоїх вертикалей, замість того щоб покладатись на загальний чекбокс «це бот».

Якщо не впевнений, скільки твого поточного трафіку пройшло б таку перевірку, напиши нам у Telegram, і ми розберемо, що насправді показують твої логи кліків.

  • клік-фрод
  • бот-трафік
  • якість трафіку
  • невалідний трафік
  • медіабаїнг