Jekyll тема: где ломается сборка и вёрстка
Готовая тема почти всегда собрана под конкретную версию генератора и набор плагинов, поэтому первый же bundle exec jekyll build после установки часто падает на несовместимости зависимостей: тема тянет плагин, который требует другой мажорной ветки, а Gemfile уже зафиксирован под чужой набор. Симптом — сборка сайта проходит локально, но разваливается на CI, потому что там подтягивается свежая версия gem-а.
Второй класс сбоев — конфликт шаблонов. Тема приносит свои _layouts и _includes, и при добавлении собственных страниц Liquid-наследование ломается: layout: default из темы перекрывает ваш, а include подтягивает чужой partial. Вёрстка при этом разъезжается не сразу — сначала пропадает обёртка, потом съезжает сетка на внутренних страницах.
Третий источник — плагины. Часть тем рассчитана на сборку через GitHub Pages с ограниченным whitelist, и любой плагин вне списка молча игнорируется: Sass не компилируется, пагинация не появляется, а вывод остаётся пустым без явной ошибки.
Отдельно всплывает вёрстка на адаптиве: тема версталась под фиксированную ширину контента, и длинные таблицы или код-блоки вылезают за вьюпорт. Плюс версии ассетов не сбрасываются, и браузер держит старый CSS после правок.
Разбираем, как каждый из этих сбоев закрывается — от фиксации зависимостей до переопределения шаблонов без правки файлов темы.
Что даёт настроенная тема: скорость и стабильность
Сборка Jekyll-сайта деградирует незаметно: сначала 8 секунд, потом 40, потом минуты на каждое изменение. Причина почти всегда одна — тема тянет за собой весь набор плагинов и шаблонных зависимостей, даже если конкретная страница использует десятую часть. Инкрементальная пересборка перестаёт помогать, потому что любая правка в общей раскладке инвалидирует весь кэш, и вы ждёте полный цикл ради одной строки в тексте.
Кастомизация темы решает это на уровне структуры, а не косметики. Мы разносим раскладки по назначению, выносим тяжёлые вычисления из шаблонов в подключаемые данные, отключаем неиспользуемые плагины и фиксируем версии зависимостей. Время сборки падает предсказуемо — типовой проект ускоряется в разы, а горячая пересборка возвращается к секундам, потому что перестаёт зависеть от всего дерева шаблонов.
Второй эффект — уходит целый класс ошибок вывода. Кривой Liquid-фильтр, неэкранированный символ в заголовке, битая ссылка в навигации, дублирующиеся метатеги — всё это проявляется не на сборке, а на живом сайте, и ловится уже по жалобам. Когда шаблоны приведены к единому виду и покрыты проверками, такие дефекты отсекаются до публикации: сборка падает с понятной ошибкой вместо тихой порчи страницы.
Отдельно — стабильность между окружениями. Локальная машина, тестовый стенд и продакшен собирают один и тот же результат, потому что версии зафиксированы, а конфигурация различается только переопределением параметров. Это снимает классическое «у меня работает, а на сервере нет» и делает откат к предыдущему состоянию рутинной операцией, а не разбором причин.
В сумме настроенная тема — это предсказуемый конвейер публикации: правка доезжает до сайта за секунды, вывод одинаков везде, а ошибки видны на этапе сборки, а не на проде. Дальше разберём, из чего складывается такая настройка.
Подходы к кастомизации: сравнение вариантов
Кастомизация Jekyll-темы почти всегда сводится к одному вопросу: что делать, когда нужно отклониться от авторского оформления. Есть три принципиально разных способа — править исходники темы напрямую, переопределять отдельные файлы поверх неё или строить собственный слой оформления. Выбор определяет, что произойдёт при следующем обновлении темы и сколько времени уйдёт на поддержку через полгода.
| Вариант | Когда подходит | Ограничения |
|---|---|---|
| Правка исходников темы | Разовый проект, тему больше не обновляем | Обновление затирает правки; история изменений смешана с чужой |
| Переопределение файлов | Нужно поменять вёрстку, стили или шаблон частично | Работает только для файлов, которые Jekyll подхватывает по приоритету |
| Собственный слой поверх темы | Долгая поддержка, регулярные обновления, свой дизайн | Требует дисциплины: чем больше слоёв, тем важнее структура |
Правка исходников даёт быстрый результат и полный контроль, но каждое обновление темы превращается в ручное слияние. Переопределение — компромисс: мы кладём свои версии файлов в проект, и Jekyll отдаёт приоритет им, а остальное берёт из темы. Это работает для стилей, части шаблонов и конфигурации, но не спасает, если меняется структура данных, на которую опирается тема.
Собственный слой — самый устойчивый путь для проектов, которые живут годами. Тема остаётся неизменяемой зависимостью, а весь наш код лежит отдельно: свои макеты, свои стили, свои подключаемые блоки. Обновление темы тогда не ломает оформление, а добавление нового раздела не требует лезть в чужие файлы. Разбираем, как выбрать вариант под ваш случай и что учесть при переносе.
Этапы настройки и кастомизации темы
Работу начинаем с аудита: смотрим, что в теме уже есть, а что придётся переписывать. Проверяем структуру каталогов, набор шаблонов, подключённые плагины и то, как собирается сайт на текущей ветке Jekyll. На выходе — карта темы: какие файлы отвечают за вывод, где дублируется разметка, какие зависимости тянут лишний вес.
- Аудит темы. Разбираем исходники, коллекции, layouts и includes, фиксируем точки кастомизации и риски: жёстко прописанные пути, разросшийся
_config.yml, плагины без поддержки. Сверяем поведение с тем, что заявлено в задаче. - Проектирование структуры. Решаем, что меняем в шаблонах, что выносим в data-файлы, а что закрываем отдельным плагином. Раскладываем стили по слоям, чтобы правки не ломали соседние блоки.
- Настройка шаблонов и стилей. Переписываем layouts и includes под нужную вёрстку, приводим типографику и сетку к единому виду, убираем дублирующуюся разметку в пользу переиспользуемых компонентов.
- Подключение плагинов. Добавляем только то, что решает задачу: генерация коллекций, обработка изображений, карта сайта, подсветка кода. Каждый плагин проверяем на совместимость с текущей веткой и на скорость сборки.
- Проверка. Собираем сайт локально, прогоняем страницы на битые ссылки, проверяем вывод на разных разрешениях и корректность отката к предыдущей версии темы. Отдельно смотрим время сборки до и после правок.
- Передача. Отдаём настроенную тему с описанием структуры, инструкцией по локальной сборке и списком внесённых изменений, чтобы команда могла развивать её без нас.
Такой порядок держит кастомизацию предсказуемой: каждое изменение привязано к конкретному файлу и проверено до передачи. Если по ходу аудита всплывают ограничения темы, мы говорим о них сразу, а не после сборки.
Что получает заказчик: конфигурации и документация
Работа с Jekyll-темой заканчивается не «поправленными стилями», а набором артефактов, по которым проект можно развивать без автора правок. Ниже — что именно остаётся у заказчика после кастомизации.
- Файлы конфигурации —
_config.ymlс вынесенными параметрами: базовый адрес, коллекции, значения по умолчанию для шаблонов, настройки сборки. Правка контента и структуры не требует лезть в код. - Схема шаблонов — карта layouts, includes и data-файлов: какой шаблон за что отвечает, где точка входа, какие блоки переиспользуются. По ней новый разработчик ориентируется за час, а не за неделю.
- Стилевая система — переменные темы (цвета, типографика, отступы) в одном месте, разбитые по слоям стили и правило, как добавлять новые компоненты, не ломая существующие.
- Политики доступа и ролей — кто и что может менять: контент, шаблоны, конфигурацию сборки. Разделение прав убирает правки «мимо процесса».
- Регламент обновления зависимостей — периодичность, порядок проверки совместимости плагинов и генераторов, точка отката на предыдущую сборку.
- Инструкция по локальному запуску — как поднять проект, собрать и проверить изменения до публикации, какие проверки обязательны перед выкладкой.
- Каталог плагинов и расширений — что подключено, зачем и какие ограничения накладывает на структуру сайта.
- Журнал изменений темы — что и когда менялось, чтобы отличать авторские правки от обновлений.
Этого набора достаточно, чтобы команда заказчика сопровождала сайт своими силами, а мы подключались точечно — на сложных доработках. Опишите задачу: вернёмся с оценкой и планом по вашему проекту.
Кейс: как настроенная тема ускорила сборку втрое
Проект — корпоративный сайт-документация на Jekyll: около 4 000 страниц, три языка, ежедневные правки контента от нескольких авторов. Исходная тема была взята готовой и «донастроена» поверх: десятки переопределений в _sass, тяжёлые цепочки наследования шаблонов, плагины, каждый из которых на этапе сборки перечитывал весь каталог _posts. Полная сборка занимала 11–14 минут, инкрементальная — около 3 минут, и любой автор, поправивший одну строку, ждал результат дольше, чем писал правку.
Что было до кастомизации
Замеры на чистом клоне показали, где уходит время: больше половины — на повторный обход коллекций и генерацию страниц тегов, ещё четверть — на компиляцию стилей из-за вложенных @import без разделения на критическую и отложенную части. Шаблоны тянули данные через site.pages целиком вместо точечных выборок по where, поэтому каждая страница заново перебирала весь список.
Что изменили
Переписали слой стилей: плоская структура партиалов, единые переменные темы, вывод одного собранного файла вместо каскада переопределений. Плагины заменили на встроенные коллекции с явными output: true и ограниченными выборками, тяжёлые вычисления вынесли в отдельный шаг, который выполняется один раз и кэшируется между сборками. Шаблоны перевели на точечные обращения к данным и убрали дублирующие include.
| Метрика | До | После |
|---|---|---|
| Полная сборка | 11–14 мин | 3,5–4 мин |
| Инкрементальная сборка | ~3 мин | 20–30 с |
| Собранный CSS | 480 КБ | 180 КБ |
| Число шаблонов-переопределений | 60+ | 12 |
Что это дало
Автор видит результат правки за десятки секунд вместо минут — цикл «изменил, проверил, запушил» перестал быть узким местом. Сборка на сервере укладывается в окно деплоя, откат на предыдущий релиз остаётся доступным, потому что артефакты собираются воспроизводимо. Тема при этом осталась кастомизируемой: новый блок или раздел добавляется правкой одного партиала, а не поиском нужного переопределения среди десятков.
Чем отличается правка темы от её переопределения?
Правка темы — это изменение файлов внутри самой темы: шаблонов, стилей, партиалов. Переопределение — это когда оригинал остаётся нетронутым, а рядом появляется слой, который его замещает: свой шаблон с тем же именем, дополнительный файл стилей, подключаемый поверх, свой набор данных вместо встроенного. Разница не косметическая — от неё зависит, что произойдёт при следующем обновлении темы.
Правка выглядит быстрее: открыл нужный шаблон, поправил разметку, добавил стиль. Проблема проявляется позже, когда выходит новая версия темы с исправлениями и новыми возможностями. Обновиться нельзя — любое обновление затрёт ваши изменения, а сравнить их с оригиналом уже не с чем: непонятно, что было вашим, а что пришло из темы. Через полгода никто в команде не помнит, почему в конкретном партиале появилась нестандартная строка, и трогать её боятся.
Переопределение строится на том, что тема остаётся неизменной и обновляемой, а все ваши доработки живут отдельным слоем. Шаблон с тем же именем в вашем каталоге имеет приоритет над темой — оригинал при этом цел. Стили подключаются после темы, поэтому перекрывают её правила без правки исходных файлов. Логика выносится в отдельные подключаемые модули, а не встраивается в чужой код.
Стратегию выбирают по горизонту. Если тема разовая и обновлять её не планируется — правка допустима и дешевле. Если сайт живёт годами и тему вы будете обновлять, переопределение окупается на первом же обновлении: оно проходит без конфликтов, а ваши доработки остаются на месте. На практике чаще берут смешанный подход — переопределяют точечно там, где тема будет меняться, и правят напрямую в местах, которые точно не тронут.
Мы на старте фиксируем эту границу в документации: что переопределено, что изменено внутри темы и почему. Это стоит пары часов и снимает главную боль поддержки — невозможность обновиться без риска сломать сайт.
Частые технические сомнения при работе с темой
Тема — это обычный набор шаблонов, стилей и конфигурации, поэтому все сомнения сводятся к трём вещам: не сломается ли сборка после обновления, не упрётся ли генерация в размер сайта и не потянет ли тема лишнего в готовую страницу.
Обновление темы затрёт наши правки в шаблонах?
Если правки лежат прямо в файлах темы, обновление их перезапишет. Поэтому доработки выносим в отдельный слой: свои шаблоны-наследники, переопределения стилей и конфигурацию сайта — тогда обновление подтягивает новую версию, а ваши изменения остаются поверх. Перед обновлением фиксируем текущее состояние в системе контроля версий, собираем сайт на копии и сравниваем результат — откат занимает минуты.
Совместимость плагинов и сторонних библиотек
Плагины делятся на те, что работают при сборке, и те, что подключаются в готовой странице. Первые проверяем на совместимость с текущей веткой генератора и версиями зависимостей, вторые — на конфликты между собой: две библиотеки для одного и того же виджета часто ломают друг друга. Каждый плагин добавляет время к сборке, поэтому оставляем только те, что дают реальную функцию, а не дублируют встроенные возможности.
Не станет ли сайт собираться слишком долго?
Время сборки растёт вместе с числом страниц и плагинов, а не с объёмом отдельной страницы. Узкое место обычно — тяжёлые операции на каждом материале: генерация изображений, подсветка кода, пересчёт связанных записей. Ускоряем точечно: кэшируем промежуточные результаты, выносим разовую обработку из цикла сборки, ограничиваем пересборку только изменившимися файлами. На проекте с несколькими сотнями страниц это возвращает сборку к минутам вместо десятков минут.
Что с производительностью готовых страниц?
Статическая страница отдаётся быстро, но тему легко утяжелить: лишние шрифты, неиспользуемые стили, скрипты, подключённые на всех страницах без необходимости. Собираем один оптимизированный файл стилей вместо десятка, откладываем второстепенные скрипты, сжимаем изображения на этапе сборки. В результате страница отдаёт готовую разметку сразу, без ожидания серверной логики, а правки в контенте не требуют перезапуска приложения.
Если сомнение не из этого списка — опишите вашу ситуацию, разберём её отдельно.
Обсудим вашу задачу по настройке темы
Чтобы настройка темы не превратилась в перебор гипотез, начинаем с разбора задачи: что за сайт, кто им пользуется, какие разделы и типы страниц нужны, как публикуется контент. На созвоне уточняем исходные данные и границы работ — после этого возвращаемся с планом и оценкой, без «сделаем красиво, а там посмотрим».
Что разберём на обсуждении:
- Текущее состояние: готовая тема, самописная вёрстка или набор шаблонов — от этого зависит объём кастомизации, а не переписывание с нуля.
- Структуру: какие коллекции, типы записей и страницы нужны, как организованы разделы и навигация, где понадобятся свои шаблоны.
- Контент и публикацию: кто и как добавляет материалы, нужна ли поддержка разметки, автоматическая сборка и предпросмотр перед публикацией.
- Дизайн и стили: фирменные цвета, типографика, адаптивность под мобильные — что берём из темы, а что переопределяем.
- Функциональность: формы, поиск, интеграции, аналитика — что подключаем штатно, а что требует отдельного решения.
- Ограничения и сроки: приоритеты, этапность, что критично к запуску, а что можно вынести во вторую очередь.
По итогам разговора фиксируем план работ: этапы, состав изменений, точки согласования и порядок проверки результата. Опишите задачу в удобной форме — вернёмся с оценкой и планом.







