Перейти к содержимому

AI-crawler и llms.txt

Кому разрешено читать сайт, решаете вы. На большинстве проектов это решение принимают случайно, в панели, которую никто не открывал. А если crawler до вас не дошёл, в AI-ответах вас нет, и насколько хорошо написана страница, после этого уже неважно.

Ловушка сидит в самих словах «AI-бот»: за ними прячутся три разные работы, и отказать в доступе каждой из трёх стоит по-разному.

Сначала разложите агентов по работе, а решайте потом. Поисковый crawler, обучающий crawler и загрузчик по просьбе пользователя — это три разных решения.

User agentВладелецРаботаЧего стоит блокировка
OAI-SearchBotOpenAIПоисковый индексВас нет в результатах поиска ChatGPT
ChatGPT-UserOpenAIЗагрузка по просьбе пользователяПочти ничего — OpenAI пишет, что robots.txt здесь может не применяться
GPTBotOpenAIОбучающий корпусВ сегодняшних ответах — ничего
Claude-SearchBotAnthropicПоисковый индексВас нет в веб-результатах Claude
Claude-UserAnthropicЗагрузка по просьбе пользователяURL, который вставит ваш читатель, в чате не откроется
ClaudeBotAnthropicОбучающий корпусВ сегодняшних ответах — ничего
PerplexityBotPerplexityПоисковый индексВас нет в движке с самой ясной атрибуцией
Perplexity-UserPerplexityЗагрузка по просьбе пользователяПочти ничего — Perplexity пишет, что обычно игнорирует robots.txt
Google-ExtendedGoogleУправляющий токенВне обучения Gemini и grounding в Vertex AI
GoogleOtherGoogleРазные внутренние загрузкиВ AI-ответах — почти ничего
CCBotCommon CrawlОткрытый корпус для обученияВ сегодняшних ответах — ничего

Что писать в robots.txt, если ничего особенного не нужно

Заголовок раздела «Что писать в robots.txt, если ничего особенного не нужно»

Четыре строки, и на большинстве проектов файл на этом заканчивается.

User-agent: *
Allow: /
Sitemap: https://example.com/sitemap-index.xml

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

Читайте то, что отдаёт боевой домен, а не то, что лежит в репозитории, потому что CDN умеет переписать этот файл по дороге.

Окно терминала
curl -sS https://example.com/robots.txt

Managed-версия Cloudflare живёт на странице Security Settings зоны, под фильтром Bot traffic. Она есть на всех тарифах. Если её включить, она допишет свои строки Disallow перед вашими, а домену на Free-тарифе без собственного файла Cloudflare отдаёт вместо него свою Content Signals Policy.

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

Crawler соблюдает robots.txt. Загрузчик соблюдает не всегда. Разрыв между ними достаточный, чтобы испортить весь диагноз.

OpenAI пишет: раз действие инициировал пользователь, правила robots.txt могут не применяться, а Perplexity говорит, что её user agent обычно этот файл игнорирует по той же причине. Anthropic — исключение. Она пишет, что её боты файл соблюдают.

То есть одна и та же строка Disallow у трёх вендоров ведёт себя тремя способами. По вашему файлу этого не видно. Видно только по документации вендора.

Это управляющий токен без своего user agent: в логе вы его не увидите и на ранжирование он не влияет. Покрывает он обучение моделей Gemini и Grounding with Google Search в Vertex AI.

В Google Search его блокировка не меняет ничего. AI Overviews — часть Search, и страницы для них обходит обычный Googlebot.

Для этого есть отдельный контрол: Search Console, Settings, Search generative AI. Он покрывает AI Overviews, AI Mode и генеративные блоки в Discover, а Google пишет, что сигналом ранжирования в остальном Search он не служит.

nosnippet, data-nosnippet и max-snippet тоже выводят. Только они забирают с собой и обычный сниппет в выдаче. Отдельный контрол такой цены не берёт, но раскатывают его пока на часть владельцев, так что у вас в ресурсе его может ещё не быть.

Если всё-таки называете агентов, всё решает порядок групп

Заголовок раздела «Если всё-таки называете агентов, всё решает порядок групп»

RFC 9309 говорит, что crawler слушается одной группы — той, чьё имя совпало с ним точнее всего, так что щедрый User-agent: * ниже не спасёт агента, которого вы закрыли выше.

Правило работает в обе стороны. Кусается оно так: одна протухшая группа молча перебивает wildcard под собой. Поэтому поимённого списка разрешений я не завожу вообще.

Под robots.txt лежат ещё три слоя: X-Robots-Tag, мета-тег и edge. В файле не виден ни один, а 403 отдаёт переключатель в CDN, правило WAF или rate limit, пока вы правите файл, который никто не читает. WAF — это firewall, который матчит HTTP-запросы.

В Cloudflare контрол называется Configure AI bot policies, лежит на странице Security Settings зоны и есть на всех тарифах, включая Free. Агентов он раскладывает на Search, Agent и Training, для каждой группы — Allow, Block on all pages или Block only on pages with ads.

Кто попадает в каждую группу, решает список Cloudflare, и меняется он без вас. Block здесь терминирующий: Cloudflare отвечает 403 из своей сети, и ваш сервер запроса не видит.

С 15 сентября 2026 новый для Cloudflare домен приезжает с блоком Training и Agent на страницах с рекламой, а старый одиночный переключатель рядом, Block AI bots, в тот же день уходит. Существующие зоны сохраняют свои настройки. Отказаться от новых умолчаний можно до 15 сентября.

Та же панель умеет не отказывать, а брать деньги: pay per crawl отвечает 402 и живёт в закрытой бете.

Строку user agent может отправить кто угодно. Я и отправил: мой цикл на curl положил в access-лог имена вендоров, и две недели я читал их как визиты.

Вендоры публикуют диапазоны IP и обратный DNS для своих crawler — сверяйтесь с ними, прежде чем строка лога станет доказательством. Чего это стоило, разобрано в кто к вам на самом деле ходит.

Короткий ответ — по одному признаку: есть ли у вас документация, в которой агенту трудно найти нужную страницу самому.

документация

лендинг или продукт

нет

да

Что вы отдаёте

читателю?

Из sitemap понятно,

что читать первым?

Не писать

Писать llms.txt

Те же десять минут —

в robots.txt и sitemap

То есть llms.txt решает ровно одну задачу: сказать словами, какие из ваших страниц читать первыми. Если страниц пять и они и так на виду, задачи нет.

Файл стоит десять минут. Читать его никто из вендоров не обязался, и вот что было у меня за 16 дней:

Кто забирал llms.txtОбращений
мой собственный curl44
SiteAuditBot (Semrush)1
AI-агенты0
всего45

Для сравнения: robots.txt за то же окно забрали 56 раз, и там это были настоящие краулеры.

Две оговорки, без которых этот ноль читать нельзя. Окно дырявое: logrotate держит 14 суточных архивов, и записи с 20 по 28 июля не сохранились. И запрос, зарезанный на edge, до nginx не доходит, то есть в таблицу выше не попадает вовсе.

Поэтому я сходил и сверил обе стороны за одни сутки:

Cloudflarenginx
Всего запросов668672
200651648
4041313
40300

Числа сходятся, ни одного 403 нет ни там, ни там, то есть мой edge не режет никого. Разница в четыре запроса — это окно nginx, оно на час шире: бесплатный тариф Cloudflare отдаёт аналитику сутками, точнее не свести.

Проверять надо именно так. Если бы edge резал, счётчик Cloudflare был бы заметно больше серверного, и эта разница была бы ответом. Разбор целиком: кто к вам на самом деле ходит.

То есть на маленьком сайте про продукт вы ставите десять минут против измеренной отдачи 0, а в документации на сорок страниц ставка разумная. В остальных случаях я бы эти десять минут потратил на robots.txt и sitemap. Их забирают все.

Сам формат короткий: H1 первой строкой, под ним цитата в одно предложение, абсолютные ссылки, описание после каждого двоеточия. robots.txt говорит, в какие пути не ходить. llms.txt говорит вашими словами, что стоит прочитать.

# Название проекта
> Одно предложение о том, что это и для кого.
## Docs
- [Заголовок страницы](https://example.com/page): о чём она и когда пригодится.
## Optional
- [Второстепенная страница](https://example.com/extra): можно пропустить при жёстком лимите контекста.

Кто приходил на самом деле — это скажет только лог

Заголовок раздела «Кто приходил на самом деле — это скажет только лог»

Поддержка llms.txt — договорённость, а не стандарт, соблюдать который кого-то заставляют, поэтому честный ответ про своих гостей лежит в access-логе.

Окно терминала
zcat -f /var/log/nginx/example.access.log* \
| grep -icE 'chatgpt-user|oai-searchbot|gptbot|perplexity|claude-user|claudebot|meta-externalagent'

Мой лог посчитан в кто к вам на самом деле ходит, там же граница метода: запрос, заблокированный на edge, до сервера не доходит и строкой в логе не становится. Грепните агента, которому Cloudflare отказывает, и лог прочитается так, будто никто не приходил.

Эти запросы считаются по ту сторону блокировки: Cloudflare считает их в AI Crawl Control, во вкладках Crawlers и Metrics. Сама блокировка ложится в AnalyticsEvents и на Free-тарифе хранится 24 часа.

  • Закрыть всех, чтобы сэкономить трафик. Блокировка стояла на edge, в AI-настройке CDN, а не в robots.txt, где я её искал. Загрузчики она покрывает тоже: читателю, вставившему URL в чат, ответили, что страницу открыть нельзя.
  • Потерять цитирование вместе со счётом. Самый активный AI-агент в логе сделал 341 запрос за 16 дней — кто к вам на самом деле ходит. Это ChatGPT-User, запускает его человек, и что человеком был не я, доказать не могу. Выключить такой трафик легко, вернуться в ответы — трудно.
  • Сделать llms.txt обязательным пунктом. Страница велела его публиковать, маршрут повторял, а потом мой лог за 16 дней записал 0 обращений от AI-агентов. Условие теперь одно: у вас документация для разработчиков.
  • Разрешать агентов в robots.txt поимённо. Маршрут просил перечислить каждого агента, а сам сайт всегда отдавал User-agent: * и Allow: /. Поимённый список протухает на вас, и RFC 9309 позволяет протухшей группе перебить wildcard под собой.
  • Запрещать Google-Extended, чтобы убрать себя из AI Overviews. Эта строка отвечает за другое: за обучение моделей Gemini и за то, подтягивает ли Gemini ваши страницы себе в ответ. Для AI Overviews страницы обходит обычный Googlebot, так что запрет не изменил ничего. Нужный переключатель — в Search Console, Settings → Search generative AI.
  • Выходить из AI Overviews через nosnippet. Так здесь и было написано до 3 июня 2026, когда Google выкатил контрол в Search Console. Директивы сниппета вдобавок отбирают обычный сниппет в выдаче, а контрол такой цены не берёт.
  • Верить странице вендора, которая перестала обновляться. В документации Google ai-features до сих пор перечислены только директивы сниппета, а обновлена она 2025-12-10. Моя страница честно повторяла источник, а источник успел протухнуть.
  • Написать Disallow для ChatGPT-User и считать это блокировкой. OpenAI пишет, что загрузка по просьбе пользователя может игнорировать robots.txt, Perplexity — то же про свою. Я вежливо просил клиента, которому вендор уже разрешил не слушаться.
  • Править robots.txt, пока блокировал edge. Файл разрешал каждого агента поимённо, правило bot-protection перед ним отдавало 403, в логе не было ни одной успешной загрузки. Видно это правило только в security events самого CDN.
  • Перечислять в llms.txt планы. Строка в этом файле — обещание, что страница за ней написана. Ссылка на ненаписанную учит игнорировать весь файл — и человека, и модель.
  • Считать robots.txt запретом. Это просьба, а не замок. Нормальный crawler её выполняет. Скрапер — нет, и остановит его только edge.

Запустите geo-crawlers из раздела Tools. Он читает robots.txt, мета-теги и заголовки ответа и отдаёт карту доступа по агентам, и так находится правило, о котором вы забыли.

Оттуда же запустите geo-llmstxt. Он проверяет существующий файл или собирает черновик по структуре сайта, а ссылки, ведущие в никуда, помечает.

Потом проверьте снаружи:

  • Сначала выясните, что вообще стоит перед вашим сервером.

    Окно терминала
    curl -sI https://example.com | grep -iE '^(server|via|cf-ray):'

    Заголовок cf-ray означает Cloudflare. Vercel, Netlify и Fastly представляются своими заголовками. Если впереди нет ничего, отказать crawler’у могут только файрвол и веб-сервер, и проверки ниже тогда переезжают туда.

  • На Cloudflare откройте Security Settings и прочитайте, что стоит в Configure AI bot policies. Умолчание вы не выбирали, но настройка всё равно ваша.

  • Откройте AnalyticsEvents и отфильтруйте действие по Block. Агентов, которым отказали там, нет ни в одном логе на вашей машине.

  • Запросите страницу как crawler, из чужой сети, и убедитесь, что пришло 200.

    Окно терминала
    curl -s -o /dev/null -w '%{http_code}\n' -A 'OAI-SearchBot' https://example.com/
  • Если llms.txt опубликован, заберите его так же и проверьте, что каждая ссылка в нём отдаёт 200.

  • Попросите ассистента открыть один из ваших URL. Не может — значит блокировка реальна. На каком слое она стоит, показывают проверки выше.

  • Запишите минуту, в которую вы это сделали. В логе она ляжет как ChatGPT-User или Claude-User, с адреса вендора. От визита постороннего человека её не отличить.

Доступ — это только ворота. Что процитируют дальше — отдельная задача: почему AI цитирует не вас.

Предложить правку · Страница не помогла