Webvise
Все кейсы
Headless e-commerceИнтернет-магазин одежды6 мин чтения

Перевели WP+Woocommerce на собственное frontend-приложение

Не стали переносить магазин на новую CMS: сохранили WordPress и WooCommerce для управления товарами и заказами, а тяжелый публичный каталог и карточки товаров заменили собственным frontend-приложением. Результат контрольного замера PageSpeed — 96 баллов вместо 40.

Тяжелый Woo loop

WordPress как CMS

Собственный API

Headless-каталог

Нативная карточка

PageSpeed 96

Кратко

FLUIDE — российский бренд женской одежды для спорта и повседневной жизни. Интернет-магазин развивался на WordPress и WooCommerce: в этой системе команда управляла товарами, ценами, остатками, вариациями, заказами и интеграцией с учетным контуром.

Со временем публичная часть сайта стала заметно тяжелее. Каталог зависел от стандартного Woo loop, старого бесконечного скролла, Elementor-шаблонов и нескольких вендорных frontend-плагинов. Каждый из них решал отдельную задачу, но вместе они создавали большой DOM, загружали лишние стили и скрипты, задерживали появление карточек и давали нестабильное поведение на мобильных устройствах.

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

Мы выбрали другой путь: оставили WordPress и WooCommerce в роли CMS и коммерческого backend, но заменили тяжелый публичный frontend собственным headless/light-app слоем. Каталог, архивы категорий, карточки товаров, избранное и ключевые блоки главной стали управляемыми приложениями, которые получают подготовленные данные через собственный API.

Почему сайт нельзя было ускорить одним плагином кеша

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

Это приводило к системным проблемам:

  • каталог создавал тяжелое DOM-дерево еще до того, как пользователь видел товары;
  • карточки и изображения появлялись с задержкой или миганием;
  • старый infinite scroll усложнял возврат на прежнюю позицию;
  • мобильная галерея и desktop-поведение зависели от разных плагинов;
  • обновление одного компонента могло ломать стили или события другого;
  • в браузер попадали ассеты, которые не требовались для текущего сценария;
  • команда была ограничена возможностями и жизненным циклом вендорных решений.

Кеш мог быстрее отдать исходный HTML, но не устранял объем разметки, конкурирующие скрипты и позднюю инициализацию интерфейса. Поэтому мы оптимизировали не отдельные симптомы, а сам способ построения витрины.

Что было важно сохранить

У клиента уже существовал рабочий e-commerce-контур. WordPress и WooCommerce хранили не только карточки товаров, но и вариации по цветам и размерам, цены, остатки, статусы, заказы и данные для интеграций.

Новая архитектура не должна была заставлять контент-команду переучиваться или вести два каталога. Мы зафиксировали несколько принципов:

  • WordPress остается привычной административной системой;
  • WooCommerce остается источником товарных и коммерческих данных;
  • существующие URL каталога и категорий сохраняются;
  • корзина, оформление заказа, личный кабинет и интеграции продолжают работать;
  • frontend можно развивать независимо от Woo-шаблонов и Elementor;
  • миграция выполняется поэтапно без остановки продаж.

Такой подход позволил обновить именно ту часть системы, которая ограничивала скорость и UX, не переписывая работающий бизнес-контур с нуля.

Как построили новую витрину

Оставили WordPress и WooCommerce управляющим слоем

Менеджеры по-прежнему создают товары, редактируют описания, загружают фотографии, настраивают категории, цены, размеры и цвета в знакомой админке. WooCommerce продолжает отвечать за товарную модель, остатки, корзину и заказы.

Публичная страница больше не обязана выводить стандартный Woo loop. WordPress формирует легкую оболочку страницы и конфигурацию приложения, а сами товарные данные приходят через отдельные endpoint-ы.

Создали собственный API и индекс карточек

Для каталога разработали endpoint local-products, который возвращает подготовленные данные карточек: изображения, цены, наличие, цвета, бейджи, ссылки и служебные признаки. Для одиночной страницы используется отдельный local-single-product.

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

Frontend получает ровно тот объем данных, который нужен для текущего экрана, а backend сохраняет единый источник истины.

Заменили Woo loop собственным приложением

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

В приложении реализовали:

  • единый каталог для магазина, категорий и товарных меток;
  • cursor-based подгрузку и предварительную загрузку следующих данных;
  • восстановление позиции после возврата из карточки товара;
  • отдельное поведение фильтров и сортировки на desktop и mobile;
  • галерею из нескольких фотографий с hover на desktop и swipe на mobile;
  • ленивую гидрацию и освобождение тяжелых медиа вне viewport;
  • собственное избранное без вендорного frontend-плагина;
  • skeleton-состояния без скачков товарной сетки.

В результате каталог перестал зависеть от стандартного Woo infinite scroll. При отключенном JavaScript сохраняется fallback-разметка, поэтому отказ одного frontend-сценария не превращает страницу в пустой экран.

Пересобрали карточку товара

Следующим этапом мы отказались от Elementor single-product template и собрали нативную карточку в теме. Она использует собственную галерею, выбор цвета и размера, AJAX-добавление в корзину, избранное, лист ожидания и блок связанных товаров.

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

Добавили выборочный кеш

Полное кеширование всего WooCommerce-магазина рискованно: карточка товара, корзина, checkout и личный кабинет зависят от сессии и актуального состояния пользователя.

Мы сделали selective full-page cache только для главной и архивов каталога. Мобильная и desktop-версии используют разные ключи. Динамические Woo-сценарии, REST, AJAX, авторизованные пользователи и предпросмотр из кеша исключены.

Так публичные страницы открываются быстро, но кеш не вмешивается в корзину, оформление заказа и персональные данные.

PageSpeed: с 40 до 96

До переработки Google PageSpeed оценивал производительность витрины в 40 баллов. Сохранившийся отчет также показывает 81 балл за специальные возможности, 77 за рекомендации и 92 за поисковую оптимизацию.

Фактический отчет Google PageSpeed до переработки витрины FLUIDE: производительность 40 баллов.

После перехода на новый витринный слой контрольный отчет показал 96 баллов производительности. В сохраненном отчете также зафиксированы 79 баллов за специальные возможности, 96 за рекомендации и 92 за поисковую оптимизацию.

Фактический отчет Google PageSpeed после переработки витрины FLUIDE: производительность 96 баллов.

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

Что изменилось для бизнеса и команды

Проект не ограничился заменой шаблона каталога. У интернет-магазина появился собственный управляемый frontend-контур, который можно развивать без постоянной борьбы с Woo-разметкой и конфликтами вендорных плагинов.

После перехода:

  • PageSpeed Performance вырос с 40 до 96 в контрольном замере;
  • WordPress и WooCommerce сохранили роль единой административной системы;
  • контент-команда продолжила работать с товарами в привычной среде;
  • каталог и карточка товара перестали зависеть от Elementor frontend;
  • изображения и товарные данные загружаются по мере необходимости;
  • поведение галереи, фильтров, сортировки и избранного стало единым;
  • мобильные сценарии получили отдельную продуманную логику;
  • frontend стало возможно развивать независимо от стандартных Woo-шаблонов;
  • перенос на другую CMS и повторная сборка всех интеграций не потребовались.

Почему это не просто «ускорение WordPress»

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

Headless-подход не обязательно означает полный отказ от WordPress или отдельный сайт на новом домене. В этом проекте мы провели границу внутри существующей системы: сохранили зрелый backend и заменили ту часть, которую непосредственно ощущает покупатель.

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

WooCommerce стал тормозить развитие магазина?

Разберем текущий frontend, сохраним рабочую админку и бизнес-процессы и предложим архитектуру быстрой витрины без обязательного переезда на новую CMS.

Поддержка интернет-магазинов

Приложение Webvise

Личный кабинет всегда под рукой

Вам не нужно искать письма, вспоминать статусы задач или уточнять, что происходит с проектом. В мобильном приложении личного кабинета Webvise все рабочие коммуникации, доступы, отчеты, мониторинг и история работ собраны в аккуратном интерфейсе.

Задачи, сообщения, отчеты и мониторинг в одном личном кабинете
Push-уведомления по важным событиям проекта
Удобный доступ с iPhone и Android без лишней навигации
Открыть личный кабинет

Установка для iOS и Android доступна клиентам Webvise в настройках личного кабинета.

Чат и отправка сообщений в приложении Webvise
Мониторинг ресурсов в приложении Webvise
Профиль клиента в приложении Webvise
iOS/AndroidPushЧат
Ускорение WooCommerce: PageSpeed с 40 до 96 — кейс