Интернет-магазин Gegel Intimates

, интернет-магазин

Интернет-магазин Gegel Intimates

Gegel Intimates — московский бренд белья, домашней одежды и натурального шёлка с шоу-румом в центре Москвы. Бренд основали супруги из России и Бразилии, и все модели шьются по собственным дизайнам из европейских материалов. Магазин работает с 2019 года, а с 2023 года его веду я: разработка, интеграции, реклама, скорость и безопасность.

Если коротко, всё, что не шьётся, — на мне.

gegel-katalog.png1280×800, 67 КБ
Каталог шёлковой коллекции
Каталог шёлковой коллекции

Своя тема

За годы магазин оброс плагинами и костылями, и в 2026 году я переработал его на собственной теме gegel, подписанной моим именем.

  • 137 переопределённых шаблонов WooCommerce. Корзина и оформление заказа переписаны на лёгкую блочную вёрстку без таблиц — так они нормально выглядят на телефоне.
  • Своя панель настроек. Менеджер сам меняет контакты, соцсети, бегущую строку над шапкой, блоки преимуществ, сертификаты и главную страницу — без разработчика.
  • Инфоблоки. Таблицы размеров, уход и доставка раньше были зашиты в код. Теперь это отдельные записи, которые подключаются к товару из списка. Двадцать старых страниц перенесены одним скриптом, а старые данные при этом не удалялись — на случай отката.
  • Живой поиск, избранное, подарочная упаковка и сертификаты — всё своё, без тяжёлых плагинов.
  • Доставка по зонам. Зоны доставки включаются и выключаются одной галочкой, а тексты на странице «Доставка и оплата» перестраиваются сами.

Свотчи

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

Недоступные варианты не прячутся, а гаснут и зачёркиваются: сетка не прыгает, и покупатель видит, что такой размер в принципе бывает. Логику выбора сверили перебором со всеми 96 возможными состояниями — расхождений ноль, а потом прогнали весь путь в настоящем браузере вплоть до оформления заказа. Цвет каждого кружка менеджер задаёт сам, через палитру в админке.

gegel-svotchi.png500×560, 10 КБ
Выбор варианта: размер S недоступен в этом цвете — он погашен, но на месте
Выбор варианта: размер S недоступен в этом цвете — он погашен, но на месте

Распродажи по расписанию

Акции «с даты по дату» в WooCommerce включает внутренний планировщик. На практике он срабатывал не в полночь, а в половине первого, и каждый день ещё на полминуты позже. Покупатель, пришедший в 00:05, видел старые цены.

Я поставил свой ночной прогон ровно в 00:01 по Москве, а после него — проверку: скрипт сверяет цену каждого товара с периодом акции и ловит оба вида ошибок — «скидка висит после срока» и «срок идёт, а скидки нет». Для массовых скидок на коллекцию есть отдельный скрипт с пробным прогоном и снимком для отката, а симулятор заранее показывает, что включится и что выключится в заданный момент.

Реклама и аналитика

Рекламу в Яндекс Директе я веду сам, поэтому особенно важно, чтобы аналитика не врала.

Съеденные метки. Часть заказов с рекламы записывалась как пришедшие «по ссылке». Оказалось, старый SEO-редирект срезал рекламные метки раньше, чем их успевала прочитать аналитика. Причём не всегда: страница из кэша отдавалась без редиректа, поэтому поломку долго не замечали. Редирект убрали, а испорченные заказы восстановили, сопоставив время клика в логах сервера со временем начала сессии в заказе.

Объявления в никуда. Поддержка Директа пожаловалась, что объявления ведут на странные адреса вида /product-category/…/feed/, а у сайта «нестрогая микроразметка». Выяснилось, что WordPress сам подсовывал роботу Директа служебные RSS-ссылки, а на страницах каталога вообще не было товарной разметки. Я убрал служебные ссылки, поставил редиректы с уже открученных объявлений на нормальные страницы, добавил в каталог полноценную разметку списка товаров с ценами и наличием и заодно починил robots.txt, который указывал на карту сайта чужого домена.

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

Интеграции

  • amoCRM. Заказ уходит в CRM через очередь, так что сбой CRM не тормозит сайт. Покупатель склеивается с контактом по телефону, а не по почте: однажды гость указал в заказе чужой адрес, и сделка ушла другому человеку.
  • МойСклад. Дважды в день обновляются остатки по артикулу, а фото и описания не трогаются. Если что-то «пропало», это можно найти в почасовых копиях базы.
  • Bride Mood. Свадебный раздел показывает товары только в белом, бежевом и цвете шампань, а карточка сразу берёт фото нужного цвета. При этом свадебные ссылки не попадают в общий кэш и не «портят» обычную версию товара.

Скорость

Страницы каталога отдаются из серверного кэша — примерно три запроса из четырёх вообще не доходят до PHP. Кэш сам прогревается по карте сайта каждые двадцать минут, и страница открывается за 0,15–0,3 секунды.

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

Надёжность и безопасность

  • Каждый час база копируется в облако с проверкой целостности архива и защитой от «подозрительно маленького» дампа, раз в сутки — код и медиа. Каждый прогон отмечается в мониторинге.
  • Осенью 2026 года по интернету пошла волна взломов WordPress через уязвимость wp2shell. Я проверил магазин: ядро обновилось в день выхода патча, следов взлома нет.
  • Заодно закрыл xmlrpc, через который перебирали пароли — полторы тысячи попыток в сутки, — спрятал служебные логи, запретил PHP в папке загрузок и настроил автоматический бан подборщиков паролей и сканеров. Магазин стоит за прокси, поэтому банить приходится не файрволом, а на уровне веб-сервера — иначе бан по адресу просто не сработает.

Истории

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

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