Barb доверила Claude щоденний аудит бот-трафіку

Історія про те, як маркетолог без прав адміністратора побудував автоматичний моніторинг ботів, який щодня аналізує сотні тисяч запитів, пише готові інструкції для адмінів і сам перевіряє, чи подіяли зміни.

Хто ми і чому нам це болить

Платформа Barb.ua — український маркетплейс б’юті-послуг: тисячі анкет майстрів і салонів, лістинги послуг по містах, блог, медичний та освітній розділи. Для платформи такого типу трафік — це все: люди шукають майстра манікюру в Ужгороді чи салон у Вінниці, порівнюють, записуються.

Моя роль на платформі — маркетинг, SEO і з недавніх пір AI-видимість. Я не адміністратор і не пишу конфіги руками. Це важлива деталь сюжету: рішення, про яке піде мова, будувала людина, яка бачить проблему з боку бізнесу й аналітики, а не з боку серверної консолі.

А проблема ось у чому. У 2026 році трафік сайту — це вже давно не лише люди й Googlebot. До нас щодня приходять AI-краулери — GPTBot, ClaudeBot, PerplexityBot, боти Meta й Apple — і це повноцінний канал видимості: коли користувач питає ChatGPT «де зробити нарощування вій в Одесі», відповідь може містити посилання на Barb.ua. Реальний трафік із AI-асистентів у нас уже вимірюється тисячами візитів на тиждень і зростає. Водночас поруч із корисними ботами ходять парсери, сканери вразливостей і розподілені ботнети — і зовні вони інколи майже не відрізняються. Заблокуєш зайве — втратиш канал. Пропустиш зайве — отримаєш навантаження на сервер і зіпсовану аналітику.

Barb доверила Claude щоденний аудит бот-трафіку 6

Проблема: моніторинг був, але «на людях»

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

  • Сплески «лівого» direct-трафіку в Google Analytics з жахливими поведінковими показниками — bounce під 100%, нульова тривалість сесії. Такі сплески спотворюють усю аналітику: реальні метрики сайту тонуть у смітті.
  • Навантаження на сервер. Агресивний скрапер, який за добу робить десятки тисяч запитів, — це цілком відчутні витрати ресурсів.

Система реагування в нас існувала близько чотирьох років і постійно вдосконалювалася: Telegram-сповіщення про підозрілу активність → адміністратор вручну дивиться логи й аналітику → вносить зміни у WAF-правила Cloudflare. Схема чесно працювала, але мала три системні болі:

  • Не завжди встигали вчасно. Сповіщення прилітали вночі або у вихідний, аналіз відбувався тоді, коли в адміна доходили руки. Ботнет за цей час встигав зробити своє.
  • Адміни розходилися в оцінках. Один вважав, що агента треба блокувати, інший — що це може бути щось корисне і краще почекати. За фінальним рішенням ішли до мене. А я, нагадаю, не адмін — і опинялася в ролі арбітра в суперечці, для якої мені бракувало технічного контексту.
  • Кілька разів помилково блокували корисних ботів. Включно з AI-краулерами — а це прямий удар по каналу видимості, який ми самі ж розвиваємо.

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

Telegram-канал, до речі, живий і досі — але тепер це просто додатковий канал сповіщення, а не тригер ручної роботи.

Barb доверила Claude щоденний аудит бот-трафіку 7

Рішення: Claude як щоденний аналітик бот-трафіку

Архітектура вийшла така:

Claude (планові задачі) → Cloudflare GraphQL Analytics (read-only) → Google Analytics через власний конектор → звіти у Slack.

Claude запускається за розкладом кілька разів на день, через MCP-конектор читає аналітику firewall-подій і HTTP-запитів Cloudflare, аналізує період від попереднього запуску, веде журнал і надсилає звіт у робочий Slack-канал. Раз на тиждень окремі задачі роблять зріз AI-видимості й реального трафіку з AI-асистентів.

Кастомний конектор через Cloudflare Worker

З Cloudflare все було просто — офіційний MCP-конектор до GraphQL-аналітики існує з коробки. А от готового конектора до Google Analytics під наші потреби не знайшлося. Тому ми зробили власний — невеликий Cloudflare Worker, який виступає MCP-сервером: приймає запити від Claude, ходить у Google Analytics Data API від імені сервісного акаунта і повертає дані у зрозумілому форматі.

Чому саме Worker? Це виявився найкоротший шлях «подружити» Claude з API Google: не треба піднімати й обслуговувати окремий сервер, деплой — одна команда, авторизація сервісного акаунта живе в секретах воркера, а сам конектор доступний за HTTPS-адресою, яку просто додаєш у налаштування Claude. Кілька десятків рядків коду — і Claude бачить наші GA4-звіти так само природно, як дані Cloudflare.

Barb доверила Claude щоденний аудит бот-трафіку 8

Логіка, закладена в промпт

Найцінніше в цій системі — не «підключили ШІ», а дисципліна, зашита в інструкції. Промпт щоденного аудиту пройшов кілька версій, і ось його ключові принципи:

Read-only + людина в контурі. Claude нічого не змінює в Cloudflare. Взагалі нічого. Він аналізує і формує рекомендації; зміни вносить адміністратор руками. Це не тимчасова милиця «поки не довіряємо», а свідомий дизайн: ціна помилкового блокування зависока.

Журнал як пам’ять. Кожен запуск дописує запис у markdown-журнал, а наступний запуск починає з його читання. Так система «пам’ятає» акторів між запусками: знає, що конкретний скрапер не з’являвся вже 24 запуски поспіль, що частка обходу челенджів у певної мережі зросла з 13% до 18%, що рекомендація тижневої давнини була впроваджена і подіяла. Часова мітка останнього запису слугує курсором — початком наступного вікна аналізу.

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

Жорсткий список недоторканних. У промпті — явний перелік ботів, яких ніколи не можна рекомендувати блокувати: пошукові системи, AI-краулери, боти прев’ю посилань для месенджерів і соцмереж. Окремо — механізм перевірки на фейків: якщо агент видає себе за відомого бота, але приходить не з інфраструктури власника — це самозванець, і його якраз можна блокувати.

Крос-перевірка помилок. Один із найважливіших уроків: код відповіді 403 сам по собі не означає «Cloudflare заблокував». Це може бути відповідь самого сервера — наприклад, на спробу зайти в приватний розділ. Тому кожен 403 у корисного бота звіряється з firewall-подіями: блокуванням вважається лише той, за яким стоїть реальна подія challenge або block. Без цієї перевірки система панікувала б на рівному місці.

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

Верифікаційна петля. Це, мабуть, найкрасивіша частина. Рекомендація → впровадження людиною → наступний запуск сам перевіряє за подіями, чи актор тепер перехоплюється, і чесно пише в звіт: «правило тримає, витоку немає» або «рекомендація не подіяла, ось ймовірна причина». Цикл замикається без жодної ручної перевірки.

Barb доверила Claude щоденний аудит бот-трафіку 9

Процес налаштування

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

З чим зіштовхнулися і як лікували

Було б нечесно вдавати, що все запрацювало з першої спроби. Ось реальні граблі.

Нечіткі рекомендації на старті. Перші версії видавали щось на кшталт «рекомендую заблокувати цього бота». Без виразу, без дії, без розміщення. Адмінам доводилося додумувати — і ми поверталися до тієї самої проблеми розбіжних інтерпретацій, з якої починали. Лікувалося ітераціями промпта: тепер формат інструкції жорстко зафіксований, і рекомендація без повного виразу для copy-paste просто не вважається рекомендацією.

Аналітика ≠ конфігурація. GraphQL-API Cloudflare віддає лише події спрацювань — але не текст самих правил. На початку Claude реконструював вирази правил за тим, кого вони ловлять, і подавав це як факт. Одного разу реконструйований вираз розійшовся з реальним — і якби адмін дописував умову «наосліп», правило могло б зламатися. З того часу залізна норма: будь-яке твердження про зміст правила позначається як припущення, а перед редагуванням адмін обов’язково звіряє реальний вираз у дашборді.

Невидимі розподілені мережі. Найпідступніша знахідка. Ботнет на резидентних IP-адресах «розсипається» по десятках країн і провайдерів — і коли аналітика групує трафік одночасно за агентом, мережею і країною, кожен шматочок окремо виглядає мізерним і не потрапляє в топи. Одна така мережа — близько 78 тисяч запитів на добу під виглядом звичайного браузера — довго лишалася непоміченою саме через це. Рішення: окремий запит з агрегацією лише за user-agent, без розбивки за географією. У такому розрізі мережа зібралася в одну велику цифру — і була заблокована. Тепер цей запит — обов’язковий крок кожного аудиту, разом із трьома евристиками розпізнавання: застаріла версія браузера, аномальна частка обходу челенджів, нетипова для нашої аудиторії географія.

Зависання планових задач. Інфраструктурна проблема, яка коштувала нам нервів: сесії планових задач інколи «залипали» в циклі й не завершувалися. З’ясували дві речі. Перша — паралельні запити до MCP-конектора провокували помилки з’єднання і перезапуски агента, тому в промпті тепер жорстка вимога строго послідовного виконання запитів. Друга — частину проблем зняла зміна моделі й режиму підтвердження дій, а решту ми ескалювали в підтримку платформи. Важливий нюанс, який ми зрозуміли дорогою: поставити задачу на паузу і зупинити вже запущену сесію — це дві різні дії.

Ліміти безкоштовної аналітики. На нашому тарифі Cloudflare дані аналітики живуть кілька діб, а одне вікно запиту обмежене добою. Тижневу історію з API просто не дістати. Саме тому журнал перетворився з «приємного бонуса» на критичний компонент: це єдине місце, де накопичується довга історія.

Бонус-знахідка, яка окупила все. Нещодавно система впіймала легітимного AI-пошукового бота великого вендора, який через нестандартний формат user-agent потрапляв під наше challenge-правило для аномальних агентів — і не отримував контент. Людина в потоці щоденних логів цього б не помітила: бот новий, обсяг на фоні загального трафіку скромний. Claude помітив, крос-перевірив походження (справжня інфраструктура вендора, не фейк), і видав готову інструкцію для розблокування. Тобто система захищає не лише нас від ботів, а й корисних ботів від нас самих — а це прямий захист каналу AI-видимості.

Barb доверила Claude щоденний аудит бот-трафіку 10

Що отримали в цифрах

Кілька фактів із реальних звітів останніх тижнів:

  • Щоденні звіти без участі людини. «Чистий» день — один рядок у Slack: «підозрілої активності немає». Проблемний день — повний звіт із готовим планом дій.
  • Фейковий «Googlebot» — до 85 тисяч запитів на добу, 100% заблоковано. Мережа, що прикидається пошуковиком Google, але приходить зовсім не з його інфраструктури, стабільно б’ється об блокувальне правило: жодного запиту повз, і система перевіряє це кожен запуск.
  • Розподілена резидентна мережа — близько 28 тисяч запитів на добу, 100% перехоплення тим самим правилом, яке колись з’явилося завдяки агрегації за user-agent.
  • Корисні боти — 0% блокувань, і це не разова перевірка, а метрика кожного запуску з крос-перевіркою кодів відповіді проти firewall-подій.
  • Один надоїдливий зниклий скрапер система відстежує вже 24 запуски поспіль — якщо повернеться, ми дізнаємось того ж дня.
  • Суперечки адмінів зникли. Тепер є єдиний аргументований аналіз із цифрами, і питання «блокувати чи ні» більше не вирішується голосуванням у чаті.
  • Побічний ефект: паралельний моніторинг показує, що реальний трафік із AI-асистентів виріс до ~1,6–1,7% усіх відвідувачів сайту і заходить переважно на анкети майстрів, салонів і лістинги послуг — що прямо визначило наші пріоритети в роботі зі структурованими даними.

Висновки й поради тим, хто захоче повторити

  • Головне — не «підключити ШІ», а закласти дисципліну в промпт. Read-only, журнал як пам’ять, обов’язкові крос-перевірки, фіксований формат рекомендацій. Без цього отримаєте балакучого асистента, а не систему моніторингу.
  • Людина в контурі — це дизайн, а не недовіра. Аналіз автоматизований повністю, рішення — за людиною. Для інфраструктурних змін це правильний баланс.
  • Журнал важливіший, ніж здається. За коротких лімітів ретенції API саме журнал стає довгостроковою пам’яттю системи — і дає їй змогу бачити тренди, серії та статуси, недоступні в жодному одиночному запиті.
  • Ітеруйте промпт по реальних збоях. Наш пройшов кілька версій, і кожна народжувалася з конкретних граблів: нечітка рекомендація, розійшлася реконструкція, пропущена мережа. Промпт — це живий документ.
  • Стежте не лише за шкідливими ботами, а й за корисними. У світі, де AI-асистенти стали каналом трафіку, помилкове блокування краулера коштує дорожче, ніж пропущений парсер.
  • І останнє. У цій статті свідомо немає виразів правил, ідентифікаторів, конкретних сигнатур, порогів спрацювання і деталей нашої мережевої конфігурації. Ми розповіли як побудована система — але не що саме вона перевіряє. Читачі, які будують власний захист, зрозуміють чому.

    Питання про досвід чи технічні деталі архітектури — пишіть, радо поділимося тим, чим можемо.

    Джерело: www.ukrinform.ua

    No votes yet.
    Please wait...

    Залишити відповідь

    Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *