Tissura Интернет-магазинПремиум-сегмент Laravel

Tissura: интернет-магазин премиальных тканей на Laravel и Nuxt

Федеральная сеть салонов премиальных тканей переезжала со старого движка на собственную связку Laravel + Nuxt. Задача — сохранить позиции в поиске, ускорить каталог и собрать оплату, доставку и товарный учёт в один контур.

Бюджет: не разглашается
Видеообзор проекта: каталог тканей и карточка товара в новой системе

Результат в цифрах

Старые адреса после переезда
100%сохранено
карта 301-переадресаций собрана до релиза
Внешние системы в контуре
5интеграций
1С, ЮKassa, СДЭК, DaData, поиск по каталогу
Обмен товарами и остатками
вручную →
Автопо расписанию
выгрузки из 1С больше не нужны
Переход с эквайринга Сбербанка
Сбербанк →
ЮKassa
собственная интеграция по API, без готового модуля

Стек проекта

Laravel Nuxt.js Vuetify Docker Git MariaDB 1С ЮKassa СДЭК DaData Telescope MailHog

Исходная ситуация

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

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

Что сделали

Спроектировали интерфейс каталога и карточки товара под сложные свойства тканей, собрали фронтенд на Nuxt и бэкенд на Laravel, написали собственную админку. Ни одна готовая CMS не умеет работать с товарной матрицей такого размера.

Настроили обмен с 1С по товарам и остаткам, подключили оплату, доставку и подсказки адресов, а до релиза собрали карту переадресаций со всех старых URL.

Автоматизация

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

SEO-атрибуты наследуются: заполнил у раздела — у дочерних страниц подставилось. Ручная работа уходит только на верхний уровень каталога.

Премиальные ткани продаются не кнопкой «в корзину», а консультацией: покупателю важно понять состав, плотность, поведение в носке и то, как ткань выглядит при дневном свете. Интернет-магазин Tissura нужно было перестроить так, чтобы онлайн-каталог работал наравне с салоном и при этом не потерял ни одной позиции, заработанной старым сайтом.

Клиент и контекст

Tissura — федеральная сеть салонов премиальных европейских тканей и фурнитуры с головными офисами в Санкт-Петербурге и Москве. Это не масс-маркет: ассортимент строится вокруг коллекций европейских производителей, а средний чек и цикл сделки заметно выше, чем в обычном интернет-магазине.

Каталог такой структуры плохо ложится в готовые решения. У одной ткани одновременно меняются состав, плотность, ширина, цвет и назначение, а покупатель ищет не «ткань», а «плотный хлопок шириной 150 см оттенка пыльной розы». Чем больше свойств, тем важнее, как именно каталог их показывает.

Задача: что не работало на старом сайте

  • Каталог не держал товарную матрицу. Фасетный отбор по десяткам свойств на старом движке либо тормозил, либо не строился вовсе.
  • Товарный учёт жил отдельно. Цены и остатки приходилось синхронизировать с 1С вручную, с задержкой и с ошибками.
  • Поиск по каталогу не выручал. Покупатель, который знал артикул или название коллекции, уходил перебирать разделы.
  • Переезд грозил потерей позиций. Смена движка без карты переадресаций означает, что все накопленные адреса отдают 404, а поисковая система заново пересобирает сайт с нуля.
  • Оплата упиралась в один эквайринг. Сбербанк уходил на ЮKassa, и переход нужно было провести без остановки продаж.

Как мы подошли к решению

Мы не стали искать готовую CMS под эту задачу: под неё не подходит ни одна коробка. Вместо этого собрали собственную систему на связке Laravel (бэкенд и REST API) и Nuxt.js (фронтенд), упаковали всё в Docker и развели среду разработки и прода так, чтобы релиз не зависел от настроек конкретного сервера.

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

Своя админка вместо готовой CMS

Nuxt и Vuetify дали гибкий интерфейс управления: каталог, коллекции, свойства товаров и контентные страницы редактируются из одной панели. Кастомные поля позволили описать свойства тканей так, как они устроены в реальности, без костылей вида «характеристика № 7».

Фасетный фильтр по сложным свойствам

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

Раздел «Фурнитура» в каталоге интернет-магазина тканей Tissura
Раздел «Фурнитура» в каталоге интернет-магазина тканей Tissura Открыть в полном размере

Интернационализация и версионирование API

Сайт работает с несколькими языковыми версиями: интерфейсные строки и контент переводятся на стороне фронтенда и бэкенда независимо. REST API версионирован: новые интеграции можно подключать, не ломая работающие.

Реализация: по шагам

Перенос данных со старой системы

Миграция включала заказы, товары, пользователей и историю. Переносили не «названия и цены», а всю структуру: категории, свойства, привязки и остатки, чтобы после релиза не пришлось вбивать каталог заново.

Обмен с 1С

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

Карточка ткани в каталоге Tissura: состав, плотность и свойства материала
Карточка ткани в каталоге Tissura: состав, плотность и свойства материала Открыть в полном размере

Оплата, доставка, адреса

Платёжный контур начинали на Сбербанке, а затем перевели на ЮKassa: интеграцию написали сами, по API, а не готовым модулем. Такой подход даёт полный контроль над сценариями: частичные возвраты, повторные попытки оплаты, нестандартные случаи. Доставку подключили через СДЭК, подсказки адресов через DaData. Поиск по каталогу вынесли на внешний сервис, чтобы он не зависел от нагрузки на сайт.

Способы оформления заказа

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

Тестирование и отладка

Проект вёл полный цикл тестов: unit и feature. Отправку транзакционных писем проверяли через MailHog: до прода это ловит все проблемы с шаблонами и очередями. Внутренние процессы Laravel отслеживали через Telescope, тесты запускали параллельно через Paratest.

Сохранить позиции при переезде

До релиза мы собрали структуру нового сайта и карту переадресаций со всех старых адресов. Для SEO это главное: смена движка сама по себе не снижает позиции — их снижает потеря URL. Каждая старая страница получила постоянный редирект на новую.

Страница авторизации покупателя в интернет-магазине Tissura
Страница авторизации покупателя в интернет-магазине Tissura Открыть в полном размере

SEO-атрибуты с наследованием

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

Промо-блоки акций на страницах каталога тканей Tissura
Промо-блоки акций на страницах каталога тканей Tissura Открыть в полном размере

Результат

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

Дальше проект живёт на поддержке: расширяем функциональность, добавляем новые сценарии покупки и обновляем контент.

Показатели: до и после

Метрики из проекта — «до» и «после», с источником замера. Данные те же, что в кейсе ниже.

Показатель До После Срок / источник
Старые адреса после переезда — 100% сохранено карта 301-переадресаций собрана до релиза
Внешние системы в контуре — 5 интеграций 1С, ЮKassa, СДЭК, DaData, поиск по каталогу
Обмен товарами и остатками вручную Авто по расписанию выгрузки из 1С больше не нужны
Переход с эквайринга Сбербанка Сбербанк ЮKassa собственная интеграция по API, без готового модуля

Что не сработало

Честно о ходе проекта — три места, где всё оказалось сложнее плана:

  • Готовые CMS не подошли. Фасетный отбор по десяткам свойств на старом движке либо тормозил, либо не строился вовсе — под эту товарную матрицу не подошла ни одна коробка, систему писали на Laravel и Nuxt.
  • Обмен с 1С не закрыл всё. Позиции, которые есть у нескольких поставщиков, потребовали отдельной логики складов — иначе остатки затирали друг друга.
  • Переезд грозил просадкой. Смена движка без карты переадресаций отдала бы все старые адреса в 404: карту 301-редиректов собрали до релиза, а не после.

Что забрали в другие проекты

  • Прототип до визуала. Чёрно-белый интерактивный макет согласуется быстрее и снимает половину правок на этапе дизайна.
  • Карта редиректов — до релиза, а не после. Это единственный способ переехать без просадки органики.
  • Своя интеграция вместо готового модуля — там, где платёжные сценарии нестандартные.

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

Можно ли перенести интернет-магазин на новый движок без потери позиций в поиске?

Да. Условие — собрать карту 301-переадресаций со всех старых адресов до релиза и сохранить структуру разделов. В проекте Tissura это позволило перейти на Laravel и Nuxt, не потеряв накопленную органику.

Зачем писать свою CMS, если есть готовые?

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

Как устроен обмен с 1С в интернет-магазине тканей?

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

Разработка и доработка сайтов — направление, в котором шёл проект. Если у вас похожая задача, напишите нам: разберём ваш случай и предложим решение.

Хотите такой же результат?

Начнем с аудита точек роста — покажем, где у вашего сайта утекает трафик.

Получить аудит точек роста →