Разработка интернет-магазина
Интернет-магазин — это не шаблон с корзиной и формой оплаты. Это операционная система для бизнеса: управление складом, ценообразование, логистика, маркетинг, аналитика — всё это должно работать согласованно и без ручного вмешательства там, где его можно избежать. Разработка начинается с понимания бизнес-модели, а не с выбора движка.
Выбор технологического стека
Вопрос «на чём делать» решается исходя из трёх факторов: объём каталога, сценарии интеграций, планируемая нагрузка. Типовые варианты:
| Сценарий | Стек | Обоснование |
|---|---|---|
| До 1 000 SKU, B2C, быстрый старт | Shopify + кастомный фронт на Next.js | Shopify берёт на себя платежи, хостинг, PCI DSS |
| 1 000–50 000 SKU, сложные фильтры | Laravel/Django + React/Vue, Elasticsearch | Гибкость в модели данных, полнотекстовый поиск |
| Высоконагруженный маркетплейс | Microservices, Kafka, отдельные сервисы корзины/заказов | Масштабирование по компонентам |
| B2B с личными кабинетами и прайс-листами | Custom ERP-интеграция, контрактные цены | Стандартные решения не закрывают логику ролей |
Для большинства проектов среднего размера оптимален монолит с чёткими границами модулей — быстрее в разработке, проще в поддержке.
Каталог и структура данных
Модель данных каталога определяет всё остальное. Распространённая ошибка — делать таблицу products с колонками color, size, material напрямую. Это работает до первого нестандартного товара.
Правильный подход: EAV (Entity-Attribute-Value) или JSONB-атрибуты в PostgreSQL. Пример схемы:
products (id, sku, slug, base_price, status)
product_variants (id, product_id, sku, price_delta, stock)
variant_attributes (variant_id, attribute_id, value)
attributes (id, name, type, filterable, sortable)
Для каталогов с разнородными товарами (электроника + одежда + мебель) используем product types — каждый тип задаёт собственный набор атрибутов. Именно так работает Akeneo PIM, который подключается при каталогах от 10 000 SKU.
Поиск и фильтрация
Стандартный SQL-поиск LIKE '%запрос%' не годится даже для каталога на 500 позиций — нет релевантности, нет морфологии, нет синонимов. Опции:
-
PostgreSQL FTS с
ts_vector— подходит до ~5 000 товаров, настройка под русский язык черезispellилиhunspell - Elasticsearch / OpenSearch — full-featured: нечёткий поиск, буст по полям, синонимы, перколятор для «похожих товаров»
- Typesense — проще в эксплуатации, хорошо для небольших команд
Фильтры по атрибутам строим через агрегации Elasticsearch: пользователь видит только те значения фильтров, которые дадут ненулевой результат. Это называется faceted search — стандарт для ecommerce.
Корзина и чекаут
Корзина — место, где теряется 60–80% конверсии. Критичные решения:
Гостевая корзина хранится в Redis с TTL 30 дней, при авторизации мержится с серверной. Без гостевой корзины регистрация становится барьером.
Чекаут в один экран статистически лучше многошагового для B2C. Для B2B наоборот — нужны шаги: реквизиты, адрес доставки, одобрение менеджера.
Расчёт доставки в реальном времени: API СДЭК, Boxberry, Nova Poshta, DHL. Ставки зависят от веса, габаритов, точки отправления — это вычисляется на лету, не хранится в таблице.
Платёжный шлюз: Stripe для международных, CloudPayments / ЮKassa для РФ/СНГ, Fondy / WayForPay для Украины. Интеграция идёт через webhook-подтверждения, статус заказа меняется только после верификации подписи.
Управление заказами
Жизненный цикл заказа — это конечный автомат (state machine). Состояния: draft → pending_payment → paid → processing → shipped → delivered → completed. Плюс боковые ветки: cancelled, refunded, on_hold.
Библиотеки: winzou/state-machine для Laravel, xstate если часть логики на фронте. Каждый переход состояния — событие, которое тригерит уведомления (email, SMS, push), обновление склада, запись в лог.
Интеграции
Типовой набор для полноценного магазина:
- 1С / МойСклад / Retailiо — синхронизация остатков и цен. Обычно через очередь (RabbitMQ/Redis Queue) с интервалом 5–15 минут
- CRM (AmoCRM, HubSpot) — автоматическая передача заказов и лидов
- Email-маркетинг (Klaviyo, Mailchimp, Sendpulse) — триггерные цепочки: брошенная корзина, постпродажа, реактивация
- Аналитика: GA4 с Enhanced Ecommerce + серверный GTM для точных данных без влияния блокировщиков рекламы
Производительность и SEO
Страницы каталога должны кешироваться. Стратегия: stale-while-revalidate — отдаём кеш немедленно, обновляем в фоне. Redis для серверного кеша, CDN (Cloudflare) для статики.
SEO-специфика ecommerce:
- Канонические URL для страниц с фильтрами — без этого поисковики видят тысячи дублей
-
hreflangдля мультиязычных магазинов - Schema.org разметка:
Product,Offer,AggregateRating— влияет на rich snippets в выдаче - Пагинация через
rel="next"/"prev"или бесконечная прокрутка с SSR-рендером первого экрана
Сроки и этапы
Типовой интернет-магазин среднего масштаба (1 000–10 000 SKU, стандартный чекаут):
- Аналитика и проектирование — 2–3 недели: ТЗ, wireframes, схема данных, выбор интеграций
- Бэкенд: каталог + корзина + заказы — 4–6 недель
- Фронтенд — 4–6 недель параллельно или последовательно
- Интеграции (1С, платёжка, доставка) — 2–4 недели
- Тестирование и запуск — 1–2 недели
Итого: 12–20 недель для полноценного проекта без готовых шаблонов. Проекты на Shopify с минимальными кастомизациями — 4–8 недель.
Ключевой принцип: интернет-магазин запускается не тогда, когда готово всё, а тогда, когда готово достаточно для первых продаж. Остальное — итерации.







