Кто из AI-краулеров действительно был на вашем сайте

Всё остальное, что пишут про AI-краулеров, — предсказание. Access-лог сервера — единственная запись о том, что произошло на самом деле: кто запрашивал ваши страницы, в какие дни и что сервер им ответил. Положите кусок такого лога ниже и получите разбор: подтверждённые визиты, самозванцев, назвавшихся чужим именем с чужого адреса, и страницы, на которых краулер получил 403 вместо вашего текста. Файл читается прямо на этой странице и никуда не загружается.

Период

Файл читается прямо на этой странице. Он не загружается, не сохраняется и никуда не отправляется — это видно во вкладке «Сеть» вашего браузера.

Поддерживаем: nginx и Apache (combined и common), JSON-строки Caddy, экспорты сборщиков логов, где сырая строка лежит в поле JSON (Datadog, Loki, Fluent Bit, docker logs), и JSON-логи Vercel и Cloudflare. Файлы в gzip читаются как есть.

Почему лог решает спор, которого не решает robots.txt

robots.txt — это заявление о намерениях. Он говорит, кому можно. Он не говорит, кто пришёл, как часто и что получил. Полно сайтов, которые пускают всех AI-краулеров и не видят ни одного визита, и полно сайтов, которые считают себя открытыми, пока правило файрвола, антибот-сервис или забытый редирект молча отказывают каждому запросу. Снаружи оба случая выглядят одинаково, а в логе — совершенно по-разному.

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

Чем настоящий краулер отличается от назвавшегося

User-Agent — это строка, которую клиент выбирает сам. Написать «GPTBot» может кто угодно, и пишут постоянно: парсеры, сканеры безопасности и чужие инструменты аудита носят чужие имена, потому что так проходят наивные фильтры. Счёт по одному user-agent завышает цифры, иногда вдвое. Поэтому каждый запрос сверяется с диапазонами адресов, которые операторы публикуют сами: у Google, OpenAI, Anthropic, Perplexity и Apple такие списки есть. Адрес внутри списка — подтверждённый визит. Адрес вне списка у оператора, который список публикует, — самозванец.

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

Чем это не является

  • Это не живая проверка. Инструмент читает историю, которую сервер уже записал, и может рассказать только про тот период, который покрывает ваш файл.
  • Это не доказательство, что краулер прочитал и использовал ваш текст. Успешный запрос означает, что страница была отдана, и ничего больше: что происходит дальше, не публикует ни один провайдер.
  • Это не приговор операторам, которые диапазонов не публикуют. Их визиты помечаются как неподтверждённые и никогда — как подделка: сверять просто не с чем.

Вопросы про чтение логов

Где взять access-лог?
На своём сервере — /var/log/nginx/access.log, /var/log/apache2/access.log или /var/log/caddy/access.log. На управляемой платформе ищите экспорт логов или log drains в панели. Файл в gzip подходит как есть, распаковывать заранее не нужно.
Какие форматы поддерживаются?
Combined и common у nginx и Apache, JSON-строки Caddy, экспорты сборщиков логов, где сырая строка завёрнута в поле JSON (Datadog, Loki, Fluent Bit, docker logs), и JSON-логи Vercel и Cloudflare. Файлы в gzip читаются как есть. Логи IIS в формате W3C пока не поддерживаются. Если формат не понят, вы получите прямой отказ, а не пустой отчёт, и форма непонятой строки уедет к нам, чтобы разборщик её выучил.
Мой лог куда-то загружается?
Нет. Файл читается и разбирается прямо на этой странице и не покидает браузер. Если разборщик не понял формат, отправляется обезличенная форма непонятой строки: буквы заменены на a, цифры на 9, так что ни адреса, ни пути, ни домена в ней не остаётся. Сами строки уходят только если вы нажмёте кнопку, увидев ровно то, что уйдёт.
Почему краулер, который точно ко мне ходит, показан как неподтверждённый?
Потому что его оператор не публикует диапазоны адресов и сверять не с чем. Сегодня в этой группе Meta, ByteDance и Amazon. «Неподтверждён» означает, что мы не можем подтвердить визит, а не что считаем его поддельным.