Как ИИ-ассистенты получают веб-страницы: анализ логов Nginx для ChatGPT, Claude, Gemini и других

Разработчик провёл практический эксперимент, чтобы определить, получают ли ИИ-ассистенты веб-страницы в реальном времени или отвечают из кэшированных индексов, когда пользователи спрашивают о конкретных сайтах. Настроив кастомное логирование Nginx и предоставив основным чат-ботам уникальные строки запроса, они получили чёткие доказательства поведения при получении данных.
Настройка проверки
В тесте использовался пользовательский формат логов Nginx для захвата заголовков, которые стандартный комбинированный лог сжимает:
log_format ai_probe escape=json '{' '"time":"$time_iso8601",' '"ip":"$remote_addr",' '"uri":"$request_uri",' '"status":$status,' '"ua":"$http_user_agent",' '"referer":"$http_referer",' '"accept":"$http_accept"' '}';
Каждый ассистент получил запрос, указывающий на уникальную строку запроса (/?ai=chatgpt, /?ai=claude и т.д.), что упростило атрибуцию. Запросы повторялись в разных сессиях, чтобы избежать маскировки моделей получения данных временными попаданиями в кэш.
Кто заявил о себе с помощью специальных user-agent
Пять ассистентов появились с сигналами, специфичными для получения данных:
- ChatGPT: ChatGPT-User/1.0 (Accept в стиле Chrome, без проверки robots.txt)
- Claude: Claude-User/1.0 (Accept */*, всегда сначала проверяет robots.txt)
- Perplexity: Perplexity-User/1.0 (пустой заголовок Accept)
- Meta AI: meta-webindexer/1.1 (Accept */*, без проверки robots.txt)
- Manus: Суффикс Manus-User/1.0 на UA Chrome (Accept в стиле Chrome)
Все пять получали страницу напрямую из источника.
Кто не заявлял о себе
- Gemini: Ноль запросов от каких-либо user-agent Google в течение окна запроса. Отвечал полностью из своего собственного индекса без выполнения живого получения данных со стороны провайдера.
- Copilot: Обычный Chrome 135 на Linux x86_64, полный Accept в стиле браузера. Получал данные, но неотличим от человеческих посетителей.
- Grok: Обычный Mac Safari 26 и обычный Mac Chrome 143. Получал данные, но неотличим от человеческих посетителей.
Ключевые поведенческие модели, наблюдаемые
ChatGPT: Обращения с нескольких исходных IP-адресов в рамках одного всплеска, обычно получая несколько страниц-кандидатов одновременно, решая, какую цитировать. В 24-часовом рабочем окне запросы ChatGPT-User поступали из пяти различных диапазонов Azure: 23.98.x.x, 20.215.x.x, 40.67.x.x, 51.8.x.x и 51.107.x.x.
Claude: Всегда получает /robots.txt перед каждым получением страницы, из IP-пространства, принадлежащего Anthropic, в диапазоне 216.73.216.0/24. Чисто следует редиректам, включая нормализацию завершающего слеша. Anthropic запускает три различных бота: Claude-User (получение данных, инициированное пользователем), Claude-SearchBot (поисковый индекс) и ClaudeBot (обучающий краулер).
Perplexity: Прямое получение данных без заголовка Accept или реферера. PerplexityBot (их краулер для индексации поиска) отдельно проверял /robots.txt. Автор отмечает, что Perplexity может получать данные в реальном времени, но не обязан, так как может отвечать из своего собственного индекса.
Gemini: Живое получение данных со стороны провайдера не наблюдалось. Google не публикует user-agent, специфичный для получения данных для Gemini, и согласно документации Google по краулерам, AI Overviews и AI Mode основываются на том же поисковом индексе, который заполняет Googlebot.
Эксперимент различает два сигнала: получение данных со стороны провайдера (ассистент обращается к источнику со специальным user-agent) и реальные переходы по кликам (человек читает ответ ИИ и нажимает на цитату, прибывая как обычный браузер с ассистентом в качестве реферера). Объединение обоих в одно число «ИИ-трафика» скрывает это полезное различие.
📖 Прочитать полный источник: HN AI Agents
👀 Смотрите также

Почему вывод интерфейса Claude Code отклоняется и как структурированная спецификация это исправляет
Разработчик объясняет, что непостоянный вывод интерфейса от Claude Code — это не проблема промпта, а проблема формата. Указание точных hex-кодов, толщины шрифта, отступов, состояний экрана и переходов устраняет дрейф. Они также опубликовали в открытом доступе MCP-сервер, который преобразует записи экрана в структурированные спецификации.

MCP-India-Stack: Офлайн-ориентированный сервер для работы с индийскими финансовыми данными в AI-агентах
MCP-India-Stack — это автономный MCP-сервер, который предоставляет функциональность индийских финансовых и государственных API без аутентификации или внешних вызовов API. Он включает локальные наборы данных для налоговых расчетов, инструментов проверки и поиска.

Фемтобот: Эффективный агент на Rust для среды с низкими ресурсами
Femtobot — это легкий AI-агент на основе Rust, разработанный для эффективной работы на малоресурсных машинах, таких как старые Raspberry Pi, с помощью бинарного файла объемом около 10 МБ без крупных зависимостей во время выполнения.

PocketBot: локальный автопилот с ИИ для iOS с использованием App Intents и инференса на устройстве
PocketBot — это приложение для iOS, которое запускает квантованную 3B-модель Llama локально на Neural Engine iPhone через Metal, используя фреймворки Apple AppIntents и CoreLocation для создания событийно-управляемых автоматизаций без передачи данных в облако.