Sseopeak

WooCommerce — худшее решение для магазина

WooCommerce начинает невероятно тормозить уже около 500 товаров: база на postmeta огромная и неоптимизированная. WordPress и так медленный движок. Поможем перейти на нормальную CMS или быстрый фреймворк.

WooCommerce — худшее решение для магазина. Его ставят, потому что «это просто плагин к WordPress», а потом каталог упирается в потолок. Магазин невероятно тормозит, как только число товаров приближается к 500. Дальше каждая новая карточка делает хуже и витрину, и админку.

Почему 500 товаров уже много

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

Каталог, фильтр, сортировка по цене и блок «похожие товары» собираются запросами к этой куче. Пока товаров мало, MySQL успевает. Ближе к 500 карточкам, особенно с вариациями и фильтрами, запросы раздуваются: база перебирает мета-поля вместо того, чтобы читать нормальную таблицу товаров. Страница категории открывается секундами, админка при сохранении карточки тоже.

База огромная и не под магазин

У нормального магазина есть таблицы товаров, цен, остатков и заказов со своими индексами. У WooCommerce ядро каталога — универсальные таблицы WordPress, придуманные под посты блога.

  • 01wp_posts хранит и статьи, и товары, и вариации, и вложения. Тип записи — просто метка, а не отдельная схема.
  • 02wp_postmeta — длинный список «ключ — значение». Цена, склад и артикул лежат здесь же, рядом с настройками каких угодно плагинов. Индекс по такому устройству плохо помогает фильтру «красные кроссовки до 5 000».
  • 03Категории и атрибуты сидят в таблицах таксономий. Фильтр по двум свойствам — это ещё несколько соединений.
  • 04Заказы, сессии корзины, задачи Action Scheduler и транзиенты дописывают свои таблицы и раздувают базу даже после того, как витрину почистили.
  • 05Служебные lookup-таблицы WooCommerce появились позже как заплатка: ядро само признало, что по postmeta каталог не ищется. Заплатка не превращает блоговую схему в складскую.

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

WordPress и так тормозной

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

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

Куда переходить

Напишите нам — поможем уйти с WooCommerce на нормальную CMS или на быстрый фреймворк.

  • 01Нормальная CMS для магазина — OpenCart: товары, цены и остатки лежат в своих таблицах, а не в мета-полях записей блога.
  • 02Быстрый фреймворк — Nuxt, Next или Laravel. Каталог и корзина делаются под ваш ассортимент, на запрос не стартует стопка плагинов WordPress.

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

Получить консультацию

Оставьте имя и телефон — разберём сайт, подскажем точки роста и предложим план работ