# Почему ChatGPT не видит текст сайта: проверка HTML вместо браузера

Разбираю три причины, почему текст не попадает в ответы ИИ: блокировка ботов, клиентский рендеринг и неверная структура. Даю команды curl для проверки и рабочие настройки SSR.

Автор: Артём Руднев

Рубрика: Разработка

Опубликовано: 2026-10-17T16:07:44.761Z

Обновлено: 2026-10-17T16:21:07.560Z

Канонический URL: https://recipenest.ru/article/razrabotka/pochemu-chatgpt-ne-vidit-tekst-sayta-proverka-html-vmesto-brauzera

Открываете страницу в Chrome, текст читается. Открываете исходный код через Ctrl+U или запрашиваете её curl -A "GPTBot" и видите пустой div с id="root". Для ChatGPT, Claude и Perplexity этот контент не существует, пока JavaScript не выполнится в браузере. Проверка занимает 2 минуты.

## Почему браузер показывает текст, а поисковый бот получает пустой каркас?

Большинство AI-краулеров, включая GPTBot и ClaudeBot, используют упрощённые HTTP-клиенты без выполнения JavaScript. Они парсят HTML-ответ сервера как есть. Если сайт собран на React, Vue или Angular с клиентским рендерингом (CSR), сервер отдаёт только оболочку и ссылку на bundle.js. В исходном коде такой страницы нет ни заголовков, ни текста, ни цен.

Сравнение типов рендеринга:

| Тип | Что получает бот | Стоимость внедрения | Когда использовать |
|-----|------------------|---------------------|-------------------|
| CSR | Пустой каркас, текст только после JS | Низкая, ничего менять не надо | Только если не нужна индексация ИИ |
| SSR | Готовый HTML с текстом | Средняя, нужен серверный рендеринг | Динамические страницы: каталоги, блоги |
| SSG | Готовый HTML заранее | Низкая, генерируется при сборке | Статичные страницы, документация |
| Пререндеринг | Снимок HTML через headless-браузер | Средняя, настраивается отдельно | Точечно для критичных URL |

Источник: Rush Agency, 3 сентября 2026.

Запустите проверку для своей страницы:

```bash
curl -A "Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)" -s https://yourdomain.com/page/ | head -50
```

Если в выводе только `<div id="root"></div>` и подключение скриптов, причина найдена.

## Какие боты ходят на сайт и как понять, что их блокирует WAF или robots.txt

robots.txt может явно запрещать GPTBot, ClaudeBot, PerplexityBot. Частая причина: после обновления CMS в файл попадают директивы Disallow для новых агентов. Проверьте:

```
User-agent: GPTBot
Disallow: /
```

Эта директива закрывает сайт для OpenAI. Аналогично для ClaudeBot и PerplexityBot.

Серверный WAF и защита от ботов иногда отдают 403 или капчу по user-agent, даже если robots.txt открыт. В логах запросы от этих ботов отсутствуют, хотя трафик с других источников есть.

Скрипт сравнивает ответ сервера для браузера и трёх ботов:

```bash
for UA in "Mozilla/5.0" "GPTBot/1.0" "ClaudeBot/1.0" "PerplexityBot/1.0"; do
 CODE=$(curl -s -o body.html -w "%{http_code}" -A "$UA" "https://example.com/page/")
 SIZE=$(wc -c < body.html)
 HAS=$(grep -c "Ключевой текст" body.html)
 echo "$UA код $CODE, $SIZE байт, фрагмент: $HAS"
done
```

Если у браузерного user-agent код 200, а у ботов 403, блокирует WAF. Если коды одинаковые, но размер HTML меньше 5 КБ и фрагмент не найден, рендеринг не включён.

## Что делать, если сайт на React, Vue или Angular: точечный SSR или пререндеринг

Полный переезд на другой стек не обязателен. Достаточно обеспечить серверный рендеринг для страниц, которые должны цитироваться: цены, контакты, составы услуг, ключевые абзацы описаний. Остальные страницы могут подгружаться скриптами.

Для Next.js добавьте в страницу:

```js
export async function getServerSideProps() {
 const res = await fetch('https://api.example.com/data')
 const data = await res.json()
 return { props: { data } }
}
```

После этого HTML будет содержать текст и данные. Для Vue используйте Nuxt с универсальным режимом или prerender для статичных маршрутов. Для Angular настройте Angular/ssr.

### Пререндеринг только критичных страниц: цены, контакты, описания услуг

Если полный SSR нецелесообразен, можно настроить пререндеринг через headless-браузер: он сохраняет HTML-снимок страницы после выполнения JS и отдаёт его ботам по user-agent. При этом бот получает тот же контент, что и человек, без выполнения скриптов. Важно не допускать клоакинга: содержание для бота и человека должно совпадать.

## Почему сайт индексируется в Google, но не попадает в ответы ChatGPT: три разных канала

Google давно рендерит JavaScript при индексации. AI-краулеры часто не ждут выполнения скриптов. Это разные каналы: Google Search Console показывает индексацию Google, но не гарантирует видимость для ChatGPT.

По данным RESONEO на сентябрь 2026, ChatGPT открывает страницу только в 7% быстрых ответов, в остальных 93% использует сниппет из индекса или внешних источников. Сниппет берётся из текста страницы, а не из meta description, который игнорируется в одном случае из трёх.

Кроме того, JSON-LD разметка вырезается при передаче в модель, alt-текст картинок сохраняется. Жёсткий лимит страницы 4 МБ, превышение даёт HTTP 400.

## Как убедиться, что починка сработала: повторный curl и серверные логи

После включения SSR повторно запустите проверку с user-agent бота. Сравните размер HTML до и после, поищите контрольные фрагменты. В серверных логах по каждому AI-агенту смотрите коды ответов, размер тела и время ответа: рост среднего размера тела показывает, что изменения доехали до продакшена.

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

## Типичные ошибки при проверке и что сделать завтра утром

- Проверять сайт глазами в браузере: браузер показывает результат скриптов, бот его не увидит. Нужен просмотр исходного кода или curl.
- Считать, что раз сайт в индексе Google, его видят все ИИ: индекс лишь один из трёх путей.
- Переписывать фронтенд, не проверив коды ответа: при 403 никакой SSR не поможет.
- Закрывать задачу после включения SSR: гидрация, потоковая отдача и кэш на периметре могут оставлять бота с каркасом.
- Забыть про окно неактуальности: человеку цену дорисовывает скрипт, а бот цитирует застывшую в HTML прошлую сборку.

Завтра утром откройте исходный код трёх ключевых страниц и поищите цену, ответ на частый вопрос и пункты меню. Пятнадцать минут без бюджета.

## FAQ

### Достаточно ли того, что сайт хорошо индексируется в Google?

Нет. Google рендерит JavaScript, AI-краулеры часто нет, поэтому индексация не гарантирует видимость в ChatGPT, Claude или Perplexity.

### Нужно ли переписывать весь сайт на SSR, если он на React?

Не обязательно. Можно точечно включить SSR или пререндеринг для критичных страниц: цены, контакты, описания услуг.

### Как проверить, что именно видит GPTBot на моей странице?

Выполните curl с user-agent GPTBot и посмотрите, есть ли в HTML ключевой текст. Если только div id=root, бот не видит контент.

### Что делать, если WAF блокирует AI-ботов?

Настроить правила для user-agent GPTBot, ClaudeBot, PerplexityBot, разрешив им доступ без капчи и 403.

### Почему llms.txt не помогает, если сайт на CSR?

llms.txt указывает на страницы, но если сами страницы отдают пустой HTML, краулер не получит текст. Сначала нужен серверный рендеринг.

### Через сколько обновляется кэш ChatGPT после изменения страницы?

Около 30 минут хранится копия, далее фон обновляет. Может быть задержка до нескольких дней для повторного обхода.

## Источники
- [JS-слепота AI-краулеров: что боты видят на сайте](https://seotika.ru/js-slepota-ai-kraulerov)
- [Оптимизация сайта под нейросети](https://habr.com/ru/companies/timeweb/articles/1092172)
- [Рендеринг и JavaScript: видят ли ИИ-боты ваш сайт](https://www.rush-agency.ru/blog/kak-proverit-chto-ii-boty-vidyat-vash-sajt)
- [ChatGPT не открывает страницу в 93% быстрых ответов](https://habr.com/ru/articles/1082232)
- [Почему ChatGPT не видит ваш сайт: разбор причин](https://aksanov.digital/blog/seo-i-geo/pochemu-ai-ne-vidit-sayt)
- [Почему AI-краулеры не рендерят JavaScript и как это проверить](https://www.oweb-solutions.ru/articles/ai-kraulery-ne-renderiat-js-chto-delat-saitam-react-vue-angular)