Техническое руководство по robots.txt, llms.txt, Schema.org и пререндерингу SPA: как подготовить сайт к чтению ChatGPT, Claude и Perplexity без мифов и лишних запретов.
Этот материал — для тех, кто уже понял проблему и хочет решить её руками. Если AI-краулер не может получить полезный HTML, не понимает, кому принадлежит сайт, или видит противоречивые данные, хороший текст сам по себе не станет источником для ChatGPT или Perplexity. Ниже — технический минимум, который я использую при подготовке сайтов к GEO и AEO.
Важно: открытый доступ не гарантирует цитирование. Он лишь убирает фундаментальный барьер. После настройки всё равно нужны точные ответы, авторство, доказательства опыта и нормальная поисковая индексация.
`robots.txt` — это не список «разрешений для нейросетей», а правила обхода. Я начинаю с инвентаризации: какие публичные разделы должны быть доступны, а какие обязаны остаться закрытыми. Личный кабинет, корзина, служебный поиск, staging, параметры фильтров и страницы с персональными данными нельзя открывать ради AI.
Для публичного корпоративного сайта базовый шаблон может выглядеть так:
Не копируйте этот файл вслепую: если проект работает в регулируемой тематике или содержит закрытые разделы, правила нужно согласовать с безопасностью и юристами. Кроме того, robots.txt — добровольный протокол; он не заменяет аутентификацию, `noindex` и контроль доступа на сервере.
После изменения проверяю не только сам файл. CDN или WAF может вернуть роботу 403, JavaScript-челлендж или CAPTCHA, хотя robots.txt разрешает обход. Посмотрите access-логи с нужным User-Agent и обязательно проверяйте важные URL: главную, услуги, статьи и кейсы.
`llms.txt` — компактная машиночитаемая карта сайта. Он не заменяет sitemap, не является официальным фактором Google и не делает страницу «приоритетной» для каждой LLM. Его задача проще: дать агенту короткую навигацию по самым полезным и достоверным URL.
На Nasloy можно посмотреть [живой пример llms.txt](/llms.txt). Хороший файл начинается с понятного названия и краткого описания, а затем группирует ссылки по смыслу.
Не превращайте файл в полную выгрузку sitemap. Достаточно 15–50 ключевых URL: коммерческие страницы, лучшие гайды, кейсы, контакты, политика и важные документы. Не добавляйте ссылки на параметры, архивы, черновики и материалы под NDA. После публикации проверьте ответ `200 OK`, тип `text/plain` или `text/markdown`, отсутствие редиректа на HTML и корректность абсолютных URL.
Schema.org не является кнопкой «цитировать сайт». Она формализует то, что уже видит посетитель: кто автор, какая организация стоит за страницей, какую услугу она предлагает и где находится вопрос с ответом. Неверная разметка опаснее отсутствующей: не указывайте вымышленные рейтинги, цены, сотрудников или FAQ, которого нет на странице.
Разметка организации нужна на главной, контактах и страницах компании. Свяжите название, URL, логотип, контакты и только подтверждённые официальные профили.
Для каждой статьи нужны `headline`, `datePublished`, `dateModified`, изображение, канонический URL и автор. Дата должна совпадать с тем, что видит пользователь. Если автор — специалист, добавьте реальную страницу профиля.
`Service` полезен для страниц услуг, где видны название, описание, территория работы и способ связи. `FAQPage` используйте только для настоящих вопросов и ответов. В JSON-LD нет места для скрытых ключевых слов: текст ответа обязан существовать на странице.
Проверяю разметку валидатором Schema.org и затем сверяю её вручную с экраном страницы. Валидный JSON не означает достоверный JSON.
У SPA есть неприятный разрыв между тем, что видит пользователь, и тем, что получает простой HTTP-краулер. Браузер скачивает оболочку, выполняет JavaScript и рисует приложение. Робот, который JS не исполняет, может получить `<div id="root"></div>` и ни одного полезного слова.
На nasloy.ru мы встретили именно это: исходный HTML ключевых маршрутов содержал 0 символов основного текста. Внутренний GEO/AEO-проверяющий инструмент зафиксировал проблему; стартовый AEO-балл был 36. После внедрения статических семантических снимков и переработки контента показатель вырос до 81. Цифра — диагностическая метрика инструмента, а не обещание позиции в поиске.
Технически проект использует `createRoot()`, а не `hydrateRoot()`. Для этой задачи это не недостаток. `hydrateRoot()` нужен, когда клиент должен «подхватить» HTML, созданный полноценным SSR, сохранив его DOM и состояние. В нашем случае сборочный скрипт создаёт статический снимок для каждого SEO-маршрута и помещает в `#root` H1, лид, H2, списки и FAQ из тех же данных, что использует интерфейс. Затем браузерный `createRoot().render()` заменяет временный снимок полноценным React-интерфейсом.
Упрощённая логика выглядит так:
Ключевой принцип — один источник данных. Снимок нельзя писать вручную отдельно от React-компонента: иначе текст для робота и человека разойдётся, а поддержка станет бесконечной. На Nasloy модуль данных собирается build-скриптом, а на выходе создаются отдельные HTML-энтрипойнты с собственными title, description и canonical.
Это компромисс, а не универсальная архитектура. Для личных кабинетов, сложной персонализации или большого каталога лучше выбрать SSR/SSG-фреймворк: Next.js, Nuxt, Astro либо серверный рендер текущего стека. Но для уже работающего SPA семантические snapshots — безопасный этап миграции: они дают сырому HTML содержание без немедленной переписи всего продукта.
После релиза не ограничивайтесь тем, что «страница открылась в браузере».
1. Откройте исходный код или получите HTML через `curl` и найдите H1 и первые абзацы.
2. Убедитесь, что `robots.txt`, `llms.txt`, sitemap и канонические URL отдают 200.
3. Проверьте `noindex`, заголовки `X-Robots-Tag`, 301-цепочки и ответ WAF.
4. Провалидируйте JSON-LD и сравните его с видимым текстом.
5. Запустите [GEO/AEO-аудит](/geo-ai-audit): он проверит сырой HTML, правила для роботов, llms.txt, метатеги, canonical и базовые AEO-сигналы.
Если нужно обсудить проект, а не просто получить автоматический балл, [свяжитесь с Nasloy Lab](/#contact). Я посмотрю, где находится настоящий узкий момент: доступ роботов, рендеринг, структура ответа или доверие к бренду.
Техническая настройка — первый слой. Чтобы сайт чаще становился источником, её нужно связать с приоритетными страницами услуг, экспертным контентом, кейсами, сущностями бренда и измерением контрольных запросов. Это входит в работу по [GEO-продвижению и AI SEO](/services/ai-seo-geo).
Перед внедрением также рекомендую пройти [чек-лист 20 признаков невидимости сайта для ChatGPT и Perplexity](/blog/priznaki-chto-sajt-nevidim-dlya-chatgpt-i-perplexity): он помогает не пропустить соседние проблемы, которые не исправляются одним robots.txt.