Рендеринг JS
Содержание
Зачем: у JS-сайтов то, что видит краулер без JavaScript, отличается от того, что видит посетитель. Страницу открывает собственный браузерный воркер (v144, бесплатно, см. руководство «Собственный браузерный воркер») или облачный сервис; PHP браузер сам не запускает.
Сервисы
- Browserless —
POST {регион}.browserless.io/content?token=…, тело{"url": …}; регионы sfo / lon / ams. - ScrapingBee —
GET app.scrapingbee.com/api/v1/?api_key=…&url=…&render_js=true.
Ключ хранится зашифрованным; проверка ключа — при первой проверке страницы (она платная).
Что сравнивается
Исходный HTML (скачивается самим SEOMaster через защищённый загрузчик) и итоговый HTML от сервиса: title, description, canonical, noindex, H1, число слов (без скриптов и noscript), ссылки (всего и внутренние), изображения, JSON-LD. Находки: «текст только после JS» (мало слов в исходном и много после), ссылки только после JS, noindex/canonical, появляющиеся или меняющиеся JS. «Зависимость от JS» = доля текста, которой нет в исходном HTML.
Ошибки прямо на странице (v121)
Проверка в браузере (probe.js) возвращает не только цифры, но и координаты проблемных элементов и сжатый JPEG-снимок верхней части страницы (до 3000 px телефон / 2200 px компьютер). Render\Marks::build превращает метки в рамки в процентах от снимка и склеивает проблемы одного элемента в одну рамку.
Что подсвечивается: мелкий текст (меньше 12 px), мелкие и слишком тесные зоны нажатия, окна поверх страницы (закрепляют от 20% экрана, а cookie/popup — от 8%), заголовки (нет H1, несколько H1, пропущенный уровень, пустой заголовок), картинки (медленные: от 1 с или 250 КБ, тяжелее нужного, без width/height, lazy на первом экране, без alt), главный элемент LCP и «прыгающие» блоки CLS.
По нажатию на рамку — что не так, как исправить и ссылка на пошаговое руководство /fix/… (где оно есть). Фильтр по типам, листание ‹ ›. Без JavaScript проблемы видны списком под картинкой. Проблемы без места (нет H1, пустой заголовок без размера, элементы ниже снимка) — в отдельном списке.
Снимок хранится в таблице rx_shot (base64, последние 30 на пользователя), отдаётся только владельцу по /render/shot/{id}; при удалении аккаунта удаляется.
Метки от одной проверки не пересчитываются: если страница изменилась, нужна новая платная проверка.
Источники и выбор по стоимости (v144)
Источники: встроенный воркер (SEOMASTER_RENDER_WORKER_URL, бесплатно) и платный сервис пользователя. SEOMaster идёт от дешёвого к дорогому, пропускает недоступные (пауза, лимит, бюджет) и при сбое самого источника переходит к следующему; ошибка страницы повторно не проверяется. Режим выбирается на странице: автоматически, только воркер, только платный. Подробности — в руководстве «Собственный браузерный воркер и выбор источника по стоимости».
Лимиты
render_daily_limit (20) платных проверок и render_worker_daily (100) проверок встроенного воркера на пользователя в сутки (учёт по источникам — таблица rn_use); хранятся только итоги сравнения (200 последних), страницы не сохраняются.
Ограничения
Форматы Browserless и ScrapingBee проверены только на подставных ответах; сам скрипт probe.js со снимком и метками проверен в настоящем Chromium на тестовой странице, но не на живом аккаунте Browserless. Страницы, закрытые авторизацией, не проверяются; «после JS» зависит от ожидания загрузки на стороне сервиса.