Мы разобрали тему Online Store 2.0 одного магазина, который давно ведём, после четырёх лет правок несколькими подрядчиками. На диске она занимала 807 файлов и 18 МБ. Интереснее, впрочем, другая пара чисел: 323 шаблона в формате JSON описывали всего 193 разные структуры (собственный разбор локальной копии темы, 27.08.2026).
Эти сто тридцать лишних шаблонов появились не по ошибке. Они появились потому, что разовую задачу раз за разом решали постоянным способом - и это болезнь, которую можно измерить раньше, чем она проявится в цене каждой следующей правки.
Структура, а не файл: как это считается
Структура шаблона - это набор типов секций, включённых в шаблоне. Два шаблона с одинаковой структурой делают одно и то же и отличаются только настройками: картинкой, заголовком, цветом.
Когда структур примерно столько же, сколько файлов, тема в порядке - каждый шаблон описывает свой тип страницы. Когда структур заметно меньше, это сигнал, что контент складывают в шаблоны вместо данных.
Самый ясный случай из разбора: 67 шаблонов категорий имели абсолютно одинаковую тройку секций и отличались четырьмя значениями - картинкой для десктопа, картинкой для мобильного, заголовком и его цветом.
Баннер сделали шаблоном вместо поля в админке
У этих 67 файлов одна причина, и это решение, а не небрежность. Кому-то понадобилась другая шапка на одной категории, быстрее всего было скопировать шаблон, и это сработало. Во второй раз тоже. После шестидесяти семи повторений возникла система, которую никто не проектировал.
Правильное решение - один шаблон и четыре метаполя на коллекции. Контент тогда принадлежит коллекции, где его может менять персонал магазина, а не файлу, для которого нужен разработчик.
Разница в эксплуатации конкретна. Изменение раскладки баннеров в первом случае делается в одном файле, во втором - в шестидесяти семи, а шестьдесят семь ручных правок означают, что про три из них забудут.
Тема после четырёх лет: что в ней на самом деле
| Элемент темы | Количество | Из них мёртвых |
|---|---|---|
| Секции | 149 | 34 |
| Сниппеты | 102 | 31 |
| Шаблоны | 341 | - |
| Файлы в assets/ | 138 | 15 (312 КБ) |
| Файлы локализаций | 52 | - |
| Theme blocks | 19 | - |
Мёртвый означает, что имя файла не встречается больше нигде в теме: секцию не вызывает ни один шаблон и ни один {% section %}, сниппет - ни один render и ни один include. Это не оценка, это поиск строки по всей папке.
Почти каждая четвёртая секция и почти каждый третий сниппет были ни к чему. Плата за них берётся не скоростью - на страницу они не попадают, - а временем. Разработчик, которому надо найти место для новой функции, проходит и эти 65 файлов.
723 выключенные секции врут о том, что на странице
В JSON-шаблонах остаются и секции с "disabled": true. Они выглядят как часть страницы, но не отрисовываются. В разбираемой теме их было 723 из 3 192 вставленных секций, то есть 22,6 %.
Одна находка из этой группы стоит отдельного абзаца. Секция main-page, та самая, которая выводит текст страницы, заданный в админке, была выключена в 136 шаблонах страниц из 137.
Практически это значит, что жалоба «исправил текст в админке, а на сайте не изменилось» была не ошибкой кэша и не ошибкой переводов. Это было следствие. Прежде чем искать причину в кэше, проверьте, не выключена ли секция, которая этот контент выводит.
Не переведено 50 %? Половина этого числа никогда не выйдет в свет
Это ловушка, в которую попадает каждый, кто считает локализации скопом. У темы было 52 файла переводов, и грубый расчёт давал от 50 до 58 % непереведённых строк.
После разделения результат выглядит иначе. У 24 файлов было ровно одинаковое число недостающих ключей - 264 из 564: это отпечаток локализации, которую никто никогда не трогал, то есть языков, которые магазин не публикует. У пяти реально используемых языков не хватало от 8 до 12 %.
Разница между «половина темы не переведена» и «у живых языков не хватает десятой части» - это разница между двумя разными коммерческими предложениями. Никогда не отправляйте клиенту грубое число, пока не разделите локализации на опубликованные и складские.
Разветвлённые шаблоны вернутся на втором рынке
Пока у магазина одна витрина, избыток шаблонов раздражает, но терпим. На второй витрине он превращается в расход, который никто не заложил в бюджет.
На живой паре витрин мы замерили, что 255 из 264 общих шаблонов между рынками разошлись (сравнение экспортов обеих тем, 26.07.2026). Сто тридцать лишних шаблонов - это сто тридцать мест, где два магазина могут различаться, и они различаются, потому что каждую правку кто-то должен сделать дважды.
Сведение к метаполям решает эту проблему не только задним числом, но прежде всего наперёд: что не шаблон, то не может разойтись.
Пять вопросов, по которым видно, что вы на этом пути
Ответ «да» на два и более из них означает, что тема вышла из-под контроля и уборка окупится раньше, чем следующая функция.
- Появляется ли новый шаблон, когда надо поменять картинку или заголовок?
- В templates/ файлов больше, чем в sections/ и snippets/ вместе?
- Приходится ли персоналу звать разработчика из-за текста на категории?
- Боится ли кто-то удалить файл, потому что не ясно, что его вызывает?
- Делается ли одна и та же правка в двух витринах отдельно?
Самый быстрый способ проверить это в скачанной копии темы:
ls templates/*.json | wc -l # сколько шаблонов
rg -c '"disabled": true' templates/*.json # сколько секций выключено
rg -o '"type": "[^"]+"' templates/*.json | sort -u | wc -l # типы секций
Если третье число выйдет заметно меньше первого, вы имеете дело ровно с тем, о чём вся эта статья.
Что делать вместо шаблонов
Порядок из четырёх шагов, и он намеренно не заканчивается удалением. Сначала надо выяснить, что живое.
- Измерьте структуру, а не число файлов. Сгруппируйте шаблоны по набору типов секций. Группы больше пяти файлов - кандидаты на объединение.
- Отделите переменное от структурного. Картинка, заголовок, цвет и ссылка - в метаполя коллекции или товара. В шаблон идёт только то, что меняет раскладку.
- Объединённые шаблоны выкатывайте группами и после каждой группы проверяйте категории на сайте. Объединение семидесяти шаблонов разом проверить нельзя.
- Мёртвый код удаляйте в последнюю очередь, с поиском имени по всей теме и с резервной копией. Секцию, которую никто не вызывает, может вызывать приложение.
Theme blocks решают эту проблему напрямую: раскладка собирается в редакторе, вместо того чтобы под каждый вариант заводить файл. В разбираемой теме их было 19 - то есть инструмент был доступен, просто им не пользовались.
Чем платят за уборку
Честно сказать вслух. Уборка темы не видна. Она не добавит функции, не изменит дизайн, на скриншотах до и после одно и то же. Она плохо продаётся и именно поэтому откладывается, пока каждая правка не станет вдвое дороже.
Она вернётся на следующем заказе, когда работа сделается быстрее, потому что понятно, что живое. Это окупаемость в месяцах, а не в днях, и если вам обещают иначе - считают другой проект.
Вторая сторона компромисса: объединение шаблонов отнимает у персонала возможность накликать исключение без разработчика. Метаполя - это порядок, но и ограничитель, и кому-то этот ограничитель будет мешать.
Мы принимаем темы после других подрядчиков
Пришлите нам адрес магазина или экспорт темы. Вернём число шаблонов против числа структур, список мёртвых секций и сниппетов и оценку, сколько из этого можно объединить без вмешательства во внешний вид.
Что мы на Shopify строим и что проверяем при приёме магазина, описано на странице создания интернет-магазина. Если вас больше волнует скорость, начните со статьи о том, почему быстрый Shopify тормозит, и с аудита приложений.
Напишите на info@lamapixel.com или позвоните +420 775 599 009.