Магазин на 10 000+ товаров: каталог, карта сайта, скорость
Большой каталог ломается не там, где его заливают, а там, где его читают — покупатель и краулер. 31 июля 2026 года мы сняли показатели с живых магазинов: 54 302 товара и 635 категорий отдают первый ответ за 413,8 мс; 55 321 товарная страница на другом магазине - за 840,5 мс; 116 841 адрес – за 1 544,5 мс. Тот же движок, разные кэш, тема и количество модулей. Работа здесь не «сделать магазин», а держать три вещи одновременно: импорт, не кладущий сервер, карту сайта без дублей и страницу категории, которая собирается быстрее секунды. Ориентир по сроку – от 40 рабочих дней; объем зависит от того, сколько адресов у вас действительно, а это видно только после разбора выгрузки.
поиск OpenCart дал 54 501–54 600 позиций, расхождение 0,4%
Показатели сняты нашим замером на живых сайтах соответствующего масштаба.
после бесплатного аудита
Стоимость
30
Гарантия
дней после подписания акта
54 302
Самый большой каталог, который мы мерили
товары и 635 категорий при TTFB 413,8 мс
индекс из 32 файлов, 110 096 адресов на два языка
Карта сайта того же магазина
поиск OpenCart дал 54 501–54 600 позиций, расхождение 0,4%
Кросс-проверка каталога
дубли адресов: 33 493 записи на 8 690 уникальных
Что ломается чаще всего
40–70
Ориентир
рабочих дней; смета после разбора выгрузки
Этапы работы
Прозрачные этапы с согласованием на каждом шагу
Общий срок:40–70 дней
1
Аудит каталога и измерение текущего состояния
4–6 рабочих дней
Считаем адреса в карте сайта, уникальные карты, дубли, снимаем TTFB и вес HTML. Это база, с которой потом сравниваем результат в акте приемки.
2
ТС и схема импорта
4–6 рабочих дней
Мапинг полей прайса на поля OpenCart, правила категорий и атрибутов, расписание обновления. Здесь же решаем, что делать с позициями, которых нет налицо.
3
Прототип каталога и фильтра
4–7 рабочих дней
Структура категорий, набор характеристик фильтра, поведение погинации. Согласны с дизайном: переделывать фильтр после верстки дорого.
4
Дизайн и верстка
8–14 рабочих дней
Страница категории, карточка товара, ждут. Целевой вес страницы фиксируем в ТС: в выборке разброс HTML на том же движке — от 103,2 до 751,2 КБ.
5
Сборник магазина и интеграции
9–16 рабочих дней
Оплата, доставка, аналитика, фиды. Параллельно – индексы MySQL и кэш под фактический объем каталога.
6
Импорт каталога и чистка дублей
7–14 рабочих дней
Заливка батчами с журналом ошибок, сверка количества двумя методами, сборка sitemap-индекса подкартами, canonical на дублях.
7
Погрузочная проверка, передача, запуск
4–7 рабочих дней
Повторные замеры TTFB и вес HTML, проход сценария импорта с вашим менеджером, передача доступов и инструкции.
Технологии и интеграции
На чём строим и с чем это соединяется
Стек
OpenCart 4.x – ставим по умолчанию
OpenCart 3.x – когда нужен модуль, которого под 4.x еще нет
PHP
MySQL
nginx
HTTP/2
Cloudflare
sitemap-индекс с подкартами по 3 000 URL
ocmod
модули NeoSeo
темы chameleon, revolution, UniShop
Интеграции
LiqPay
monobank «Покупка по частям»
безналичный расчет по НДС
рассрочка онлайн
Новая Почта
Meest Express
Rozetka Delivery
площадка Rozetka
интеграция с 1С (остатки и цены)
Google Tag Manager
GA4
Google Ads
Binotel
eSputnik
Google Sign-In
Что входит
Полный перечень работ и того, что вы получаете на выходе
Аудит текущего каталога: сколько реально карточек, сколько адресов в карте сайта, сколько из них дубли
Консольный импорт прайса батчами с журналом ошибок — без загрузки через админку
Мапинг полей CSV или XML на поля OpenCart: артикул, цена, остаток, категория, атрибуты
Расписание обновления цен и остатков: ежедневно или ежечасно, в зависимости от того, как быстро двигается состав
Фильтр по характеристикам с кэшированным подсчетом, чтобы счетчик у значения не перечислялся на каждый клик
Sitemap-индекс с подкартами по 3 000 адресов: отдельно товары, категории, информационные страницы
Чистка дублей: одна карточка — один канонический адрес, остальные закрыты canonical
Просмотр индексов MySQL и кэша категорий под фактический объем каталога
Замеры TTFB и весы HTML страницы категории до и после зафиксированы в акте приемки
Передача: доступы, инструкция по импорту, проход сценария обновления прайса с вашим менеджером
Когда эта услуга не подходит
Что не входит в работу — чтобы не было сюрпризов на сдаче
Наполнение карт контентом: описания, характеристики и фото готовите вы
Копирайтинг описаний на тысячи позиций
Продвижение и реклама после запуска
Хостинг, домен, оплата CDN
Исправление данных в прайсе поставщика: если в источнике каша, импорт перенесет кашу
Кому подходит
Ситуации, в которых эта услуга даёт результат
Сценарий 1 из 4
Прайс поставщика на 10–60 тысяч позиций
Файл приходит каждый день или каждый час, и его нужно залить так, чтобы сайт оставался живым. Из-за админки это не делается: она падает по таймауту. Требуется консольный импорт батчей с журналом ошибок, просмотренные индексы MySQL и кэш категорий под фактический объем.
Разберём вашу ситуацию на бесплатном аудите
Сценарий 2 из 4
Магазин уже есть, но категория собирается несколько секунд
Причина почти всегда в трех местах: некэшированный подсчет товаров в фильтре, трудная тема и модули, которые грузятся на каждой странице. На том же OpenCart в нашей выборке разброс первого ответа – от 126,3 мс до 1 544,5 мс. Скорость здесь не косметика: чем дольше собирается страница, тем большая часть людей уходит до того, как увидит товар.
Сценарий 3 из 4
Google видит не весь каталог
Стандартная карта сайта OpenCart на таком объеме либо отдает пустое тело, либо собирается десятками секунд. В магазине профессионального инструмента мы зафиксировали 34,2 секунды на генерацию карты и в среднем 3,9 адреса на каждый товар. Краулинговый бюджет тратится на дубли, а часть каталога не доходит до индекса вообще.
Сценарий 4 из 4
Две языковые версии на большом каталоге
Каждый язык удваивает количество адресов: 110 096 адресов в магазине снаряжения – это 54 302 товара на два языка плюс категории и информационные страницы. Если в карту сайта попадает только одна ветвь, вторая для поиска не существует. В трех магазинах выборки мы обнаружили ровно этот дефект.
Большой каталог: OpenCart против SaaS-конструктора и самописного решения
Чем этот вариант отличается от альтернативы
SaaS-конструктор/самописьНаш подход
Лимит позицийSaaS: предел тарифа. Самопись: лимита нет, но каталог, корзина и чекаут пишутся с нуляограничен железом и кэшем, не платформой: 54 302 товара отдаются за 413,8 мс
Импорт прайсаSaaS: через интерфейс или API с квотами. Самопись: как напишетеконсольный, батчи, по расписанию, с журналом ошибок
Карта сайта на 50 тысяч адресовSaaS: генерируется платформой, управлять нечем. Самопись: пишется отдельноиндекс с подкартами по 3 000 адресов
Стоимость входаSaaS: низший старт, абонплата растет с каталогом. Самопись: более дорогой старт на порядокразовая работа, далее только хостинг
Кто делает, когда сломалосьSaaS: только поддержка сервиса. Самопись: только автор кодалюбой PHP-разработчик: код открытый и документированный
Договор, акт и гарантия 30 дней
На каждый проект письменный договор: объём, сроки, сумма, порядок приёмки. После сдачи — акт и счёт, затем 30 календарных дней гарантии.
ФОП и безналичный расчёт
Исполнитель — зарегистрированный ФОП. Оплата на счёт с закрывающими документами.
Права и доступы — ваши
Код, дизайн и материалы переходят к вам после полной оплаты. Домен, хостинг, репозиторий оформляем на вас.
Портал клиента вместо переписки
Во время работы вы получаете доступ к порталу: договоры, счета, акты и статус проекта в одном месте.
Заказчики из Европы
Среди работ — проекты для Норвегии, Болгарии, Молдовы и Испании.
Цифры, которые можно проверить
Каждый кейс в портфолио — со ссылкой на живой сайт и техническим замером.
Сначала аудит, потом сумма
Прайса на сайте нет намеренно: объём одной и той же работы у двух клиентов отличается кратно.
Говорим «нет», когда не уверены
Если задача не наша или срок нереальный — скажем сразу.
Не нашли свой случай?
Опишите, как это устроено у вас, — ответим, подходит ли «Интернет-магазин с большим каталогом на OpenCart» и что это значит в вашей ситуации. Без брифа и без звонка: один вопрос, один ответ.
Что влияет на стоимость
Почему две одинаковые на вид задачи считаются по-разному
Фактический объем каталогаРазница между 10 и 50 тысячами позиций – это не множитель на цену, а другая схема импорта: батчи, отдельные индексы, кэш категорий. Поэтому первое, что мы делаем, считаем, сколько адресов у вас реально, двумя независимыми методами.
Состояние прайсаГотовый CSV с артикулом, ценой, остатком и атрибутами – это несколько дней маппинга. Прайс, где все характеристики лежат текстом в одном поле, приходится разбирать парсером, и это отдельная строка сметы.
Количество языковых версийВторой язык удваивает количество адресов и добавляет отдельную ветку в карту сайта. Модуль многоязычия — отдельная строка сметы и около пяти рабочих дней.
Глубина фильтраФильтр по 5 характеристикам и фильтр по 40 – это разные запросы к базе. На большом каталоге подсчет количества позиций в каждом значении приходится кэшировать отдельно, иначе каждый клик по фильтру собирает страницу заново.
Обмен с учетной системойОдносторонний импорт прайса вступает в работу. Двусторонний обмен с 1С или BAS – отдельная строка сметы и около десяти рабочих дней: это синхронизация остатков и статусов заказов, а не чтение файла.
Состояние текущего магазина при переносеПравки в ядре, самописные модули и накопившиеся дубли адресов увеличивают объем. Оценку даем после просмотра файлов и базы: за скриншотом админки такого не видно.
Кейсы
Задачи и результат в цифрах — все показатели сняты нашим замером
интернет-магазин тактического снаряжения, каталог более 50 000 позиций
Задача
Удержать сверхбольшой ассортимент с подробной фильтрацией по характеристикам и не потерять скорость отдачи страниц.
Решение
OpenCart 3 по Cloudflare, две языковые версии, карта сайта как индекс из 32 товарных файлов по 3500 адресов.
Результат
54 302 товара и 635 категорий, подтвержденных двумя методами: индекс карты сайта выдает 110 096 адресов на двух языках, перекрестная проверка с поиском OpenCart — 54 501–54 600 позиций, расхождение 0,4%. TTFB 413,8 мс, полная загрузка HTML 511,1 мс при размере 421,5 КБ. Девять типов JSON-LD. Измерено 31.07.2026.
магазин садовой техники и запчастей с глубокой вложенностью категорий
Задача
Продавать технику и запчасти к ней с фильтрами по мощности и типу двигателя, вложенность категорий до четырех уровней.
Решение
OpenCart 3.x, nginx, HTTP/2. Восемь способов оплаты, четыре перевозчика. Карта сайта разбита на подкарты по 3000 адресов.
Результат
55 321 товарная страница (18 подкарт по 3 000 адресов плюс 1 321 в девятнадцатом) и 3 868 категорий - 59 189 адресов вместе. При таком объеме первый ответ сервера 840,5 мс, полная загрузка HTML 997,4 мс при 454,5 КБ. Это самый медленный TTFB среди измеренных магазинов с каталогом более 50 тысяч позиций. Измерение 31.07.2026.
оптовый магазин нижнего белья, каталог более 13 тыс. позиций
Задача
Дать подбор по размерам и цвету внутри модели и держать карту сайта чистой на таком объеме.
Решение
OpenCart, размерные сетки и фасовка, оптовые цены по уровням, восемь способов расчета.
Результат
13 590 адресов в карте сайта – 13 428 страниц товаров, 161 категория и главный – из которых только один дубликат, 0,007%. TTFB 289 мс при каталоге на 13 тысяч позиций. Найденный дефект: HTML главной 751,2 КБ, самый трудный документ выборки, и рабочая карта сайта лежит на нестандартном адресе. Измерение 31.07.2026.
интернет-магазин профессионального инструмента, каталог более 6 тыс. позиций
Задача
Продавать инструмент одновременно розничному мастеру и компании по НДС, каталог с фильтрами по типу инструмента.
Решение
OpenCart, две языковые версии, десять способов оплаты, четыре способа доставки.
Результат
25 537 записей в карте сайта на 6 857 уникальных адресов - 6 486 карточек товара и 361 категория. То есть каждый товар индексируется в среднем 3,9 раза под разными путями категорий, а сама карта собирается 34,2 секунды. TTFB 671,2 мс при 407,8 КБ HTML. Измерение 31.07.2026.
Что нужно от вас
Без этого не начнём — лучше подготовить заранее
1Выгрузка прайса в том виде, в каком оно приходит от поставщика, — именно оно определяет объем работ по импорту.
2Доступ к текущему сайту и базе данных, если магазин уже существует: без него количество дубликатов адресов не подсчитать.
3Список характеристик, по которым покупатель должен фильтровать, с приоритетом — фильтр за 40 полями и за 7 стоит по-разному.
4Доступ к хостингу: на таком каталоге важно видеть реальные ресурсы сервера до, а не после старта.
5Доступ к Search Console, если сайт уже индексируется, чтобы снять базовые цифры к работам.
6Одного человека с правом принимать решения по структуре каталога.
Если чего-то из этого нет — скажите, подскажем, как собрать или сделаем сами отдельной задачей.
Частые вопросы
Что спрашивают чаще всего — с конкретными ответами
Сколько товаров на самом деле выдержит OpenCart?
Мы мерили 54 302 товара при первом ответе 413,8 мс и 55 321 товарную страницу при 840,5 мс. Оба магазина живы и работают. Ограничение здесь не в количестве строк в базе, а в том, как собрана страница категории: сколько запросов она делает, кэширован ли подсчет в фильтре, сколько модулей висит на каждой загрузке.
На какой версии OpenCart вы собираете большой каталог?
По умолчанию 4.x. Сам объем каталога от версии ядра почти не зависит: его содержат индексы MySQL, кэш категорий и то, как разбита карта сайта. Наше наибольшее измерение – 54 302 товара при первом ответе сервера 413,8 мс – сделано на 3.x; магазинов такого объема на 4.x мы еще не мерили, поэтому цифры для четверки не обещаем. От версии зависит другое – модули: в 4.x переписали систему событий, и часть украинских сборок (консольный импорт прайсов, генераторы sitemap-индекса, выгрузка на площадки) пока выходит только под 3.x. Поэтому список модулей под ваш каталог сверяем на брифе: все критическое есть под 4.x – ставим 4.x; чего-то еще нет – обсуждаем 3.x на старте, чтобы не упереться в это на этапе интеграций.
Сколько это стоит и почему вилка так широка?
Стоимость здесь определяет не количество позиций, а состояние выгрузки, и именно поэтому назвать сумму до разбора невозможно. Разница в том, что внутри скрываются две разные задачи. Первая: один чистый прайс, один язык, фильтр по семи характеристикам – это нижний предел. Вторая: несколько источников данных с разными форматами, два языка, глубокий фильтр и десятки тысяч накопленных дублей адресов, которые нужно разобрать. Куда именно попадает ваш проект, виден после разбора выгрузки.
Почему 40-70 рабочих дней, а не быстрее?
Половина срока – это не дизайн. Аудит и измерение текущего состояния 4–6 дней, ТС и схема импорта 4–6, прототип каталога и фильтра 4–7, дизайн и верстка 8–14, сборка и интеграция 9–16, импорт и чистка дублей 7–14, погрузочная проверка и передача 4–7. Самые длинные этапы – сборка и импорт, и именно их не получается сжать: заливка батчами с проверкой занимает столько, сколько занимает.
Как вы считаете, сколько у меня на самом деле товаров?
Двумя независимыми методами и сравниваем результат. Первый – карта сайта: считаем записи в каждой подкарте. Второй – штатный поиск OpenCart с пустым запросом и лимитом 100 на страницу. На магазине снаряжения первый метод дал 54 302 товара, второй - 54 501-54 600: расхождение 0,4%, и это нормально. Если методы расходятся в разы – значит, в карте сайта дубли, и это уже отдельная строка работ.
Что не так с дублями адресов и почему это стоит денег?
Дубль — это когда та самая карта доступна по нескольким путям категорий, и все они попадают в карту сайта. Мы фиксировали 33 493 записи на 8 690 уникальных адресов в магазине садовой техники, 25 537 на 6 857 в магазине инструмента, 3 971 на 590 в магазине специй. Краулер тратит бюджет на просмотр одного и того же, а часть каталога остается вне индекса. Разбор таких адресов — отдельный этап, и он тем длиннее, чем больше истории накопилось.
Почему карта сайта генерируется десятки секунд и это ли проблема?
Проблема. Стандартный генератор OpenCart собирает всю карту одним запросом, и на большом каталоге это 34,2 секунды – именно столько мы зафиксировали в магазине инструмента. Краулер столько не ждет. Решение – sitemap-индекс: отдельные подкарты по 3 000 адресов на товары, категории и информационные страницы. Так сделано в магазине снаряжения: 32 файла вместо одного.
А если каталог обновляется каждый час?
Тогда импорт ставится на расписание и работает батчами в фоне, а не разовой загрузкой. Важно разделить две вещи: полный импорт с созданием новых карт и быстрое обновление только цен и остатков. Второе выполняется в разы быстрее и не трогает остальные поля. Расписание под вашу частоту фиксируем в ТС на этапе схемы импорта.
Вы гарантируете, что каталог зайдет в индекс?
Нет, и никто честный такого не пообещает. Скорость и полноту сканирования определяет Google. Наша зона — чтобы в карте сайта не было дублей, чтобы она отдавалась быстро и подкартами, чтобы страница категории собиралась быстрее секунды, а canonical стояли правильно. Это то, что мы можем измерить до и после и показать цифрами в акте.
Прайса на сайте нет намеренно: объём той же работы у двух клиентов отличается в разы, и цифра «от» в этом случае ничего не объясняет. Сначала бесплатный аудит — считаем ваши страницы, дубли и скорость, — потом называем сумму и срок и фиксируем их в договоре.