РазборРазбор · На радарHabr AI→ оригинал

Трафик растёт, заказов нет: как headless-боты и AI-агенты прячутся в Метрике и GA4

Посещаемость растёт, а заказы стоят: часть «посетителей» оказывается браузерами без человека. Автор повесил на тестовую страницу свой счётчик, похожий на Метрику и GA4, и открыл её из curl, Python и Playwright. Краулеры без JavaScript в отчёты не попадают, а любой Chromium даёт полноценный визит с глубиной и кукой.

AI-обработка оригинала Habr AI; редакция Hamidun News
Трафик растёт, заказов нет: как headless-боты и AI-агенты прячутся в Метрике и GA4
Источник: Habr AI. Коллаж: Hamidun News.
Слушать статью
Паспорт материала и цифры
ПараметрДанные
ПервоисточникHabr AI ↗
Главный редактор
Ключевой факт #1curl и requests видны только в логе сервера, счётчик молчит
Ключевой факт #2Playwright после пары строк маскировки неотличим от человека
Ключевой факт #3Выдают датацентровый IP, SwiftShader в WebGL и окно без рамки

График посещаемости ползёт вверх третью неделю, маркетинг доволен, а заказов нет. Продакт разбирает воронку по шагам и не находит поломку. Возможно, ломать нечего: часть «посетителей» просто не люди. По данным Cloudflare от 30 сентября 2026, больше половины трафика в интернете уже сделали не люди, а запросы AI-агентов за год выросли более чем на 1700%.

Кого слышит счётчик

Счётчик аналитики живёт скриптом на странице. Нет исполненного JavaScript — нет хита. Автор материала проверил это на практике: повесил на тестовую страницу мини-счётчик, который делает то же, что теги Метрики и GA4 (собирает данные браузера, шлёт пинг через 3 секунды, ставит first-party куку), и открыл страницу разными клиентами. Рядом nginx писал свой лог.

Результат простой. curl, Python requests и даже curl с User-Agent GPTBot остаются только в логе. Любой Chromium, включая Playwright в разных режимах и chrome --headless --dump-dom, оставляет и запись в логе, и хит счётчика. Крупные AI-краулеры OpenAI и Anthropic JS-файлы скачивают, но не запускают. JavaScript исполняют Gemini (через инфраструктуру Googlebot) и AppleBot. Независимых свежих замеров автор не нашёл.

Отсюда практическое правило: если трафик на сервере вырос, а в Метрике нет, это скорее всего краулеры, и для аналитики они безвредны. Опасны те, кто в аналитике виден.

Как маскируется headless

Немаскированный Playwright с headless=True сдаёт себя сразу: HeadlessChrome в User-Agent и Client Hints, нет Accept-Language, пустые плагины, webdriver=true. Хватит проверки одной строки UA. С channel='chromium' (новый headless) картина другая: в Client Hints остаётся обычный Chromium, и детектор, перешедший на Client Hints, такой браузер пропустит.

После пары строк маскировки (свой UA, экран 1536×864, русская локаль, московское время, флаг против webdriver, реферер Яндекса, движения мыши) пропадает половина признаков. События мыши приходят с isTrusted=true, по флагу их не отличить.

Остаются расхождения, которые в контексте браузера не поправить: UA говорит «Windows», а navigator.platform «Linux»; нет бренда Google Chrome, потому что Playwright использует Chrome for Testing; внешний размер окна равен внутреннему; в WebGL стоит программный SwiftShader. Последний признак сам по себе слаб (так выглядит и человек в виртуалке), а Chrome 153 уже предупреждает, что откат на программный WebGL устарел. IP датацентра не правится вообще.

Что делать

GA4 исключает ботов по закрытому списку Google и IAB, отключить это нельзя, а объём отсева посмотреть нельзя. Канал «AI Assistant» в GA4 считает переходы из ассистентов и ботов не касается. В Метрике роботы, представившиеся в UA, исключаются сразу, а найденные по поведению учитываются по умолчанию. Начинайте с переключения «Данные: без роботов» и «Сравнить с данными с роботами». Второе сравнение делается вне Метрики: рост в отчёте против роста в логе сервера.

На смоделированных данных (доли задал сам автор, так что проценты ничего не доказывают) важна связка признаков. Поодиночке прямые заходы, отказы или английский язык объяснимы рассылкой, лендингом и рекламой. Вместе с хостинговой сетью и падением доли вернувшихся объяснить их трудно. Связка «хостинговая сеть, прямой заход и визит до 2 секунд или ноль скролла» ловит 86% ботов и задевает 0,43% людей, но из агентов с человеческим поведением находит лишь 215 из 844. Связка «хостинг, новый посетитель, серверный экран» поймала 745 из 844 при 1,2% задетых людей. Для этого к выгрузке Logs API придётся самим добавлять разметку IP по ASN.

Подпись и агенты в браузере

ChatGPT agent подписывает запросы по RFC 9421 (заголовки Signature, Signature-Input, Signature-Agent), и это видит только сервер. Добавьте $http_signature_agent в формат лога nginx и считайте такие визиты там. Протокол Web Bot Auth пока черновик IETF от 1 сентября 2026, но подписывают по нему уже OpenAI, Google и AWS.

Хуже с агентами в браузере самого пользователя: Comet, Atlas, Claude in Chrome. Для Метрики и GA4 это обычный человек на обычной машине, ни один признак среды не срабатывает. Ночной трафик тоже не поможет: агентов запускают люди, поэтому их активность повторяет человеческий недельный цикл.

Вывод для продакта: не лечите воронку, пока не сверили отчёт с логом сервера. А агентные визиты придётся считать отдельным типом посетителя с другой конверсией.

Сюжет

Вопросы и ответы по материалу

Что известно по теме: кого слышит счётчик?

Счётчик аналитики живёт скриптом на странице. Нет исполненного JavaScript — нет хита. Автор материала проверил это на практике: повесил на тестовую страницу мини-счётчик, который делает то же, что теги Метрики и GA4 (собирает данные браузера, шлёт пинг через 3 секунды, ставит first-party куку), и открыл страницу разными клиентами. Рядом nginx писал свой лог. Результат простой. curl, Python requests и даже curl с User-Agent GPTBot остаются только в логе.

Что известно по теме: как маскируется headless?

Немаскированный Playwright с headless=True сдаёт себя сразу: HeadlessChrome в User-Agent и Client Hints, нет Accept-Language, пустые плагины, webdriver=true. Хватит проверки одной строки UA. С channel='chromium' (новый headless) картина другая: в Client Hints остаётся обычный Chromium, и детектор, перешедший на Client Hints, такой браузер пропустит.

Что известно по теме: что делать?

GA4 исключает ботов по закрытому списку Google и IAB, отключить это нельзя, а объём отсева посмотреть нельзя. Канал «AI Assistant» в GA4 считает переходы из ассистентов и ботов не касается. В Метрике роботы, представившиеся в UA, исключаются сразу, а найденные по поведению учитываются по умолчанию. Начинайте с переключения «Данные: без роботов» и «Сравнить с данными с роботами». Второе сравнение делается вне Метрики: рост в отчёте против роста в логе сервера.

ЖХ
Жемал Хамидун — CPO Alpina Digital, продакт-менеджер AlpinaGPT. Делает AI-продукты с 2019 года. Hamidun News — pet project, который вырос в production-агрегатор с 6000+ читателей.
✦ Закрытый клуб практиков · Vibe Club

Внедряйте ИИ быстрее рынка вместе с инженерами и фаундерами

Внутри Vibe Club (hamidun.com/club): еженедельные живые мастермайнды и разборы архитектуры с Жемалом Хамидуном, закрытый Tech Radar, LMS и обновляемая база из 370+ боевых скиллов.

Вступить в Vibe Club →Тест-драйв Академии (72ч)
Что вы думаете?
Загружаем комментарии…