Как измерить трафик из нейросетей в Яндекс.Метрике — и почему ChatGPT с Алисой в него не попадают

от автора

Я собрал в Я.Метрике сегмент по реферальным доменам ИИ-сервисов для своего небольшого сайта и прогнал его за четыре окна. Число получилось маленькое — 10 визитов из 634 за 90 дней. Но интереснее не само число, а то, что с ним по-честному можно делать, а что нельзя. Разобрался, почему любой такой замер по определению даёт оценку снизу: реальная величина всегда больше, а насколько — метод сказать не может.

Метод: сегмент по refererDomain

У каждого визита в Метрике есть измерение ym:s:refererDomain — домен, с которого пришёл переход, если браузер его передал (Метрика определяет источник сначала по UTM-метке, а если её нет — по этому рефереру). Я завёл список доменов ИИ-сервисов, которые в принципе способны быть источником перехода на сайт, и отфильтровал визиты по нему через Reporting API.

Список доменов:

chatgpt.com, chat.openai.com, openai.com,perplexity.ai, gemini.google.com, claude.ai,giga.chat, gigachat.com,ya.ru, yandex.ru,copilot.microsoft.com, you.com, deepseek.com

Сегмент в интерфейсе Метрики я собрал руками — «Источники → Внешний реферер → содержит» с OR по каждому домену.

Мой собственный замер Я.Метрика Reporting API, окно 90 дней, июль 2026

Мой собственный замер Я.Метрика Reporting API, окно 90 дней, июль 2026

Код для моего прогона:

#!/usr/bin/env python3# Считает реферальный AI-трафик по счётчику Я.Метрики: тянет топ реферальных# доменов через Reporting API, фильтрует по списку доменов ИИ-сервисов и# отдельно вытаскивает Direct — тот самый мешок, куда падает срезанный referer.import osimport jsonimport urllib.requestimport urllib.parseTOKEN = os.environ["YANDEX_METRIKA_TOKEN"]   # OAuth, скоуп metrika:read достаточноCOUNTER = os.environ["METRIKA_COUNTER_ID"]# Домены, по которым отличаем визит из ИИ-сервиса. Матчим по подстроке в# refererDomain: perplexity/gemini/claude referer обычно отдают, chatgpt и# Алиса — режут (их визиты уходят в Direct и сюда не попадут вообще).AI_DOMAINS = [    "chatgpt.com", "chat.openai.com", "openai.com",    "perplexity.ai", "gemini.google.com", "claude.ai",    "giga.chat", "gigachat.com",    "ya.ru", "yandex.ru",    "copilot.microsoft.com", "you.com", "deepseek.com",]def api(path, params):    url = f"https://api-metrika.yandex.net{path}?" + urllib.parse.urlencode(params)    req = urllib.request.Request(url, headers={"Authorization": f"OAuth {TOKEN}"})    with urllib.request.urlopen(req, timeout=25) as r:        return json.loads(r.read())def ai_referral(date1="90daysAgo", date2="today"):    # Забираем реферальные домены с числом визитов и сами фильтруем по списку.    rows = api("/stat/v1/data", {        "ids": COUNTER,        "dimensions": "ym:s:refererDomain",        "metrics": "ym:s:visits",        "date1": date1, "date2": date2,        "sort": "-ym:s:visits", "limit": 500, "accuracy": "full",    })["data"]    hits = []    for row in rows:        dom = (row["dimensions"][0]["name"] or "").lower()        if any(a in dom for a in AI_DOMAINS):            hits.append((dom, int(row["metrics"][0])))    return hitsdef totals(date1="90daysAgo", date2="today"):    total = int(api("/stat/v1/data", {        "ids": COUNTER, "metrics": "ym:s:visits",        "date1": date1, "date2": date2, "accuracy": "full",    })["data"][0]["metrics"][0])    src = api("/stat/v1/data", {        "ids": COUNTER, "dimensions": "ym:s:lastTrafficSource",        "metrics": "ym:s:visits", "date1": date1, "date2": date2,        "sort": "-ym:s:visits", "accuracy": "full",    })["data"]    by_src = {r["dimensions"][0]["name"]: int(r["metrics"][0]) for r in src}    return total, by_srcif __name__ == "__main__":    hits = ai_referral()    total, by_src = totals()    ai_visits = sum(v for _, v in hits)    direct = next((v for k, v in by_src.items() if "direct" in k.lower()), 0)    print(f"всего визитов:        {total}")    print(f"AI-реферальных:       {ai_visits}  ({100 * ai_visits / total:.1f}%)  <- нижняя граница")    for dom, v in hits:        print(f"    {v:>4}  {dom}")    print(f"Direct (скрытый ИИ):  {direct}  ({100 * direct / total:.1f}%)")

Ничего экзотического: два запроса к Reporting API, фильтрация подстрокой на стороне клиента, вывод в консоль.

Данные: 10 визитов, из которых 0 однозначно ИИ

Окно

Всего визитов

AI-реферальные (сегмент)

Доля

Direct

Доля Direct

30 дней

378

9

2.4%

322

85.2%

90 дней

634

10

1.6%

552

87.1%

180 дней

635

10

1.6%

553

87.1%

365 дней

635

10

1.6%

553

87.1%

180 и 365 дней совпадают — сайт молодой, весь трафик уложился в первые полгода жизни счётчика. Дальше беру 90-дневное окно как основное, там же разбивка по доменам yandex.ru и ya.ru.

Самый спорный факт замера — из 13 доменов сегмента сработали ровно два — yandex.ru и ya.ru. Ни одного визита из других источников. Сперва я обрадовался — десять совпадений всё же есть, значит метод рабочий. А потом посмотрел, из каких они доменов. Точно ли те 10 визитов с yandex.ru/ya.ru — это переходы из нейропоиска Алисы? Нет, не точно. Referer нейропоиска для визита из генеративного ответа Алисы — yandex.ru/search, и по этой строке в логе нельзя отличить переход из ИИ-ответа от обычного клика по органической ссылке в классической выдаче. Оба варианта дают один и тот же домен реферера. Разделить их без доступа к внутренней разметке Яндекса нельзя.

Формально «чистых», однозначно отнесённых к ИИ-сервису визитов по этому прогону — ноль. А те десять источников — это верхняя оценка внутри самого сегмента (могут быть все ИИ, могут быть все органика), а не число, которое можно предъявить как факт.

Мой собственный замер Я.Метрика, измерение ym:s:lastTrafficSource, окно 90 дней, июль 2026.

Мой собственный замер Я.Метрика, измерение ym:s:lastTrafficSource, окно 90 дней, июль 2026.

Полная картина по ym:s:lastTrafficSource за те же 90 дней:

552  Direct traffic          (87.1%) 34  Link traffic 25  Internal traffic 16  Search engine traffic  6  Recommendation system traffic  1  Messenger traffic

87% визитов сайта — Direct. Это технический ярлык для любого визита, у которого внешний referer не считался или не был передан. Сюда падает всё, что обрубает referer: закладки, переходы из мобильных приложений с их WebView, переходы из мессенджеров без UTM, и — важно для этой темы — переходы из ChatGPT и из чатового интерфейса Алисы, которые обычно не передают referer вовсе.

Мой сегмент по доменам не достаёт ни одного визита из этих 552 не потому, что он плохо настроен или список доменов бедный. Это свойство протокола: у визита, пришедшего без referer, попросту нет реферального домена, по которому можно фильтровать. Сегмент структурно не видит эту часть трафика, потому что данных для фильтра там нет — их обрубили на стороне платформы раньше, чем визит долетел до счётчика. Никакая доработка сегмента этого не меняет.

Почему нельзя закрыть дыру через UTM

Раз referer ненадёжен, добавим UTM-метки и будем точно знать источник. Но это не сработает, и вот почему.

UTM-метку в ссылку ставит тот, кто эту ссылку формирует. Когда я публикую пост с меткой ?utm_source=habr, я контролирую этот URL — я его пишу. Но ссылку на мой сайт в ответе ChatGPT или в ответе Алисы формирует уже не я, а сама модель, на основе того, что она нашла при генерации ответа. Заранее подставить туда UTM-метку я не могу, потому что не пишу этот URL — его собирает движок ИИ-сервиса по своим правилам, обычно просто беря чистый адрес страницы из своего индекса.

Значит единственный технический сигнал о происхождении визита — referer, который передаёт браузер пользователя при переходе. А этот сигнал рвётся на стороне платформы: решение показывать или не показывать referer при клике из чата принимает разработчик ChatGPT/Алисы/другого сервиса, не я и не владелец сайта, на который идёт переход. Со своей стороны я это не исправлю никаким способом — ни UTM, ни серверным трекингом, ни JS-скриптом на своей странице. Данные для восстановления полной картины просто не доходят до меня.

Любая цифра, которую даёт реферальный сегмент — будь то 10, 50 или 500 — по конструкции остаётся только нижней границей. Переоценкой реального AI-трафика она быть не может, только недооценкой: метод физически не способен увидеть визиты с обрубленным referer.

Что можно утверждать по такой метрике, а что нельзя

На сайте есть минимум ноль гарантированно отличимых от органики AI-переходов за 90 дней — по факту сегмента их десять, но с оговоркой про неотличимость yandex.ru/search. Реальное число AI-переходов больше или равно тому, что показал сегмент, просто по логике недосчёта.

87% трафика физически недоступны для атрибуции по referer, и какая-то часть этого объёма — неизвестно какая — тоже переходы из ИИ-сервисов. Наконец, динамику сегмента во времени можно отслеживать как индикатор направления, если методика сбора не меняется от замера к замеру.

А вот чего по этой метрике утверждать нельзя:

  • что «10 визитов пришло из ИИ» как факт — корректнее «сегмент поймал 10 визитов, из них 0 однозначно атрибутируемы»;

  • что доля AI-трафика на сайте — 1.6%, потому что реальная доля лежит где-то между 1.6% и теоретическим максимумом в пределах доли Direct, а точку внутри этого диапазона метод не даёт;

  • сравнивать абсолютные цифры сегмента между разными сайтами без поправки на то, какая у них доля ИИ-сервисов, режущих referer, в общем трафике — она разная в зависимости от тематики и аудитории;

  • делать вывод «AI-трафика почти нет» на основании низкого числа сегмента.

Косвенные признаки

Самый очевидный — всплеск Direct-трафика после публикации материала, который цитируется в ответах ИИ-сервисов на конкретный запрос. Если известно, что страница попала в источники нейропоиска или в ответ ChatGPT по определённому промпту (это отдельно проверяется мониторингом промптов, не Метрикой), а через день-два виден заметный рост визитов на этой же странице без роста в Search/Link — связь предположить разумно. Но это корреляция, не измерение: рост Direct мог быть вызван десятком других причин — репостом в закрытом чате, рассылкой, органическим вирусным эффектом.

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

И самый грубый способ — сопоставлять собственные промпты, по которым сайт цитируется в ответах моделей (проверяется вручную прогоном промптов), с ростом Direct в те же недели. Совпадение по времени — не доказательство причинности, но когда таких совпадений набирается несколько подряд, гипотеза укрепляется.

Все три признака дают направление, но не число. Заменить ими прямой счёт нельзя — они годятся только как дополнение к пониманию, что часть Direct, вероятно, объясняется ИИ-трафиком, без претензии на точную долю.

Вывод

Сегмент AI Traffic на моём прогоне дал 10 визитов из 634 за 90 дней, и честная интерпретация этого числа — нижняя граница, реальная величина неизвестна и лежит где-то в диапазоне, который метод в принципе не опредляет.

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

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

Ограничения

Что эти цифры не доказывают и на что не стоит опираться сверх сказанного:

  • Прогон маленький — 634–635 визитов за окно, статистика на таких объёмах шумная сама по себе, отдельно от вопроса про AI-атрибуцию. На сайте с 50 000 визитов в месяц пропорции могут выглядеть иначе.

  • Список из 13 доменов не исчерпывающий. Новые ИИ-сервисы и агрегаторы появляются быстрее, чем список успевает обновляться, — часть AI-трафика в принципе не попадёт даже в теоретическую верхнюю границу сегмента, если домен не внесён.

  • yandex.ru/ya.ru как единственные сработавшие домены — специфика именно этого стенда и его текущей видимости в Яндексе. На другом сайте, лучше видимом в ChatGPT-поиске, картина по доменам будет другой, но общая проблема — обрубленный referer у чатовых интерфейсов — останется той же.

  • Косвенные признаки из раздела выше не валидированы статистически на этом стенде — я описываю их как рабочую эвристику, без посчитанной точности.

  • Всё сказанное про UTM и referer относится к сценарию «пользователь кликает по ссылке в ответе ИИ-сервиса». Другие каналы AI-влияния — например, когда пользователь читает ответ, запоминает бренд и позже ищет его напрямую в поисковике — эта метрика не покрывает вообще никак, и это отдельный, ещё менее измеримый пласт эффекта.

ссылка на оригинал статьи https://habr.com/ru/articles/1058796/