WordPress · 7 мин чтения

Фильтры каталога товаров в интернет-магазине: как спроектировать

Фильтры каталога товаров - то, что решает за 20 секунд, купит человек что-то или закроет вкладку. Я делал каталоги на WooCommerce, кастомных SPA на React и Tilda с самописными скриптами, и почти в каждом проекте фильтрация становится точкой, где заказчик экономит на этапе проектирования, а потом переделывает через полгода, когда ассортимент вырастает с 50 позиций до 500. Разберу, как подхожу к проектированию фильтров каталога товаров: структура атрибутов, техническая реализация, SEO и ошибки, которые встречаю чаще всего.

Зачем каталогу нужны фильтры и когда без них не обойтись

Пока в каталоге 20-30 товаров, достаточно категорий и сортировки по цене - фильтры только загромождают интерфейс. Порог, после которого без них не обойтись, я вижу на отметке 50-80 SKU в одной категории: пользователь физически не пролистывает десять экранов карточек, чтобы найти нужный размер или бренд.

На одном из проектов с автозапчастями страница каталога без фильтра по марке, модели и году выпуска давала долю отказов 68%. После внедрения фасетного фильтра с тремя связанными списками (марка → модель → год) отказы упали до 41% за два месяца, а средняя глубина просмотра выросла почти вдвое. Никакой магии - люди просто перестали листать 400 карточек руками.

Второй сценарий, где фильтры обязательны - интернет-магазины с вариативными атрибутами: одежда с размерами и цветами, стройматериалы с параметрами (толщина, длина, марка), электроника с техническими характеристиками. Здесь фильтр - не украшение интерфейса, а единственный способ сузить выбор до нескольких релевантных позиций.

Какие типы фильтров использовать: чекбоксы, диапазоны, теги и фасетный поиск

На практике использую четыре базовых типа, и почти всегда этого достаточно:

  • Чекбоксы с мультивыбором - для категориальных атрибутов: бренд, цвет, материал. Обязательно показываю число товаров в скобках рядом с каждым значением - без счётчика человек кликает вслепую и упирается в пустую выдачу.
  • Диапазонный слайдер - для цены, размера, объёма. Слайдер плюс два текстовых поля для ручного ввода границ: часть аудитории на мобильном тянет ползунок неточно.
  • Переключатели (toggle) - для булевых признаков: «в наличии», «со скидкой», «доступен самовывоз через ПВЗ СДЭК». Это один из самых конвертящих фильтров в нишах с доставкой день-в-день.
  • Фасетный поиск с зависимыми списками - когда один фильтр сужает варианты в другом. Выбрали марку авто - список моделей обновился, оставив только реальные пересечения по остаткам.

Правило, которое соблюдаю жёстко: на экране видно не больше 5-7 фильтров одновременно, остальные - под «Показать ещё». Больше десяти видимых блоков фильтрации в исследованиях по юзабилити e‑commerce стабильно снижают конверсию카талога - люди теряются в списке критериев, а не выбирают товар.

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

Как спроектировать структуру атрибутов для фильтрации товаров

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

Перед тем как писать код фильтра, я всегда прохожу три шага:

1. Разделяю атрибуты на фильтруемые и справочные

Не каждое поле карточки товара должно попадать в фильтр. Артикул, поставщик, внутренний код склада - справочные данные, в фильтр не идут. Бренд, цвет, размер, материал, наличие - фильтруемые, для них нужна отдельная нормализованная структура.

2. Нормализую значения

Если в одной карточке цвет записан как «красный», в другой - «Красный», а в третьей - «red», фильтр покажет три разных пункта вместо одного. На старте проекта завожу справочник допустимых значений для каждого атрибута и валидирую импорт товаров по нему - это экономит недели правок после того, как каталог наполнен на тысячу позиций.

3. Проектирую хранение под нагрузку

Для каталога до 5-10 тысяч товаров нормальная схема EAV (Entity-Attribute-Value) или JSON-колонка в PostgreSQL с GIN-индексом справляется без проблем. Как только каталог растёт до десятков тысяч SKU и фильтров становится больше 8-10 одновременно активных, обычные SQL-запросы с несколькими JOIN начинают тормозить - здесь я перехожу на отдельный поисковый движок (Meilisearch или Elasticsearch), который держит фасетные счётчики в памяти и отдаёт результат за миллисекунды вместо секунд.

Технические варианты: WooCommerce, Tilda и кастомная разработка

Выбор платформы определяет, сколько придётся дописывать руками.

Платформа Фильтры «из коробки» Где упирается
WooCommerce Атрибуты + фильтры по ним есть нативно, плагины добавляют слайдеры и AJAX На каталоге от 5000+ товаров без кэширования запросы к MySQL заметно замедляются
Tilda Нет мультивыбора и диапазонов из коробки, только базовая сортировка Нужен кастомный JS-скрипт поверх T‑Store, иначе фильтрация ограничена одним значением за раз
Кастомная разработка (React/Vue + API) Полный контроль над логикой и производительностью Дольше и дороже на старте, оправдана от нескольких тысяч SKU

На Tilda фильтр обычно собираю через встроенный JS-редактор, читая data-атрибуты карточек товара:

document.querySelectorAll('.t-store__filter-checkbox').forEach(input => {
  input.addEventListener('change', () => {
    const activeBrand = [...document.querySelectorAll('.t-store__filter-checkbox:checked')]
      .map(el => el.dataset.brand);
    document.querySelectorAll('.t-store__card').forEach(card => {
      const visible = !activeBrand.length || activeBrand.includes(card.dataset.brand);
      card.style.display = visible ? '' : 'none';
    });
  });
});

Готовые варианты таких скриптов под разные типы фильтров (чекбоксы, диапазон цены, комбинированный фасетный фильтр) я собрал в библиотеке готовых скриптов для Tilda - быстрее адаптировать под свою вёрстку, чем писать с нуля.

Если каталог синхронизируется с 1С или внешним складом, остатки и доступность для фильтра «в наличии» удобно подтягивать через n8n - настраиваю сценарий, который раз в 15-30 минут обновляет флаги наличия по товарам, и фильтр всегда показывает актуальную выдачу без ручных выгрузок. Такая автоматизация в n8n у меня стоит от 25 000 ₽.

Для магазинов, где фильтрация - это ядро бизнеса (маркетплейс, каталог на 20 000+ позиций с десятком атрибутов), выгоднее сразу закладывать кастомную архитектуру: интернет-магазин под ключ с продуманной структурой фильтров у меня стартует от 80 000 ₽, а отдельный веб-сервис или SPA-витрина с высоконагруженным поиском - от 300 000 ₽.

SEO для страниц фильтров: URL и дубли в индексе

Фильтры создают комбинаторный взрыв URL: цвет × размер × бренд × цена легко даёт тысячи вариантов адреса для одного и того же набора товаров. Если не ограничить индексацию, поисковик получает тысячи почти одинаковых страниц и распыляет вес сайта.

Правила, которых придерживаюсь:

  • Комбинации из двух и более фильтров закрываю от индексации через noindex, follow - робот продолжает переходить по ссылкам, но не индексирует страницу как отдельный документ.
  • Для популярных единичных фильтров с реальным спросом (например, «холодильники Samsung» или «кроссовки 42 размер») делаю отдельный индексируемый URL вида /catalog/holodilniki/samsung/ с уникальным title и текстом - это по сути мини-лендинг под запрос.
  • Технические параметры сортировки и пагинации (?sort=price&page=2) всегда через canonical на базовую страницу категории, чтобы не плодить дубли в индексе.
  • На страницы с активным фильтром не даю ссылок из футера и меню - только из самого интерфейса каталога, чтобы бот не тратил краулинговый бюджет на комбинации без спроса.

Частые ошибки при разработке фильтров каталога

Собрал список того, что регулярно чиню в чужих магазинах:

  • Фильтр не пишет состояние в URL - при обновлении страницы или переходе назад все выбранные значения сбрасываются, пользователь теряет результат поиска.
  • Нет счётчиков товаров рядом со значениями фильтра - человек выбирает комбинацию и получает пустую выдачу без объяснения.
  • Пустой результат фильтрации не обрабатывается - вместо сообщения «ничего не найдено» с предложением сбросить часть условий человек видит белый экран.
  • На мобильной версии фильтр открывается модальным окном без кнопок «Применить» и «Сбросить» - приходится закрывать окно и открывать заново, чтобы убрать одно значение.
  • Запросы фильтрации идут без индексов по полям атрибутов в базе - на 10-15 тысячах товаров каждый клик по фильтру ждёт 2-3 секунды вместо десятых долей секунды.

Интернет-магазин под ключ

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

от 80 000 ₽

Подробнее →

Частые вопросы

Сколько стоит разработать фильтры для каталога товаров?

Зависит от платформы и сложности. Кастомный скрипт фильтрации под Tilda для простой доработки - от 3 000 ₽, комплексная интеграция с CRM, эквайрингом и складскими остатками - от 40 000 ₽. Интернет-магазин под ключ с продуманной структурой фильтров на WordPress или кастомной платформе - от 80 000 ₽.

Что лучше для фильтров - WooCommerce или Tilda?

WooCommerce даёт нативные атрибуты и фильтры без доработки с нуля, это быстрее для каталога до нескольких тысяч товаров. Tilda требует кастомного скрипта поверх T‑Store, зато подходит, если у вас уже есть сайт на этой платформе и не хочется переезжать на отдельный движок ради интернет-магазина.

Нужен ли Elasticsearch или Meilisearch для небольшого магазина?

При каталоге до 5-10 тысяч товаров и 4-5 активных фильтрах обычная SQL-база с правильными индексами справляется без отдельного поискового движка. Смысл переходить на Elasticsearch или Meilisearch появляется, когда фильтров становится больше восьми одновременно и каталог переваливает за 20-30 тысяч позиций.

Как фильтры каталога влияют на SEO магазина?

Сами по себе фильтры не вредят SEO, вредит бесконтрольная индексация всех их комбинаций - это плодит дубли и размывает вес сайта. Решение - закрывать многофильтровые URL через noindex, оставлять индексируемыми только страницы под реальные частотные запросы и следить, чтобы canonical везде указывал на нужную версию страницы.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Самозанятый Калинкин Н. А. · работаю с физлицами и юрлицами

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно