Как мы построили B2B-каталог с семантическим поиском — и что дало скорость при тиражировании на три бренда

Как мы построили B2B-каталог с семантическим поиском — и что дало скорость при тиражировании на три бренда

Один каталог для дистрибьютора отопительного оборудования: разбираем, какой функционал получился и как решение довели до трёх других брендов, пока клиент готовил данные для запуска первого сайта

Привет, я Антон Фокин, CEO Qtim. Расскажу, какой B2B-каталог мы собрали для дистрибьютора отопительного оборудования, что он умеет и как мы успели повторить его ещё для трёх брендов, пока клиент готовил товарные данные для первого запуска.

Клиент — дистрибьютор четырёх брендов, каталог на 900+ товаров

Как мы построили B2B-каталог с семантическим поиском — и что дало скорость при тиражировании на три бренда

Заказчик — официальный дистрибьютор оборудования четырёх производителей: «Тепломаша», Sonniger, Volcano и WDB. У него уже работали сайты на старых технологиях: дизайн устарел, навигация была неудобной, а к производительности появились новые требования. По оценке заказчика, другие дистрибьюторы ориентировались на его старые сайты как на пример — новый интерфейс должен был снова выделяться среди конкурентов. Удобство оценивали по конкретным действиям: насколько быстро посетитель находит товар, применяет фильтры, собирает корзину и заполняет заявку.

Первым запустили каталог «Тепломаша» — 914 товаров, 52 характеристики. Исходными материалами стали прежние версии сайтов, референсы и товарные данные; Qtim отвечал за проектирование, дизайн, фронтенд, бэкенд, административную часть, тестирование и запуск.

В 2025 году проектирование шло в июле, дизайн — в июле и августе, разработка — с августа по октябрь. На пике в команде были два бэкенд-разработчика, два фронтенд-разработчика, дизайнер, два QA, фронтенд- и бэкенд-техлиды, проджект-менеджер и DevOps-инженер.

Семантический поиск вместо точного совпадения слов

Поиск и подсказки строятся на Elasticsearch. Для каталога такого масштаба это дало семантический поиск: система понимает запрос, даже если пользователь не попал в точную формулировку — важно для B2B-покупателя, который ищет оборудование по модели, а не по маркетинговому названию.

Пользователь находит товар, применяет фильтры, собирает корзину — сервер сразу считает стоимость. После отправки корзина превращается в заявку с приложенными файлами и попадает в админку, где проходит четыре статуса: новая, в работе, завершена, отменена. Итоговую цену в B2B с оборудованием под заказ на сайте не считают принципиально — она зависит от объёма, типа покупателя и условий доставки, поэтому заявка с подключением менеджера и есть рабочий сценарий.

Товарные данные обновляются без участия разработчика

Подрядчики клиента готовят JSON с товарами, категориями, атрибутами и изображениями; цены поступают отдельным XLSX. После загрузки позиции автоматически попадают в индекс Elasticsearch. Заявки, контент страниц и сведения о дилерах хранятся в базе сайта; новые выгрузки обновляют только товарный контур и цены.

В каждом бэкенде развёрнута панель Orchid: товары, категории, атрибуты, связанные позиции, страницы, дилеры, заявки, анкеты, пользователи и роли. Сотрудники клиента редактируют каталог, собирают страницы из блоков, меняют SEO-поля, обрабатывают заявки и анкеты, ведут дилеров и управляют доступами — без участия разработчика. Версионирование хранит содержимое страницы, блоки, SEO-данные, автора и комментарий к изменению; история цен ведётся отдельно.

Технологии, которые держат каталог быстрым при сотнях позиций

Каталог рендерится на сервере через Nuxt, Nuxt Image оптимизирует изображения для сотен товарных карточек с фото, а Elasticsearch отвечает за поиск и подсказки. Sentry отслеживает ошибки в проде; сборка и выкладка идут через GitLab CI и Docker — это и позволяет откатывать или докатывать изменения без ручной работы на сервере.

Решение повторили для трёх брендов без нового цикла проектирования

Как мы построили B2B-каталог с семантическим поиском — и что дало скорость при тиражировании на три бренда

Ещё до релиза «Тепломаша» клиент попросил перенести решение на Sonniger, Volcano и WDB. Команда взяла первый сайт за эталон: у каждого бренда свой фронтенд, бэкенд, база, пайплайн развёртывания и админка — восемь репозиториев на четыре независимых контура. Структура модулей, схемы БД, API, работа с S3 и Elasticsearch и каркас фронтенда переиспользованы; свои у каждого бренда — брендинг, контент и часть интерфейса.

Такое разделение позволяет каждому бренду выпускать функции и переживать сбои независимо — а решение для новых брендов не пришлось проектировать заново: разворачивали готовый эталон.

Репозитории Sonniger, Volcano и WDB создали и задеплоили в сентябре 2025 года — весь цикл уместился в один месяц.

«Тепломаш» в проде, три бренда ждут товарные данные

В продакшене работает «Тепломаш»: SEO адаптировали со старой версии без потери позиций. Проекты для Sonniger, Volcano и WDB собраны и ждут товарных выгрузок от клиента — архитектурно контур готов запускать все четыре бренда.

Когда имеет смысл строить решение так

Отдельные контуры на переиспользуемой архитектуре оправданы, когда брендам нужны независимые релизы, а решение важно тиражировать быстро — как в этом проекте. Если все сайты развивает одна команда и они выходят одним циклом, эффективнее общее ядро: тогда цена в том, что общие исправления приходится переносить между контурами вручную, перевешивает выигрыш в скорости запуска.

Дальше заказчик планирует расширить структуру товаров, добавить характеристики, перестроить фильтры и запустить кабинет дилера.

Если выбираете архитектуру для нескольких брендов, можем разобрать проект.

1