Короткий ответ: человек, который открыл поиск по каталогу, — самый ценный посетитель магазина. Он не «изучает ассортимент», он знает, что хочет купить. Именно поэтому неработающий поиск — самая обидная потеря: вы уже заплатили за этот визит, товар у вас есть, а сделка не состоялась из-за одной опечатки.
Почему встроенный поиск WooCommerce не работает
Стандартный поиск WordPress — это, по сути, LIKE-запрос по заголовку и описанию записи. Отсюда все его свойства:
- Опечатка = ноль результатов. «Клавиатра» не найдёт «клавиатуру». Пользователь при этом уверен, что товара у вас нет.
- Синонимов не существует. «Толстовка» не найдёт «худи», «ноутбук» не найдёт «лэптоп».
- Артикул часто не ищется. SKU лежит в метаполе, а не в тексте, — и запрос по артикулу возвращает пусто.
- Нет ранжирования по смыслу. Товар, у которого запрос в названии, и товар, у которого он случайно упомянут в описании, равноправны.
- Атрибуты и варианты не участвуют. Поиск «синие кроссовки 44» почти гарантированно провалится.
- На больших каталогах ещё и медленно.
LIKE '%слово%'не использует индексы — на 20 000 товарах это ощутимая задержка.
Это не претензия к WooCommerce: базовый поиск сделан универсальным для блога, а не для магазина. Претензия к тому, что его так и оставляют.
Что обязан уметь поиск в магазине
Проверьте свой по этим семи пунктам:
- Прощать опечатки — нечёткое соответствие хотя бы на одну-две ошибки
- Знать синонимы — включая ваш профессиональный сленг и то, как товар называют клиенты
- Искать по артикулу и коду — в B2B это половина всех запросов
- Подсказывать при вводе — с картинкой, ценой и наличием, чтобы можно было перейти сразу в товар
- Ранжировать осмысленно — совпадение в названии важнее совпадения в описании; товар в наличии выше товара под заказ
- Позволять фильтровать результаты — поиск без фасетов бесполезен на выдаче из 200 позиций
- Не бросать при нуле результатов — показывать похожее, популярное, категории, а не пустой экран
Реализация зависит от размера каталога: до пары тысяч товаров хватает хорошего плагина поиска, дальше имеет смысл выделенный поисковый движок. Но начинать надо не с выбора технологии, а со следующего пункта.
Бесплатный источник идей: отчёт пустых запросов
Настройте логирование поисковых запросов (в GA4 это событие search с параметром search_term) и раз в месяц открывайте два списка: самые частые запросы и запросы с нулём результатов. Это самый недооценённый отчёт в магазине, потому что он отвечает сразу на три вопроса:
- Чего у вас нет, а спрос есть — прямая подсказка по расширению ассортимента
- Как клиенты называют ваши товары — их слова, а не ваши; это готовые названия, теги и синонимы
- Что сломано — если по запросу «доставка» ноль результатов, значит информационные страницы не участвуют в поиске
По моему опыту, первый же разбор такого отчёта даёт 5–10 конкретных задач, каждая из которых дешевле любой рекламной кампании.
Фильтры: три типовые ошибки
Ошибка 1: фильтры не по тем признакам. Магазин фильтрует по «бренду» и «цене», а покупателю нужен «размер», «совместимость» или «срок доставки». Правильный набор фильтров берётся из вопросов покупателей, а не из структуры базы данных.
Ошибка 2: фильтры без счётчиков и с тупиками. Если рядом с вариантом не написано, сколько товаров найдётся, человек играет в лотерею и регулярно упирается в «ничего не найдено». Показывайте количество и отключайте заведомо пустые варианты.
Ошибка 3: каждое нажатие — полная перезагрузка. Медленно, теряется позиция скролла, на мобильных особенно больно. Плюс генерируется поток URL, которые потом попадают в индекс (об этом ниже).
Отдельно: на мобильных фильтры должны быть в панели с кнопкой «Применить» и с видимым сбросом. Фильтр, который перезагружает страницу после каждого чекбокса, на телефоне не используют — его закрывают.
Врезка для разработчика
- Фасеты нельзя делать честными
WHEREпо базе. Счётчики по каждому значению атрибута — это агрегирующие запросы, которые на большом каталоге кладут MySQL. Нужен предрассчитанный индекс или отдельный поисковый движок. - Фильтры не должны плодить индексируемые URL. Комбинации параметров дают тысячи адресов с почти одинаковым контентом. Базовое правило: индексируем только осмысленные посадочные комбинации (например, «категория + бренд»), остальное закрываем
noindex, followили каноникалим на чистую категорию — см. руководство Google по каноническим URL и по robots-мета-тегам. - Следите за краулинговым бюджетом. На больших каталогах бот тратит его на комбинации фильтров вместо новых товаров. Как этим управлять — в документации Google по crawl budget. Подробнее в теме SEO-ошибки магазинов.
- Страницы результатов поиска закрывайте от индексации. Внутренний поиск в индексе — классический источник мусорных страниц.
- Логируйте запрос вместе с числом результатов. Без второго поля отчёт пустых запросов не собрать.
- Проверьте
?s=под нагрузкой. Поисковые боты и парсеры любят долбить поиск; наLIKE-запросах это готовый способ уронить сайт.
Практическая проверка
- Ввёл в поиск название товара с опечаткой — товар нашёлся
- Поискал по артикулу — нашёлся
- Поискал синонимом, которым товар называют клиенты — нашёлся
- При нуле результатов показывается что-то полезное, а не пустой экран
- В GA4 логируются поисковые запросы, и я смотрел отчёт за последний месяц
- Набор фильтров совпадает с реальными вопросами покупателей
- У вариантов фильтров есть счётчики, пустые отключены
- На мобильных фильтры удобны и есть кнопка сброса
- Страницы результатов поиска и мусорные комбинации фильтров закрыты от индексации
Что дальше
Поиск отвечает за тех, кто уже внутри магазина. Следующая тема — про тех, кто ещё снаружи, и про то, почему магазины теряют их на уровне выдачи: SEO-ошибки интернет-магазинов.
Основа темы — исследования поиска по каталогу Baymard Institute и практика аудитов каталогов на WooCommerce.
