Логотип seo-prodvizhenie-biznesa.ru
+7 (921) 333-77-45

RocketScript и Rocket Loade

RocketScript и Rocket Loade
Анатолий Кузнецов
Анатолий Кузнецов
SEO-оптимизатор с 20-летним стажем. Автор блога seo-prodvizhenie-biznesa.ru о продвижении и доработке сайтов.

RocketScript и Rocket Loader — два имени одной технологии Cloudflare, которая обещает ускорить сайт переключением одной галочки и иногда действительно ускоряет, а иногда молча ломает форму заявки. Первое имя осталось в прошлом: так называлась ранняя реализация, помечавшая скрипты собственным типом. Второе живо и сегодня — Rocket Loader по-прежнему доступен на всех тарифах Cloudflare, включая бесплатный, и по-прежнему выключен по умолчанию. Это важная деталь: соседнюю функцию автоматического сжатия кода Cloudflare отключила окончательно ещё в августе 2024 года, а Rocket Loader оставила. Значит, смысл в ней есть — вопрос в том, при каких условиях.

В SEO я с 2005 года и сталкиваюсь с этой галочкой регулярно, обычно в одном сценарии: владелец включил её полгода назад, забыл, а потом полдня ищет, почему на сайте перестал открываться калькулятор. Ниже — как работает отложенное выполнение скриптов на самом деле, что оно даёт по метрикам, где ломается, как исключить нужный код из обработки и чем эту механику заменить штатными средствами браузера.

Откуда взялись оба названия

Rocket Loader — одна из самых старых функций Cloudflare, она появилась задолго до нынешних показателей скорости. В ранней версии сервис переписывал теги скриптов, подменяя их тип на собственный, из-за чего браузер переставал воспринимать их как исполняемый код, а дальше загрузчик Cloudflare забирал их и запускал сам после отрисовки страницы. Именно этот нестандартный тип и дал разговорное имя «рокетскрипт», которое до сих пор встречается в старых инструкциях и на форумах.

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

Практический вывод из истории такой: если вы читаете инструкцию, где фигурирует слово RocketScript, она написана давно, и детали в ней могли устареть. Актуальное имя настройки — Rocket Loader, живёт она в разделе оптимизации содержимого панели Cloudflare.

Почему скрипты вообще тормозят страницу

Чтобы понимать, что именно чинит эта функция, нужно помнить, как браузер строит страницу. Он читает разметку сверху вниз и на каждом обычном теге скрипта без дополнительных атрибутов обязан остановиться: скачать файл, разобрать, выполнить и только потом продолжить чтение документа. Это называют блокирующим ресурсом.

Дальше арифметика. Виджет чата, две системы аналитики, рекламный пиксель, слайдер, карта, библиотека для всплывающих окон — и у вас в шапке страницы восемь-десять остановок подряд, каждая с обращением к чужому серверу. Пока они отрабатывают, посетитель смотрит на пустой экран, хотя текст и картинки давно скачаны.

Это бьёт по трём вещам сразу. Момент отрисовки основного содержимого отодвигается — страдает LCP. Основной поток браузера занят выполнением кода — страдает отзывчивость, то есть INP. И когда всё это наконец отрабатывает и начинает вставлять на страницу свои блоки, вёрстка прыгает — страдает CLS. Отсюда и родилась идея отложить весь JavaScript на после отрисовки.

Что Rocket Loader делает технически

  1. Cloudflare на лету изменяет разметку страницы, проходящей через его сеть, и помечает найденные скрипты как неисполняемые для браузера.
  2. В документ добавляется небольшой файл загрузчика, который отдаётся с инфраструктуры Cloudflare.
  3. Браузер строит и показывает страницу, не отвлекаясь на скрипты, — контент появляется раньше.
  4. После отрисовки загрузчик запускает отложенный код, сохраняя исходную последовательность выполнения.
  5. Обрабатываются и внешние файлы, и код, написанный прямо в разметке страницы.

Ключевая особенность — на исходный код сайта это не влияет никак. Изменения происходят по дороге к посетителю, в самом сайте всё остаётся как было. Именно поэтому функцию так любят владельцы, у которых нет доступа к вёрстке или разработчика под рукой. И именно поэтому она даёт неожиданные эффекты: автоматика ничего не знает про логику конкретного сайта и одинаково обращается со счётчиком посещаемости и с кодом, от которого зависит работа корзины.

Подробнее об этом — в статье «Всплывающее окно на весь экран: Яндекс за него понижает, а вы теряете людей».

Что улучшается и что портится

Показатель Влияние Почему так
Первая отрисовка содержимого Улучшается заметно Браузер больше не останавливается на блокирующих скриптах
LCP Обычно улучшается Основной элемент экрана рисуется раньше, если он не зависит от скрипта
Время до готовности к работе Улучшается Разбор документа завершается быстрее
INP и отзывчивость Может ухудшиться Весь отложенный код запускается пачкой после отрисовки и надолго занимает основной поток
CLS Может ухудшиться Блоки, которые вставляет скрипт, появляются позже и сдвигают готовую вёрстку
Число внешних соединений Добавляется одно Подключается файл загрузчика с чужого домена
Валидность разметки Формально нарушается Используются нестандартные атрибуты; на посетителей это не влияет

Из таблицы видно главное недоразумение вокруг этой функции. Она честно улучшает то, что относится к скорости появления картинки, и при этом способна ухудшить то, что относится к отзывчивости. Владелец видит рост оценки в измерителе скорости и считает задачу решённой, а живой посетитель по-прежнему тычет в кнопку, которая полсекунды не реагирует. Поэтому проверять результат нужно не только по общему баллу, а по трём пользовательским показателям отдельно и обязательно на мобильных.

Из чего складывается продвижение сайта и как оно работает:

Где это ломается

Симптомы поломки узнаваемые, и почти все связаны с тем, что код, ожидающий определённого момента, получает управление позже, чем рассчитывал.

Симптом Причина Решение
Форма отправляется вхолостую или не отправляется Обработчик формы не успел подключиться к моменту нажатия Исключить скрипт формы из обработки
Ошибка о неизвестной переменной или библиотеке Код, написанный в разметке, выполнился раньше библиотеки или наоборот Исключить и библиотеку, и зависящий от неё код
Слайдер или меню появляются рывком Оформление применяется скриптом уже после показа страницы Исключить или перенести начальные стили в таблицу стилей
Занижаются данные посещаемости Счётчик запускается позже, часть быстрых уходов не фиксируется Исключить счётчики аналитики из обработки
Не работает виджет оплаты или подтверждения Сторонний код требует строго синхронного запуска Исключить обязательно, такие скрипты откладывать нельзя
Скрипты не запускаются при строгой политике безопасности Домен загрузчика не разрешён в заголовке политики Добавить домен Cloudflare в разрешённые источники
Предупреждение об устаревших методах в измерителе Сам файл загрузчика использует старые вызовы браузера Отдельно не чинится, это код на стороне сервиса

Последняя строка стоит отдельного пояснения, потому что вопрос про неё задают часто. Измеритель скорости иногда сообщает, что страница использует устаревшие возможности браузера, и указывает на файл загрузчика. Это предупреждение, а не ошибка: на работу сайта и на позиции оно не влияет, повлиять на него со своей стороны нельзя, а единственный способ убрать его из отчёта — отключить функцию.

Как исключить нужный скрипт

Полное отключение — не единственный вариант. Cloudflare предусмотрел способ пометить отдельные скрипты как неприкосновенные: к тегу добавляется атрибут data-cfasync="false", и такой скрипт остаётся обычным блокирующим, каким был.

  • Атрибут ставится на сам тег скрипта — и на внешний файл, и на код, написанный прямо в разметке.
  • Помечать нужно всю цепочку: если библиотека исключена, а зависящий от неё код нет, поломка останется, только выглядеть будет иначе.
  • Помеченный скрипт лучше размещать раньше остальных, чтобы порядок выполнения был предсказуемым.
  • Для сторонних виджетов, вставляемых через настройки движка сайта, атрибут добавляется в том поле, куда вставлялся код виджета.
  • После каждой пометки сайт проверяется заново, а не после всех сразу: так понятно, какая правка что починила.

Список кандидатов на исключение почти всегда один и тот же: код форм и обратных звонков, платёжные виджеты, счётчики аналитики, всё, что участвует в оформлении заказа, и любые скрипты, от которых зависит внешний вид первого экрана.

Влияние на индексацию

Вопрос, который волнует больше всего: не выпадет ли сайт из поиска, если весь JavaScript откладывается. Разбирать его надо по частям.

Тему разбирал отдельно: «Хлебные крошки — это не украшение, а карта сайта для робота Яндекса».

Текст, заголовки, ссылки и разметка, которые уже присутствуют в исходном коде страницы, доступны поисковому роботу сразу и от этой функции не зависят вообще. Для обычного сайта, где содержимое отдаётся сервером, риска нет.

Риск появляется там, где содержимое создаёт сам JavaScript: подгружаемые списки товаров, отзывы, характеристики во вкладках, разметка данных, вставляемая скриптом. Поисковый робот Google умеет выполнять код страницы, но делает это отдельным проходом и с задержкой. Робот Яндекса в этом отношении устроен скромнее, поэтому содержимое, существующее только после выполнения скрипта, у него индексируется хуже. Отложенное выполнение само по себе ситуацию не создаёт, но усугубляет уже имеющуюся проблему.

Есть и второй, более коварный путь. Если функция сломала скрипт, который выводил блок с ценами или характеристиками, робот увидит страницу без этого блока — то есть страница станет беднее не только для человека, но и для поиска. Именно поэтому после включения стоит проверить несколько типовых страниц инструментом просмотра глазами робота в панелях вебмастера, а не ограничиваться визуальным осмотром в своём браузере.

Штатные способы отложить скрипты

Rocket Loader — не единственный и не лучший инструмент. Он хорош тем, что не требует правки кода, и плох тем же самым: решение принимается автоматикой без понимания вашего сайта. Если доступ к вёрстке есть, работают более точные средства.

Способ Как ведёт себя Для чего подходит
Атрибут defer Файл скачивается параллельно разбору, выполняется после него, порядок сохраняется Собственные скрипты сайта — самый безопасный вариант по умолчанию
Атрибут async Скачивается параллельно, выполняется сразу по готовности, порядок не гарантирован Независимые счётчики и пиксели, не связанные с другим кодом
Запуск по действию Код подгружается при прокрутке, наведении или нажатии Чат, карта, видео, всплывающие окна — то, что нужно не всем посетителям
Заглушка вместо виджета Показывается лёгкая картинка-имитация, настоящий виджет грузится по нажатию Карты и видеоплееры, которые весят больше всей остальной страницы
Удаление лишнего Скрипт просто убирается Забытые счётчики, дубли аналитики, пиксели остановленных кампаний

Если нужна помощь по теме — аудит сайта онлайн.

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

Кому включать, а кому не стоит

Решение зависит от того, кто и как обслуживает сайт.

Смежный материал по теме — «Как заблокировать накрутку поведенческих через .htaccess: реальный кейс, 6 подсетей и −95% ботов за час».

  • Стоит попробовать: простой сайт-визитка или блог на типовом движке, где страницы отдаёт сервер, интерактива мало, а доступа к вёрстке у владельца нет.
  • Стоит попробовать с осторожностью: сайт услуг с формами и виджетами — включаем, помечаем формы и платёжные виджеты исключениями, проверяем каждую форму руками.
  • Лучше не включать: интернет-магазин с корзиной и оплатой, личные кабинеты, сайты на современных фреймворках, где интерфейс собирается кодом, любые проекты с регулярной разработкой.
  • Не нужно вовсе: сайты, где скрипты уже правильно подключены с отложенными атрибутами, — функция не даст прироста, а риск добавит.

Порядок безопасной проверки: снять замеры скорости и записать значения, включить функцию, подождать несколько минут на обновление кэша, пройти руками все формы, корзину, поиск и фильтры на телефоне и на компьютере, снова снять замеры и сравнить не общий балл, а отдельные показатели. Если прирост в пределах погрешности, а поведение изменилось хоть где-то — выключайте, обмен невыгодный.

Частые вопросы

Rocket Loader ещё существует или его закрыли? Существует и доступен на всех тарифах Cloudflare, включая бесплатный. По умолчанию выключен. Закрыли другую функцию из того же раздела — автоматическое сжатие кода, её убрали из панели в августе 2024 года как потерявшую смысл.

Чем RocketScript отличается от Rocket Loader? Это разные названия одной технологии в разное время. RocketScript — разговорное имя ранней реализации по нестандартному типу скрипта. Сегодня настройка называется только Rocket Loader.

Даёт ли включение прирост позиций? Напрямую — нет. Скорость влияет на выдачу слабым прямым фактором и заметным косвенным, через поведение посетителей. Если сайт из-за блокирующих скриптов показывал пустой экран три секунды, выигрыш будет ощутимым. Если страница и так открывалась быстро, изменений не будет.

Можно ли использовать вместе с модулем кэширования на сайте? Можно, но включать надо по одной настройке с проверкой между шагами. Двойное объединение и откладывание скриптов — с одной стороны модулем, с другой сетью доставки — самый частый источник поломок, которые потом невозможно отследить.

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

Что делать, если сайт сломался, а что именно — непонятно? Выключить функцию, убедиться, что всё вернулось, и включать заново по шагам, проверяя после каждого. Диагностика вслепую при включённой автоматике съедает часы.

Есть ли смысл, если сайт не на Cloudflare? Ради одной этой функции переводить домен в чужую сеть доставки не стоит. Тот же эффект достигается штатными атрибутами и запуском по действию, причём точнее и без риска.

Коротко

  • RocketScript — историческое имя ранней реализации, актуальная настройка называется Rocket Loader, она жива, доступна на всех тарифах Cloudflare и по умолчанию выключена.
  • Механика одна: разметка меняется по дороге к посетителю, скрипты помечаются неисполняемыми и запускаются загрузчиком после отрисовки страницы.
  • Функция улучшает скорость появления содержимого, но может ухудшить отзывчивость и стабильность вёрстки, поэтому оценивать её надо по отдельным показателям, а не по общему баллу.
  • Типовые поломки — формы, платёжные виджеты, счётчики и код, зависящий от библиотек. Лечится атрибутом исключения на самом скрипте и на всех его зависимостях.
  • Для индексации опасен только тот случай, когда содержимое создаётся скриптом или когда функция этот скрипт сломала; текст из исходного кода страницы не затрагивается.
  • При доступе к вёрстке точнее работают штатные средства: отложенные атрибуты, запуск по действию, заглушки вместо тяжёлых виджетов и удаление того, чем никто не пользуется.

Если сомневаетесь, включать ли эту функцию на своём сайте и не отвечает ли она за странности с формами или статистикой, приходите на SEO-консультацию — посмотрим замеры и список скриптов вместе и решим, что откладывать, а что убрать совсем.

Увеличьте позиции и продажи вашего сайта

Профессиональное SEO-продвижение с гарантией результата. Выберите подходящую услугу:

Анатолий Кузнецов — SEO-оптимизатор

Остались вопросы по продвижению?

Меня зовут Анатолий Кузнецов, я SEO-оптимизатор с 20-летним стажем. Разберу ваш сайт, отвечу на вопросы и подскажу, что улучшить для роста позиций в Яндексе и Google.

Связаться со мной →

Комментарии

Тихон Бажанов

Классическая история: включил год назад, забыл. Недавно заметил, что данные по отказам подозрительно хорошие, стал разбираться — счётчик запускался с задержкой и просто не успевал зафиксировать быстрые уходы. То есть я год смотрел на приукрашенную статистику и принимал по ней решения.

Милана Григорьева

У нас сайт на современном фреймворке, интерфейс целиком собирается кодом. Подрядчик советует включить эту функцию для ускорения. Судя по статье, нам как раз нельзя, но хочется понять причину, чтобы аргументировать.

Анатолий Кузнецов автор

Причина в том, что вы будете откладывать не украшения, а сам сайт. На фреймворке страница до выполнения кода — это фактически пустой каркас, и вся отрисовка происходит внутри скриптов. Отложить их значит отложить появление содержимого целиком: показатель первой отрисовки может даже формально улучшиться, потому что каркас покажется быстро, а вот момент, когда человек увидит реальный контент, отодвинется. Плюс порядок инициализации у таких приложений чувствительный, и вмешательство в него даёт трудноуловимые ошибки. Аргумент для подрядчика простой: ускорение приложения на фреймворке достигается другими средствами — отрисовкой на сервере или предварительной сборкой страниц, разделением кода на части и подгрузкой того, что нужно текущему экрану. Это работа в коде, а не галочка в панели, и подменять одно другим бессмысленно.

Феликс Ратников

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

Зоя Кулагина

Измеритель ругается на устаревшие методы и показывает пальцем на файл загрузчика Cloudflare. Это как-то влияет на ранжирование или можно спокойно жить дальше? Разработчик разводит руками, говорит, что не наш код.

Анатолий Кузнецов автор

Разработчик прав, это действительно не ваш код, и на ранжирование предупреждение не влияет. Оно относится к разделу диагностики, а не к показателям, по которым оценивается страница: поисковик смотрит на скорость отрисовки, отзывчивость и стабильность вёрстки у реальных посетителей, а не на список замечаний в отчёте измерителя. Влиять на содержимое чужого файла вы не можете, и способ убрать строчку из отчёта ровно один — выключить функцию. Поэтому решение принимайте по существу: если после включения три пользовательских показателя на мобильных стали лучше и ничего не сломалось, живите с предупреждением спокойно. Если прирост в пределах погрешности — выключайте, но не из-за этой строки, а потому что смысла нет.

Матвей Долгих

Сделали инвентаризацию внешних запросов, как в разделе про удаление лишнего. На странице оказалось четырнадцать сторонних скриптов, из которых реально использовались пять. Убрали девять — прирост оказался больше, чем от любой автоматики. Соглашусь, что это надо делать первым делом.

Виолетта Кабакова

Не соглашусь с осторожностью в статье. У нас обычный сайт услуг на типовом движке, включили без всяких исключений, ничего не сломалось, скорость выросла. Иногда галочка — это просто галочка, а не мина.

Пётр Заикин

Вопрос про сочетание с модулем кэширования. У нас на сайте стоит модуль, который тоже умеет откладывать и объединять скрипты. Если включить обе штуки, они подерутся или дополнят друг друга?

Анатолий Кузнецов автор

Подерутся, причём непредсказуемым образом. Модуль на сайте объединяет несколько файлов в один и меняет порядок подключения, а сеть доставки потом обрабатывает уже результат его работы и откладывает объединённый файл целиком. Получается двойная обработка, при которой ваши исключения могут не сработать: атрибут стоял на исходном скрипте, а после объединения его в общем файле уже нет. Отсюда правило: откладывать и объединять должно что-то одно. Я обычно оставляю эту работу модулю на самом сайте — он ближе к коду, видит зависимости и позволяет исключать конкретные файлы по имени. За сетью доставки при этом оставляю кэширование, сжатие ответа и раздачу статики. Если решите наоборот, выключите соответствующие настройки в модуле полностью, а не наполовину.

Любовь Чепурная

Добавлю про заглушки вместо виджетов. Заменили встроенную карту в контактах на картинку с кнопкой, карта грузится по нажатию. Вес страницы упал в разы, а пользуется ей от силы каждый двадцатый посетитель. Самое выгодное изменение из всех, что делали за год.

Радмир Гайнуллин

Интересует проверка глазами робота, о которой вы пишете. У нас характеристики товаров выводятся во вкладках скриптом. Насколько это вообще критично и как посмотреть, что видит поиск?

Анатолий Кузнецов автор

Критично, и проверять надо в двух местах. Первое и самое простое: откройте страницу товара, посмотрите исходный код страницы через браузер и поищите в нём текст характеристики. Если текста там нет, значит его создаёт скрипт, и дальше всё зависит от того, справится ли робот с выполнением кода. Второе: в панелях вебмастера обеих поисковых систем есть инструмент, показывающий страницу так, как её получил робот, — прогоните через него карточку товара и сравните с тем, что видите вы. По моему опыту, вкладки чаще всего реализованы безопасно: содержимое лежит в разметке сразу, а скрипт только показывает и прячет его. Опасен другой вариант — когда содержимое вкладки подгружается запросом при нажатии, вот такое в индекс попадает плохо. Если у вас второй случай, самое надёжное решение не в настройках Cloudflare, а в том, чтобы отдавать характеристики в разметке сразу, а скриптом управлять только видимостью.

Таисия Бурлакова

Хочу предостеречь по своему случаю: у нас после включения перестал приходить платёжный виджет, и мы это заметили только через два дня по отсутствию оплат. Форма при этом визуально работала, кнопка нажималась, просто ничего не происходило. Проверять надо не глазами, а реальным тестовым заказом.

Ярослав Тимошенко

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

Анатолий Кузнецов автор

Ваш случай — самая наглядная иллюстрация того, почему нельзя судить по одному общему баллу. Механика ровно та, что вы описали: блокирующие скрипты растягивали задержку по времени, а отложенный запуск собрал её в один плотный кусок работы сразу после отрисовки. Для слабого мобильного процессора это хуже, потому что попадает ровно в тот момент, когда человек уже видит страницу и тянется к экрану. Если захотите вернуться к задаче, направление такое: не откладывать всё скопом, а разнести запуск по времени и по событиям. Счётчики — асинхронно и сразу. Чат и карта — по прокрутке или по нажатию. Тяжёлые библиотеки, нужные не на всех страницах, — подключать только там, где они используются. Это даёт и раннюю отрисовку, и ровную отзывчивость, но требует работы в коде, а не переключателя.

Ираида Смолякова

Полезно было узнать про историю названия. Нашли в старой документации по нашему сайту инструкцию с этим самым словом RocketScript и долго не могли понять, о какой настройке речь — в панели её просто нет. Оказывается, искали устаревшее имя.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

 Нажимая «оставить комментарий» вы принимаетеправила конфиденциальности 

Прокрутить вверх