AI-crawler и llms.txt
Что решаем
Заголовок раздела «Что решаем»Кому разрешено читать сайт, решаете вы. На большинстве проектов это решение принимают случайно, в панели, которую никто не открывал. А если crawler до вас не дошёл, в AI-ответах вас нет, и насколько хорошо написана страница, после этого уже неважно.
Ловушка сидит в самих словах «AI-бот»: за ними прячутся три разные работы, и отказать в доступе каждой из трёх стоит по-разному.
Сначала разложите агентов по работе, а решайте потом. Поисковый crawler, обучающий crawler и загрузчик по просьбе пользователя — это три разных решения.
| User agent | Владелец | Работа | Чего стоит блокировка |
|---|---|---|---|
OAI-SearchBot | OpenAI | Поисковый индекс | Вас нет в результатах поиска ChatGPT |
ChatGPT-User | OpenAI | Загрузка по просьбе пользователя | Почти ничего — OpenAI пишет, что robots.txt здесь может не применяться |
GPTBot | OpenAI | Обучающий корпус | В сегодняшних ответах — ничего |
Claude-SearchBot | Anthropic | Поисковый индекс | Вас нет в веб-результатах Claude |
Claude-User | Anthropic | Загрузка по просьбе пользователя | URL, который вставит ваш читатель, в чате не откроется |
ClaudeBot | Anthropic | Обучающий корпус | В сегодняшних ответах — ничего |
PerplexityBot | Perplexity | Поисковый индекс | Вас нет в движке с самой ясной атрибуцией |
Perplexity-User | Perplexity | Загрузка по просьбе пользователя | Почти ничего — Perplexity пишет, что обычно игнорирует robots.txt |
Google-Extended | Управляющий токен | Вне обучения Gemini и grounding в Vertex AI | |
GoogleOther | Разные внутренние загрузки | В AI-ответах — почти ничего | |
CCBot | Common Crawl | Открытый корпус для обучения | В сегодняшних ответах — ничего |
Что писать в robots.txt, если ничего особенного не нужно
Заголовок раздела «Что писать в robots.txt, если ничего особенного не нужно»Четыре строки, и на большинстве проектов файл на этом заканчивается.
User-agent: *Allow: /
Sitemap: https://example.com/sitemap-index.xmlИменно это отдаёт данный сайт. Имя агента я пишу, только когда его надо закрыть. Список разрешённых поимённо кому-то потом придётся поддерживать, а новые имена вендоры выпускают быстрее, чем кто-нибудь возвращается перечитать файл.
Читайте то, что отдаёт боевой домен, а не то, что лежит в репозитории, потому что CDN умеет переписать этот файл по дороге.
curl -sS https://example.com/robots.txtManaged-версия Cloudflare живёт на странице Security Settings зоны, под фильтром Bot traffic. Она есть на всех тарифах. Если её включить, она допишет свои строки Disallow перед вашими, а домену на Free-тарифе без собственного файла Cloudflare отдаёт вместо него свою Content Signals Policy.
Поисковые агенты и агенты, которых вызвал человек, решают, есть ли вы в сегодняшнем ответе. Обучающая группа — вопрос ценностей. Только ради неё я вообще стал бы набирать чьё-то имя.
Кого ваши правила вообще обязывают
Заголовок раздела «Кого ваши правила вообще обязывают»Crawler соблюдает robots.txt. Загрузчик соблюдает не всегда. Разрыв между ними достаточный, чтобы испортить весь диагноз.
OpenAI пишет: раз действие инициировал пользователь, правила robots.txt могут не применяться, а Perplexity говорит, что её user agent обычно этот файл игнорирует по той же причине. Anthropic — исключение. Она пишет, что её боты файл соблюдают.
То есть одна и та же строка Disallow у трёх вендоров ведёт себя тремя способами. По вашему файлу этого не видно. Видно только по документации вендора.
Google-Extended выключает не то, что кажется
Заголовок раздела «Google-Extended выключает не то, что кажется»Это управляющий токен без своего user agent: в логе вы его не увидите и на ранжирование он не влияет. Покрывает он обучение моделей Gemini и Grounding with Google Search в Vertex AI.
В Google Search его блокировка не меняет ничего. AI Overviews — часть Search, и страницы для них обходит обычный Googlebot.
Как выйти из AI Overviews по-настоящему
Заголовок раздела «Как выйти из AI Overviews по-настоящему»Для этого есть отдельный контрол: 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 — сверяйтесь с ними, прежде чем строка лога станет доказательством. Чего это стоило, разобрано в кто к вам на самом деле ходит.
Стоит ли писать llms.txt
Заголовок раздела «Стоит ли писать llms.txt»Короткий ответ — по одному признаку: есть ли у вас документация, в которой агенту трудно найти нужную страницу самому.
То есть llms.txt решает ровно одну задачу: сказать словами, какие из ваших страниц читать первыми. Если страниц пять и они и так на виду, задачи нет.
Файл стоит десять минут. Читать его никто из вендоров не обязался, и вот что было у меня за 16 дней:
Кто забирал llms.txt | Обращений |
|---|---|
мой собственный curl | 44 |
SiteAuditBot (Semrush) | 1 |
| AI-агенты | 0 |
| всего | 45 |
Для сравнения: robots.txt за то же окно забрали 56 раз, и там это были настоящие краулеры.
Две оговорки, без которых этот ноль читать нельзя. Окно дырявое: logrotate держит 14 суточных архивов, и записи с 20 по 28 июля не сохранились. И запрос, зарезанный на edge, до nginx не доходит, то есть в таблицу выше не попадает вовсе.
Поэтому я сходил и сверил обе стороны за одни сутки:
| Cloudflare | nginx | |
|---|---|---|
| Всего запросов | 668 | 672 |
| 200 | 651 | 648 |
| 404 | 13 | 13 |
| 403 | 0 | 0 |
Числа сходятся, ни одного 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. Сама блокировка ложится в Analytics → Events и на 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. Умолчание вы не выбирали, но настройка всё равно ваша.
-
Откройте Analytics → Events и отфильтруйте действие по 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 цитирует не вас.
