Как плагин Reemake Breadcrumbs работает на onBeforeCompileHead
Событие onBeforeCompileHead срабатывает до генерации HTML. Разбираем, почему это идеальное место для вставки JSON-LD-разметки и как это реализовано в нашем плагине. С примером кода и объяснением, почему мы не используем onContentPrepare.
События Joomla
Когда срабатывает onBeforeCompileHead
Joomla загружается поэтапно. Событие onBeforeCompileHead — это момент, когда документ уже сформирован, но HTML ещё не начал выводиться. Идеально для добавления в <head> скриптов, стилей и JSON-LD.
Раньше рендера
Разметка добавляется до вывода HTML — не влияет на отрисовку и Core Web Vitals.
Точно в head
Не нужно искать место в шаблоне — Joomla сама разместит в правильной позиции.
Работает раньше компонентов
Плагин срабатывает до того, как сторонние компоненты начнут вмешиваться.
Изоляция ошибок
Ошибка в одном запросе не ломает сайт — плагин обёрнут в try-catch.
Код
Как это выглядит в плагине
public static function getSubscribedEvents(): array
{
return ['onBeforeCompileHead' => 'addSchema'];
}
public function addSchema(): void
{
$doc = Factory::getApplication()->getDocument();
$jsonLd = $this->buildBreadcrumbList();
$doc->addCustomTag('<script type="application/ld+json">'
. $jsonLd . '</script>');
}Никаких overrides шаблона, никаких правок ядра. Всё через стандартные API Joomla 6. Метод buildBreadcrumbList() возвращает валидный JSON-LD, а addCustomTag() размещает его в правильной позиции head.
Почему не onContentPrepare
Чем плохи другие события
onContentPrepare. Срабатывает только для материалов. Не работает для категорий, страниц компонентов, лендингов из модулей. И вставляет разметку в body, а не в head.
onAfterRender. Слишком поздно. HTML уже начал выводиться — вставить что-то в head невозможно.
onBeforeRender. Работает, но менее предсказуемо. Не все версии Joomla стабильно вызывают его в нужный момент.
onBeforeCompileHead. Идеальное событие: раньше рендера, после инициализации, стабильно во всех версиях Joomla 4/5/6. Это стандарт для вставки мета-данных в head.
Кейс · Макскрафт-Декор
Как onBeforeCompileHead упростил поддержку проекта
Задача: «Макскрафт-Декор» — производитель выставочных стендов. Сайт на Joomla с кастомным шаблоном. Ранее разметка крошек делалась через override шаблона — при каждом обновлении темы правки слетали и приходилось переделывать.
Что сделали: установили Reemake Breadcrumbs. Плагин работает через onBeforeCompileHead — не зависит от шаблона. Обновление темы больше не ломает разметку.
Результат: сэкономили ~15 часов работы в год только на восстановлении правок после обновлений. При смене шаблона в декабре 2025 — разметка продолжила работать без изменений.
Вопросы и ответы
Частые вопросы
Почему не onAfterRender?
Поздно — HTML уже начал выводиться. В head вставить не получится, только в body.
Можно ли вставить несколько JSON-LD?
Да. Плагин умеет добавлять как отдельные блоки, так и объединять их в один @graph. Оба варианта валидны.
Влияет ли на скорость сайта?
Нет. Одно событие, один вызов addCustomTag(). Нагрузка — микросекунды, не влияет на TTFB.
Работает ли на Joomla 4 и 5?
Да, onBeforeCompileHead стабильно работает во всех современных версиях Joomla. Наш плагин написан под Joomla 6, но архитектура совместима.
Нужна техническая помощь?
Разработаем плагин под ваши задачи. Разметка на любом событии Joomla, свой набор правил, интеграции.
Обсудить задачу →




Messenger Max