Ви питаєте в ChatGPT про свою компанію і отримуєте опис конкурента або три речення з профілю, який не оновлювали два роки. Сайт працює, в Google індексується, на ньому є ціни, відгуки і великий блок FAQ. Але бот дивиться на сторінку не так, як людина. Він забирає HTML-файл і на цьому зупиняється. Якщо ціни домальовуються після кліку по вкладці, а відповіді FAQ - після розкриття акордеона, для бота цього немає.
Це не проблема на майбутнє. Google запустив AI Mode у Польщі та польською 8 жовтня 2025 року, Senuto наводить цифру 24,17% польських запитів у Google з відповіддю від ШІ, а ChatGPT у Польщі користуються понад 10 мільйонів людей. Ahrefs на вибірці з 300 000 ключових слів порахував, що там, де показується AI Overview, CTR падає приблизно на 34,5%. Цифри польські, бо саме для Польщі їх порахували, але механіка однакова на будь-якому ринку. Цей бік я розбирав окремо в тексті про те, чому трафік із Google впав за тих самих позицій. Тут ідеться про шар нижче: чи є боту що читати взагалі.
Які боти справді читають ваш сайт
Стан на червень 2026 року: жоден із основних ШІ-краулерів не виконує JavaScript. Виняток - Google, бо Gemini та AI Mode користуються тією ж службою рендерингу, що й Googlebot.
| User-agent у логах | Власник | Виконує JavaScript | Навіщо приходить |
|---|---|---|---|
| GPTBot | OpenAI | ні | збирає дані для навчання моделей |
| OAI-SearchBot | OpenAI | ні | будує пошуковий індекс ChatGPT |
| ChatGPT-User | OpenAI | ні | забирає сторінку наживо, коли користувач поставив питання |
| ClaudeBot | Anthropic | ні | збирає дані для навчання |
| Claude-SearchBot | Anthropic | ні | пошук під конкретну відповідь |
| PerplexityBot | Perplexity | ні | індекс Perplexity |
| Meta-ExternalAgent | Meta | ні | обхід для систем Meta |
| Bytespider | ByteDance | ні | обхід для систем ByteDance |
| Googlebot (Gemini, AI Mode) | так | успадковує службу рендерингу Googlebot |
Ця таблиця має практичне застосування: це список рядків для grep по логах сервера. Перш ніж щось лагодити, варто з'ясувати, чи ці боти взагалі до вас приходять і на які адреси.
Чому бот завантажує файл JS і нічого з ним не робить
У дослідженні трафіку краулерів від Vercel є деталь, яка збиває з пантелику всіх, хто дивиться в логи: GPTBot завантажує файли JavaScript приблизно в 11,5% запитів, ClaudeBot - приблизно у 23,8%. Завантажує і нічого з ними не робить. Файл потрапляє в набір даних як текст, а не як код, який треба виконати.
Причина - вартість. Завантажити файл - це один HTTP-запит. Виконати його - це headless Chrome, рушій JS, очікування гідратації, таймаути і пам'ять. Google будував цей конвеєр роками, бо інакше половина інтернету виглядала б для нього порожньою. ШІ-краулери працюють у масштабі, де рендеринг кожної сторінки коштував би в рази дорожче за сам обхід, а для навчання моделі тексту з першої відповіді сервера зазвичай достатньо.
Звідси один жорсткий висновок: рахується лише те, що сервер віддав на перший запит. Усе, що браузер домальовує після гідратації, поза досяжністю.
Що зникає найчастіше
Нижче те, що я бачу в аудитах регулярно. Права колонка - буквально те, що лишається в HTML.
| Елемент сторінки | Типова реалізація | Що дістається боту |
|---|---|---|
| Прайс із перемикачем місяць/рік | стан компонента, суми з API | порожній контейнер, нуль цифр |
| FAQ в акордеоні, що монтується по кліку | UI-бібліотека, текст у JS | лише заголовки питань або нічого |
| Віджет відгуків Google чи Trustpilot | зовнішній скрипт, iframe | нічого |
Список послуг із CMS через useEffect | запит з боку клієнта | порожня секція |
| Каталог із фільтрами і клієнтським роутингом | SPA | один порожній <div id="root"> |
| Калькулятор вартості, конфігуратор | цілком на JS | заголовок і більше нічого |
Тут є важливий нюанс, який рятує чимало проєктів. Акордеон, зібраний на CSS або на тегу details, боту видно, бо текст лежить у HTML і лише візуально прихований. Ламається саме той акордеон, який монтує вміст по кліку. З вкладками так само: якщо всі панелі є в HTML, а перемикач тільки змінює клас, усе гаразд. Прибирати інтерактив не треба, треба перенести момент, у який з'являється текст.
Перевірка за десять хвилин без жодного SEO-інструмента
Три тести, порядок має значення.
1. Перегляд вихідного коду, а не DevTools. У браузері Ctrl+U, потім Ctrl+F і шукаєте конкретну суму з прайсу або першу фразу відповіді з FAQ. Вкладка Elements у DevTools для цього тесту не годиться: вона показує DOM уже після виконання скриптів. Це найчастіша помилка при самостійній перевірці.
2. curl з user-agent бота. Найближче до того, що бачить краулер:
curl -sA "GPTBot/1.2 (+https://openai.com/gptbot)" https://vashsayt.com/ceny > ceny.html
wc -c ceny.html
grep -c "1 500" ceny.html
Якщо файл важить два кілобайти, а grep по сумі повертає нуль, прайсу для ChatGPT не існує. Той самий тест проженіть по головній, по одній сторінці послуги і по одній статті блогу.
3. Вимкнений JavaScript. У налаштуваннях браузера блокуєте JS для свого домену і проходите шлях клієнта. Це показує не лише зниклий текст, а й навігацію, яка перестає працювати, бо посилання обробляються скриптом замість звичайного тегу a href.
І одна команда по логах, щоб розуміти, за кого ви взагалі боретеся:
grep -icE "GPTBot|OAI-SearchBot|ClaudeBot|PerplexityBot" access.log
SSR, SSG та ISR: чого реально вистачить
ШІ-ботам байдуже, яку техніку ви оберете. Важливо одне: чи є текст у відповіді сервера.
- SSG, генерація на етапі збірки. Для корпоративного сайту, оферти, прайсу і блогу це варіант за замовчуванням і найдешевший в обслуговуванні. HTML готовий, бот отримує все одразу, хостинг коштує копійки.
- ISR, регенерація за розкладом. Розумно, коли контент приходить із CMS і змінюється раз на кілька днів. Бот завжди отримує готовий HTML, а редактор не чекає на деплой.
- SSR на кожен запит. Потрібен для персоналізованого або швидкозмінного контенту, наприклад доступності слотів. Для ботів працює, але коштує часу відповіді, а ШІ-краулери тримають таймаути короткими.
- Рендеринг на боці клієнта. Лишіть його для особистого кабінету, кошика, чату і всього, що за авторизацією. Боти туди не потрапляють, оптимізувати нічого.
Правило, яким я користуюся: усе, що має потрапити в цитату ШІ-відповіді - суми, строки, визначення, умови - мусить виходити з сервера. Решта може бути інтерактивною скільки завгодно.
Видимий HTML проти JSON-LD
Звична реакція на такий аудит: «додамо schema і закриємо питання». Не закриєте.
Дані тут доволі однозначні. SE Ranking наводить, що приблизно 71% сторінок, які цитує ChatGPT, і приблизно 65% сторінок, які цитує Google AI Mode, містять структуровані дані. Але експеримент Ahrefs, де відстежували 1 885 сторінок після додавання JSON-LD, дав зміну цитованості на -4,6% для AI Overviews, +2,4% для AI Mode і +2,2% для ChatGPT. Усі ці значення статистично не відрізняються від нуля. Google прямо каже, що для AI Overviews і AI Mode жодної особливої розмітки не потрібно.
Висновок не в тому, щоб викинути JSON-LD. Розмітка - це інфраструктура: дешева, її варто мати, вона допомагає системам розуміти структуру. Але це не важіль і не заміна тексту у видимому HTML. Якщо сума 900 € лежить у JSON-LD, а на сторінці її малює JavaScript, модель отримує сигнал без контексту навколо.
З файлом llms.txt та сама історія. Ahrefs проаналізував 137 000 сайтів і виявив, що 97% файлів llms.txt у травні 2026 року не отримали жодного трафіку, а звернення за цією адресою статистично незначущі в даних про трафік ботів. Google публічно каже, що формат не підтримує і не планує. Файл коштує п'ять хвилин, хай лежить, але на проблему з цієї статті він не відповідає.
Виправлення по фреймворках: Next.js, Nuxt, Astro
Next.js, App Router. За замовчуванням компоненти серверні, і все добре рівно до моменту, коли хтось ставить 'use client' на початок цілої сторінки: інтерактивним стає все піддерево. Три речі для перевірки: dynamic(..., { ssr: false }) навколо компонентів із текстом, завантаження даних у useEffect замість сервера і UI-бібліотеки, які монтують панелі вкладок тільки після взаємодії. Цільовий шаблон: дані забирає серверний компонент і передає їх пропсами у маленький клієнтський шматок, що відповідає лише за кліки.
Nuxt 3. Перевірте, що ssr не виставлено в false у конфігу: один цей прапорець перетворює проєкт на SPA. Дані забирайте через useFetch або useAsyncData, а не в onMounted. Кожен <ClientOnly> вважайте оголошенням «цього тексту бот не побачить» і лишайте всередині тільки віджети.
Astro. Тут за замовчуванням усе добре, бо в браузер не їде жодного рядка JS. Стежте за двома речами: директива client:only повністю пропускає серверний рендер, а острови можуть тягнути дані з API на клієнті.
Окрема категорія - сайти на WordPress, Webflow і Tilda. Там HTML зазвичай повний і цієї проблеми немає, варто лише перевірити віджети відгуків і секції, додані плагінами. Якщо ви тільки плануєте розробку сайту, питання про рендеринг треба поставити підряднику до підписання договору, разом з рештою пунктів із тексту про те, як вибрати розробника сайту.
Коли це марна трата часу
Чесно: переписувати сайт на SSR не завжди пріоритет.
Немає сенсу, якщо ваш HTML уже містить текст, а проблема в іншому місці. У дослідженні 278 B2B-промптів від липня 2026 року (position.digital) 66% рекомендацій брендів пройшли взагалі без цитування сайту цього бренду - модель радила компанії за згадками в чужих добірках і обговореннях. Там само медіанний вік сторінки, яку цитує ChatGPT, - 3,9 місяця. Якщо HTML коректний, але про вас ніде не пишуть, а остання публікація була два роки тому, рендеринг нічого не змінить.
Немає сенсу й тоді, коли сайт за авторизацією, це внутрішній інструмент або ви свідомо закриваєте ШІ-ботів у robots.txt. І немає сенсу, коли в сайту п'ятдесят візитів на місяць: тоді ви лагодите дистрибуцію тексту, якого ніхто не шукає.
Натомість виправити це дешево, якщо проєкт на Next.js, Nuxt або Astro. Зазвичай це один робочий день: перенести завантаження даних на сервер, прибрати два-три ssr: false і перебрати акордеон так, щоб текст лежав у HTML, а скрипт лише розкривав його.
Що з цим робити
Почніть із тесту через curl. Він займає десять хвилин і відповідає на єдине важливе питання: чи є у вас ця проблема. Якщо виявиться, що прайсу і FAQ у HTML немає, у вас з'явиться конкретний і обмежений список задач для себе або для підрядника.
Якщо зручніше, щоб це пройшов хтось інший, я роблю аудит видимості в ШІ-пошуку від 900 € (3 900 zł): проходжу сайт під user-agent різних ботів, показую, що саме зникає, дивлюся в логах, які боти приходять і куди, і віддаю список правок, відсортований за вартістю впровадження. Якщо треба просто зрозуміти, чи це ваш випадок, напишіть і дайте адресу сайту - відповідь рівня «проблема є / проблеми немає» займає в мене кілька хвилин. Для нещодавно запущеного сайту це варто поєднати зі списком із тексту про перші 90 днів після запуску, бо обидві задачі робляться в один тиждень.
FAQ
Чи виконують ШІ-краулери JavaScript? Ні. На червень 2026 року жоден із основних ШІ-краулерів - GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-SearchBot, PerplexityBot, Meta-ExternalAgent і Bytespider - не запускає JavaScript. Вони читають лише той HTML, який сервер повернув на перший запит. Єдиний виняток - Google: Gemini і AI Mode користуються службою рендерингу Googlebot і бачать сторінку після виконання скриптів.
GPTBot завантажує мої файли JavaScript, отже, він їх читає? Завантажує, але не виконує. Дослідження трафіку краулерів від Vercel показало, що GPTBot забирає файли JS приблизно в 11,5% запитів, а ClaudeBot - приблизно у 23,8%. Файл потрапляє в набір даних як вихідний текст, а не як код, що будує сторінку. Контент, який мав створити цей код, не з'являється взагалі.
Як перевірити, що бот бачить на моєму сайті?
Найпростіше відкрити вихідний код сторінки поєднанням Ctrl+U і пошукати в ньому конкретну суму з прайсу або фразу з FAQ. Вкладка Elements у DevTools для цього не підходить, бо показує сторінку вже після виконання скриптів. Точніший варіант - curl -sA "GPTBot/1.2" https://vashsayt.com/ceny і пошук по виводу. Третій тест: вимкнути JavaScript у браузері і пройти шлях клієнта.
Чи вирішить проблему JSON-LD і розмітка schema? Ні. Експеримент Ahrefs на 1 885 сторінках, яким додали JSON-LD, дав зміну цитованості на -4,6% в AI Overviews, +2,4% в AI Mode і +2,2% у ChatGPT, тобто значення, що статистично не відрізняються від нуля. Google прямо каже, що для AI Overviews і AI Mode спеціальна розмітка не потрібна. Структуровані дані варто мати як інфраструктуру, але текст у видимому HTML вони не замінюють.
Чи треба переписувати весь сайт на SSR? Зазвичай ні. Достатньо, щоб із сервера виходив той контент, який має потрапляти в цитати: суми, умови, відповіді FAQ, описи послуг. Інтерактивні частини на кшталт кошика, чату й особистого кабінету можуть лишитися на клієнті, боти туди все одно не заходять. На проєкті під Next.js, Nuxt або Astro правка зазвичай займає один робочий день, а не тижні перебудови.
Чи треба прибирати вкладки й акордеони?
Ні, змінюється лише момент появи тексту. Акордеон на CSS або на тегу details ботам видно, бо текст лежить у HTML і тільки візуально прихований. Проблема стосується лише компонентів, які монтують вміст після кліку користувача. З вкладками те саме правило: відмальовуйте всі панелі, а скриптом перемикайте видимість.
Чи допомагає файл llms.txt ботам зрозуміти сайт? На практиці ні. Ahrefs проаналізував 137 000 сайтів і з'ясував, що 97% файлів llms.txt у травні 2026 року не отримали жодного трафіку, а звернення за цією адресою статистично незначущі в даних про трафік ботів. Google публічно каже, що формат не підтримує і не планує. Файл можна додати, він коштує кілька хвилин, але контент у HTML він не замінює.
Скільки коштує виправлення і з чого почати?
Почніть із безкоштовного тесту: curl з user-agent бота по трьох найважливіших адресах. Якщо текст є в HTML, цієї проблеми у вас немає. Якщо немає, правка на проєкті під Next.js, Nuxt або Astro - це зазвичай один день роботи розробника. Повний аудит видимості в ШІ-пошуку, з обходом сайту під user-agent ботів, розбором логів і впорядкованим списком правок, я роблю від 900 € (3 900 zł).




