Перейти к содержимому

Композит не включается на странице - причины по убыванию частоты

Композит включён и работает на сайте, а на конкретной странице его нет. Разбираем причины по убыванию частоты: почти все они про сам код страницы.

С чего начать

Смотрим заголовок ответа страницы:

Окно терминала
curl -sI 'https://example.org/catalog/telefony/' | grep -i x-bitrix-composite
curl -sI 'https://example.org/' | grep -i x-bitrix-composite
# заголовок есть на одной странице и нет на другой - значит, дело в самой странице

Отсутствие служебного заголовка на одной странице при его наличии на другой сразу отсекает половину версий. Настройки модуля тут совсем ни при чём: с ними обе страницы вели бы себя ровно одинаково.

Ищем запись в сессию и свои заголовки:

Окно терминала
grep -rn "session_start\|\$_SESSION\[\|setcookie\|RestartBuffer" \
/home/site/public_html/local/templates/main/
# запись в сессию при каждом показе и свои заголовки отключают композит
grep -rn "header(\|LocalRedirect" /home/site/public_html/local/templates/main/
# переадресация и свои заголовки ответа мешают ровно так же

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

Проверяем маски исключений:

- в настройках модуля композита есть список адресов-исключений
- туда обычно попадают личный кабинет, корзина и оформление заказа
- маска вида /personal/ закрывает и все страницы внутри раздела

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

Причины

  1. Код страницы пишет в сессию примерно 30% случаев

    ПризнакКомпозит есть на соседних страницах и нет на этой.

    ПроверкаИщем обращения к сессии в шаблоне и в компонентах страницы.

    Что делатьУбираем запись в сессию или переносим её в динамическую область.

  2. Страница отдаёт свои заголовки примерно 25% случаев

    ПризнакНа странице есть свой код с переадресацией или своим ответом.

    ПроверкаСмотрим код страницы на установку своих заголовков и на любой сброс буфера.

    Что делатьОставляем такие страницы вне композита: они по устройству динамические.

  3. Адрес попал в исключения примерно 20% случаев

    ПризнакКомпозита нет на всём разделе, а не на одной странице.

    ПроверкаЧитаем список масок исключений в настройках модуля композита целиком и очень внимательно.

    Что делатьПравим маску так, чтобы она закрывала только то, что нужно.

  4. Ответ страницы не двести примерно 15% случаев

    ПризнакСтраница показывает содержимое, но отвечает кодом ошибки.

    ПроверкаСмотрим код ответа самого сервера отдельно от содержимого этой самой страницы сайта.

    Что делатьПриводим ответ к обычному коду: композит кэширует только успешные ответы.

  5. Композит выключен для этой группы примерно 10% случаев

    ПризнакУ гостя композит работает, у авторизованного - нет.

    ПроверкаПроверяем настройки композита отдельно для каждой группы пользователей этого сайта.

    Что делатьВключаем нужные группы или оставляем как есть, если так и задумано.

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

Почему композит есть у гостя и нет у меня?

Под администратором он часто отключён намеренно. Проверять работу композита нужно из отдельного окна браузера.

Мешает ли композиту личный блок в шапке?

Нет, если он объявлен динамической областью. Мешает именно запись в сессию и свои заголовки.

Можно ли включить композит на странице корзины?

Технически иногда да, практически не нужно: она почти целиком личная. Выигрыша там нет.

Как проверить, что копия действительно отдаётся?

По служебному заголовку ответа на втором обращении. Первое обращение только собирает копию.

Смежное

Первоисточник