Композитный сайт ускоряет отдачу первого экрана в разы, но включить галочку недостаточно — важно правильно разметить динамические зоны и убедиться, что кэш реально работает, а не молча отдаёт устаревший HTML.
Что проверить до включения
Композит хранит статическую часть страницы отдельно от динамической, поэтому перед включением стоит убедиться, что окружение к этому готово. Композит работает и на файловом хранилище, и в memcached, но на нагруженном каталоге файловый вариант быстро упирается в дисковый ввод-вывод.
- Проверьте модуль. Технология входит в редакции начиная с «Стандарт»; убедитесь, что установлен модуль
Composite (composite)в Marketplace → Установленные решения. - Оцените хранилище кэша. Для магазина предпочтителен
memcachedили Redis — настраивается вbitrix/.settings.phpчерез ключcache. - Сделайте бэкап шаблона. Часть блоков (корзина, авторизация, счётчики) придётся оборачивать вручную, а это правки в
header.phpи компонентах.
Как включить композит в админке
Основной путь — Настройки → Composite → Композитный сайт (или /bitrix/admin/composite.php). На вкладке «Composite» переведите режим в положение «Включен» и выберите область применения: для всего сайта или для отдельных страниц.
- Установите флаг «Автоматически стандартный» — этот режим кэширует страницы целиком и автоматически определяет динамические зоны по типовым компонентам.
- Задайте время жизни кэша (TTL). Для витрины каталога разумны 24–48 часов, для главной — до недели.
- Укажите тип хранения: файлы или memcached. Для магазина выбирайте memcached.
- Сохраните и очистите кэш через «Очистить файлы кэша» в панели, чтобы старые версии не мешали.
После сохранения Битрикс начнёт отдавать статическую копию из кэша, а динамические участки дозагружать AJAX-запросом к /bitrix/tools/composite_data.php.
Разметка динамических зон
Всё, что меняется для конкретного пользователя, нужно вынести из статического кэша, иначе один посетитель увидит корзину другого. В «автоматическом стандартном» режиме типовые компоненты (sale.basket.basket.line, system.auth.form) уже помечены динамическими, а вот кастомные блоки — нет.
Ручная разметка делается двумя способами:
- Компонентом. Оберните участок в
<?$APPLICATION->IncludeComponent("bitrix:main.composite", ...)?>— старый способ, годится для крупных зон. - JS-функцией. Современный подход —
BX.frameCacheи вызов$APPLICATION->GetPageProperty()вместе с тегом<!--'start_frame_cache_ID'--> ... <!--'end_frame_cache_ID'-->в шаблоне.
Исключения и запреты кэширования
Некоторые страницы кэшировать нельзя в принципе: оформление заказа, личный кабинет, страницы оплаты, результаты умного фильтра с сортировкой. Для них композит отключают.
| Раздел | Действие |
|---|---|
Корзина / /personal/cart/ | Исключить из композита |
Оформление заказа /personal/order/ | Исключить полностью |
| Личный кабинет | Исключить |
| Каталог, карточка товара | Композит + динамические зоны |
Программно отключить кэш на конкретной странице можно вызовом \Bitrix\Main\Composite\Engine::onBeforeProlog() обёрткой либо проще — define("BX_COMPOSITE_DISABLE", "Y"); в начале нужного файла. В настройках модуля также есть поле масок URL для исключений.
Как проверить, что композит работает
Визуально страница выглядит одинаково, поэтому проверять нужно по техническим признакам. Самый надёжный — HTTP-заголовки ответа.
- В инструментах разработчика (вкладка Network) откройте главный документ и найдите заголовок
X-Bitrix-Composite. ЗначениеCache (file)илиCache (memcache)означает отдачу из кэша. - Проверьте отдельный запрос к
composite_data.php— он подгружает динамику. Его наличие подтверждает, что зоны размечены корректно. - Через консоль выполните
BX.PreloadManagerили посмотрите объектwindow.frameCacheVars— там перечислены динамические блоки.
Второй признак — скорость. Через curl -sI https://site.ru/ замерьте Time To First Byte: с включённым композитом TTFB на кэшированной странице обычно падает до 50–150 мс независимо от сложности каталога.
Generated. Композит проявляется со второго запроса, поэтому проверяйте в режиме инкогнито дважды.Что делать, если не работает
Если заголовок всегда Generated и кэш не «прогревается», проблема обычно в одном из трёх мест.
- Сессия и куки. Композит не кэширует ответ, если в коде вызывается
session_start()раньше пролога или устанавливаются свои cookie на каждой странице. Проверьте кастомные обработчики вinit.php. - Ошибки PHP. Любой
noticeили вывод до заголовков ломает буферизацию — включите лог ошибок и проверьте чистоту вывода. - Отключённая буферизация. Композит требует, чтобы страница собиралась через
$APPLICATION->RestartBuffer()корректно; сторонние компоненты с прямымechoв <head> мешают.
Полезно включить режим отладки в настройках модуля — тогда в HTML-комментарии в конце страницы появится причина, по которой композит отказался кэшировать документ.
Итог
Включение композита — это не одна галочка, а связка из трёх шагов: активировать модуль с подходящим хранилищем, аккуратно разметить динамические зоны (корзина, авторизация, счётчики) и проверить результат по заголовку X-Bitrix-Composite и падению TTFB. Отдельно исключите из кэша корзину, оформление заказа и личный кабинет, иначе получите утечку пользовательских данных.
Если каталог большой, а шаблон писали несколько подрядчиков, ручная разметка динамики нередко превращается в отдельный проект. Мы в B2Bsite настраиваем композит вместе с кэшем компонентов и памятью сервера, доводя первый экран до стабильных значений Core Web Vitals — и следим, чтобы динамика не «застывала» после релизов.
Частые вопросы
Чем композит отличается от обычного HTML-кэша?
HTML-кэш хранит готовую страницу на сервере и всё равно требует запуска ядра Битрикс. Композит отдаёт статическую копию почти мгновенно и дозагружает только динамику отдельным AJAX-запросом.
Нужен ли memcached для композита?
Формально нет, композит работает и на файлах. Но для магазина с высокой посещаемостью memcached или Redis заметно снижают нагрузку на диск и ускоряют выдачу кэша.
Почему счётчик корзины не обновляется после включения?
Блок счётчика попал в статический кэш и не размечен как динамический. Его нужно обернуть во frame-кэш или использовать типовой компонент sale.basket.basket.line, который обновляется через composite_data.php.
Как быстро понять, отдаётся страница из кэша или нет?
Откройте вкладку Network в инструментах разработчика и найдите заголовок X-Bitrix-Composite. Значение Cache означает отдачу из кэша, Generated — что страница собрана заново.
Можно ли отключить композит для одной страницы?
Да, добавьте в начало нужного файла строку define('BX_COMPOSITE_DISABLE', 'Y') либо задайте маску URL в исключениях настроек модуля.
Композит кэширует страницы для авторизованных пользователей?
По умолчанию нет — для залогиненных посетителей отдаётся полностью динамическая версия. Кэшируется в основном контент для анонимных пользователей, что и даёт основной прирост скорости.
Влияет ли композит на SEO и индексацию?
Поисковый робот получает полностью собранный HTML, поэтому на индексацию композит не влияет негативно. Наоборот, снижение TTFB положительно сказывается на оценке скорости.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.