Глазами робота
Большинство ботов никогда не отрисовывают вашу страницу. Они берут HTML, который отдаёт сервер, забирают слова и уходят. Эта проверка показывает эти слова в том порядке, в каком их встречает бот, и отмечает, чего не хватает.
У каждой страницы две копии
Первая копия: HTML-документ, который уходит с вашего сервера. Вторая: то, что браузер строит из него, загрузив таблицы стилей, выполнив скрипты и получив всё, что эти скрипты запрашивают. Люди видят только вторую копию.
Боты в основном работают с первой. Googlebot действительно отрисовывает страницы в Chrome без интерфейса, но на отдельном, более позднем этапе, который может запаздывать и обрываться по тайм-ауту. Bingbot отрисовывает меньше. Роботы, которые собирают данные для ИИ-ассистентов, и сборщики превью в мессенджерах и соцсетях, как правило, вообще не выполняют JavaScript. Если ваш текст есть только во второй копии, значительная часть вашей машинной аудитории получает пустую страницу.
Эта проверка запрашивает первую копию и на этом останавливается. Ничего не выполняется, никакие стили не применяются.
Как читать текстовый вид
Мы проходим тело страницы в порядке исходного кода и выводим его как текст. Скрипты, стили, шаблоны и встроенные SVG-рисунки пропускаются. Остальное помечено так:
#,##,###- Заголовок и его уровень. Попробуйте прочитать только эти строки. Они должны работать как оглавление страницы.
- Подчёркнутые слова
- Ссылка. Наведите на неё курсор, чтобы увидеть адрес, куда она ведёт.
[Image: …]- Текст
altизображения. Изображение без атрибутаaltпоказано как отсутствующее, с именем файла. Кнопки и поля форм так же выводятся в скобках. - Текст, помеченный как скрытый
- Слова, которые есть в HTML, но имеют атрибут
hiddenили встроенный стиль вродеdisplay:none,visibility:hidden,font-size:0или большой отрицательныйtext-indent. - Текст, помеченный noscript
- Содержимое внутри
<noscript>, которое получают только боты и посетители без JavaScript.
Под текстом приведены цифры: размер HTML, число видимых слов, доля текста в HTML, скрипты, ссылки и изображения. Доля текста от 10 до 30% типична для страницы, сделанной вручную или на CMS. При 1 или 2% документ состоит в основном из кода.
Что вызывает каждую находку
| Находка | Применяемое правило |
|---|---|
| Содержимое только после JavaScript | Меньше 60 видимых слов вместе с одним из признаков: пустой контейнер приложения (#root, #app, #__next, #__nuxt, app-root и подобные), три или больше внешних скриптов, больше 50 KB встроенного скрипта или больше 150 KB в основных файлах скриптов. |
| Очень мало текста | Меньше 150 видимых слов. |
| Страница просит не индексировать её | noindex или none в метатеге robots или заголовке X-Robots-Tag. |
| Google не допущен | Путь страницы попадает под правило Disallow для Googlebot в robots.txt. |
| Скрытого текста больше, чем видимого | Скрытых слов больше, чем видимых, при минимуме 80. |
| Ссылки, по которым боты не могут пройти | href="#", href="javascript:…" или onclick без href. |
| Нет заголовка первого уровня, изображения без alt | Подсчитывается прямо в HTML. |
Последний блок применяет ваш robots.txt к этому адресу для десяти роботов: Googlebot, Bingbot, Google-Extended, GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot, PerplexityBot, CCBot и Applebot-Extended. Блокировка Googlebot считается ошибкой. Блокировка ИИ-робота просто отмечается: это ваш законный выбор. Проверка доступа ИИ-ботов охватывает более длинный список для всего сайта.
Как поместить текст в первую копию
Если проверка нашла пустой контейнер, страница является клиентским приложением. Сервер отдаёт оболочку, а браузер её заполняет. Вот способы исправить это, от самого основательного к наименее:
- Рендеринг на сервере. Next.js, Nuxt, SvelteKit, Remix и Angular умеют выдавать полный HTML на каждый запрос и потом подключать к нему скрипты. Обычно это вопрос настройки, а не переписывания.
- Генерация статических страниц при сборке. Для редко меняющегося содержимого такие инструменты, как Astro, Gatsby или статический экспорт упомянутых фреймворков, создают полный HTML-файл для каждой страницы.
- Пререндеринг для ботов. Сервис пререндеринга хранит отрисованный снимок и отдаёт его роботам. Это работает, но теперь вам нужно следить за двумя версиями.
В классической CMS вроде WordPress или Drupal текст уже есть в HTML, и находки мельче: цена, показанная только на картинке, меню, ссылки которого являются обработчиками onclick, или номер телефона на баннере с пустым alt.
Скрытый текст определяется только по атрибуту hidden и встроенным стилям. Текст, скрытый классом во внешней таблице стилей, здесь считается видимым, потому что мы не загружаем таблицы стилей. Свёрнутые меню, вкладки и аккордеоны это норма, и поисковые системы за них не наказывают.
Частые вопросы
Выполняет ли Google JavaScript при обходе страницы?
Да, но вторым шагом. Сначала Google индексирует скачанный HTML, затем ставит страницу в очередь на отрисовку в Chrome без интерфейса. Этот шаг может наступить позже, и он может не дождаться медленных скриптов или содержимого, которое подгружается при прокрутке или клике.
Выполняют ли JavaScript роботы ChatGPT, Claude и Perplexity?
Как правило, нет. GPTBot, ClaudeBot, PerplexityBot и CCBot скачивают HTML и читают его текст. Страница, которой нужны скрипты, чтобы показать содержимое, даёт им мало или ничего.
Вредит ли скрытый текст SEO?
Нет, если он часть интерфейса. Меню, вкладки, аккордеоны и диалоги индексируются нормально. Спамом поисковые системы считают текст, намеренно скрытый от посетителей ради ключевых слов, например белый текст на белом фоне.
Какое соотношение текста и HTML считается хорошим?
Целевого значения нет, и это не фактор ранжирования. Аккуратно сделанные страницы часто укладываются в 10–30%. Очень низкая цифра лишь намекает, что для такого объёма содержимого в документе много разметки или встроенных скриптов.
Почему для моего сайта вид почти пустой?
Ваш сервер отдаёт оболочку приложения, а содержимое добавляется в браузере. Откройте исходный код страницы (Ctrl+U или Cmd+Option+U) и найдите фразу со своей страницы. Если её там нет, боты, которые пропускают JavaScript, её тоже не видят.