---
title: "Проверяй краулер, а не имя: Web Bot Auth и IP-проверки"
description: "Имя, это заявка, IP ротируется, Web Bot Auth доказывает личность, но намерение доказывает только поведение. Модель трёх гейтов для нужных краулеров."
url: https://seo7.es/ru/blog/ai-seo-blog/verify-the-crawler-not-its-name
canonical: https://seo7.es/ru/blog/ai-seo-blog/verify-the-crawler-not-its-name
lang: ru
type: BlogPosting
---

# Проверяй краулер, а не имя: Web Bot Auth и IP-проверки

> Имя, это заявка, IP ротируется, Web Bot Auth доказывает личность, но намерение доказывает только поведение. Модель трёх гейтов для нужных краулеров.

Страница: https://seo7.es/ru/blog/ai-seo-blog/verify-the-crawler-not-its-name

## Описание для ИИ

Имя: это заявка, IP ротируется, Web Bot Auth доказывает личность: но намерение доказывает только поведение. Модель трёх гейтов для нужных краулеров. Две статьи назад я советовал смотреть в серверные логи: не отдаёт ли ИИ-краулерам 403. Отсюда очевидный следующий вопрос: хорошо, блок ты нашёл: а как теперь пустить нужных краулеров, не впустив всех подряд? Это та самая статья: модель, к которой я пришёл, и трещины, на которые я всё время натыкаюсь.

## Вопросы и ответы

### Почему пропускать ботов по строке GPTBot в User-Agent опасно?

User-Agent это обычная строка, её может вписать кто угодно. Скрапер подписывается GPTBot и проходит через правило, которое задумывалось для ИИ-видимости. Имя только заявка, личность оно не доказывает.

### Как устроена двухшаговая DNS-проверка краулера?

Сначала reverse-DNS по IP запроса даёт хостнейм, и он должен принадлежать вендору: .crawl.openai.com, .anthropic.com, .perplexity.ai или .googlebot.com. Затем forward-резолв этого хостнейма должен вернуть исходный IP. Сошлись обе стороны, значит запрос настоящий.

### Где OpenAI и Perplexity публикуют IP своих краулеров?

OpenAI выкладывает gptbot.json, searchbot.json и chatgpt-user.json, Perplexity выкладывает perplexitybot.json и perplexity-user.json. У Google есть свои диапазоны краулера. По этим файлам IP запроса можно сверить с официальным списком.

### Публикует ли Anthropic IP-диапазоны ClaudeBot?

Нет. IP в документации Anthropic относятся к API Claude, а для краулера диапазонов нет. Опознавать ClaudeBot Anthropic советует по User-Agent плюс reverse-DNS по *.anthropic.com. Для одного из крупнейших краулеров сверка с опубликованным диапазоном недоступна.

### Можно ли отличить Google-Extended по IP?

Нельзя. Google-Extended управляет обучением Gemini и AI Overviews через токен robots.txt, отдельного набора IP у него нет, файла google-extended.json тоже. Разрешить или запретить его можно в robots.txt, а на сетевом уровне он не отличается от остального трафика Google.

### Чем ротация IP вредит allowlist краулеров?

Каждый опубликованный диапазон это снимок движущейся цели. Вендор меняет блоки, а список обновляется с опозданием. Владелец выбирает между устаревшим allowlist и окном, когда легитимные краулеры получают 403. Частый опрос JSON проблему только маскирует.

### Что такое Web Bot Auth?

IETF-драфт под руководством Cloudflare, draft-meunier-web-bot-auth-architecture, построенный на RFC 9421 HTTP Message Signatures. Краулер подписывает каждый запрос ключом Ed25519, публичный ключ лежит в well-known каталоге на домене вендора, сервер проверяет подпись.

### Почему подпись Web Bot Auth переживает ротацию IP?

Проверка спрашивает, владеет ли гость ключом, и ей всё равно, из какого дата-центра ушёл запрос. Поэтому не нужно следить за CIDR-блоками и опрашивать JSON с диапазонами: личность доказывает криптография.

### Кто уже поддерживает Web Bot Auth?

Подписи встроены в программу Cloudflare Verified Bots с каталогом Signed Agents. Агент ChatGPT вошёл в первую подписанную когорту в 2025 году, а AWS WAF в конце 2025 года добавил поддержку и сам пропускает проверенных агентов. Стандарт пока остаётся активным драфтом.

### Почему подписи не останавливают вредных скраперов?

Подписи проверяют только тех, кто подписывает. Скраперы, которых хочется заблокировать сильнее всего, Web Bot Auth никогда не внедрят. Для них остаётся проверка происхождения и контроль поведения.

### Почему валидная подпись не гарантирует хорошего поведения?

Подпись доказывает личность, намерение она не показывает. Легитимный краулер в плохой день и украденный ключ выглядят одинаково: оба предъявляют валидную подпись. Только рейт-лимиты и анализ запросов показывают, не перегружает ли гость сервер.

### Какие три гейта нужны для пропуска ИИ-краулеров?

Первый: подписанный запрос проходит быстрым путём после проверки подписи. Второй: неподписанный, но заявивший известный краулер проходит reverse-DNS с forward-подтверждением или сверку с диапазоном. Третий, для всех: рейт-лимиты и наблюдение за поведением.

### По каким признакам вычислить фальшивого GPTBot?

IP резолвится в общий хостинг вроде Hetzner, OVH или DigitalOcean, либо reverse-DNS нет совсем (NXDOMAIN). Запросы идут на /admin, /.env, /wp-login, сотнями в минуту без Crawl-Delay. В имени опечатка: GPT-Bot или несуществующая версия ClaudeBot/2.x.

### Внедрена ли описанная схема проверки у автора?

Пока нет: статья описывает ресёрч, а не готовое решение. План автора: подписи первыми, IP как запасной вариант, контроль поведения снизу. После внедрения он обещает рассказать, что сломалось.

## Другие языки

- ES: https://seo7.es/es/blog/ai-seo-blog/verify-the-crawler-not-its-name
- EN: https://seo7.es/en/blog/ai-seo-blog/verify-the-crawler-not-its-name

## Разметка schema.org

```json
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "name": "Проверяй краулер, а не имя: Web Bot Auth и IP-проверки",
  "description": "Имя, это заявка, IP ротируется, Web Bot Auth доказывает личность, но намерение доказывает только поведение. Модель трёх гейтов для нужных краулеров.",
  "url": "https://seo7.es/ru/blog/ai-seo-blog/verify-the-crawler-not-its-name",
  "mainEntityOfPage": "https://seo7.es/ru/blog/ai-seo-blog/verify-the-crawler-not-its-name",
  "inLanguage": "ru-RU",
  "headline": "Проверяй краулер, а не имя: Web Bot Auth и IP-проверки",
  "isPartOf": {
    "@type": "WebSite",
    "name": "SEO7.ES",
    "url": "https://seo7.es/"
  },
  "publisher": {
    "@type": "Organization",
    "name": "SEO7.ES",
    "url": "https://seo7.es/"
  }
}
```
