Кто из 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. «Неподтверждён» означает, что мы не можем подтвердить визит, а не что считаем его поддельным.