Лог поиска — это лучший продуктовый документ, который вы не читаете
Клиент спросил: «Что ищут наши покупатели?» Я открыл Elasticsearch и вытащил топ-40 поисковых запросов с нулём результатов за прошлую неделю. Среди них — три точных названия товаров, которые были в наличии. Просто записаны иначе, чем в каталоге.
Мы три часа обсуждали редизайн главной страницы. Потом я открыл этот список.
Команды интернет-магазинов тратят деньги на GA4, Hotjar, сессионные записи. Ищут, где «пользователь теряется», строят воронки. При этом самый прямой сигнал от покупателя лежит прямо в логах: что он написал в строке поиска, буквально. И никто это не читает.
Лог поиска — единственный продуктовый документ, который пишут сами покупатели. Без UX-фильтра, без формулировки маркетолога. Буквально: что человек хотел, какими словами он это называет, и нашёл ли.
Я работаю с каталогами от 10 до 30 тысяч SKU. Каждый раз, когда открываю аналитику внутреннего поиска интернет-магазина на новом проекте — нахожу одно и то же. Товары в наличии, которые не находят. Названия, которые использует покупатель и не использует каталог. Запросы, по которым поиск возвращает результат, но никто не кликает.
Это три разных типа сигнала — и каждый требует разного ответа.
Нулевые запросы: товар есть, поиск не знает
Нулевые результаты — это не «у нас нет этого товара». Чаще это «у нас есть этот товар, но он называется иначе».
На проекте с 28 000 SKU мы нашли 340 уникальных запросов за месяц с нулём результатов. Из них примерно треть — это артикулы, бренды или модели, которые в каталоге были, просто в другом написании: «iphone 14 pro макс» вместо «iPhone 14 Pro Max», «Бош посудомойка» вместо «Bosch SMV25AX00R».
Нулевые запросы — потери, которые можно посчитать. (Я уже писал о том, как превратить нулевые поисковые запросы в бэклог задач.) Если поиск составляет 15–20% сессий, а нулевой результат конвертирует в 10 раз хуже обычного, то 300 таких запросов в месяц это реальные деньги на полу.
Но нулевые — это только первый тип. Они самые очевидные и самые обсуждаемые. Есть два менее заметных.
Низкая вовлечённость: поиск вернул результат, покупатель не кликнул
Это запросы, по которым Elasticsearch что-то нашёл — но конверсии в клик нет или почти нет.
Такое бывает по нескольким причинам. Первая: поиск возвращает нерелевантный результат — ищут «чёрный чехол iPhone», получают «чехол зелёный» потому что слово «iPhone» есть в описании. Вторая: товары есть, но первая страница забита out-of-stock позициями. Третья: пользователь ищет категорию («ноутбуки до 50000»), а поиск возвращает конкретные модели без навигации по цене.
Эти запросы не попадают в «нулевые результаты» — технически поиск отработал. Но поведенчески он сломан.
Найти их просто: выгрузить запросы с кликрейтом ниже 5% при 20+ запросах в месяц. В Elasticsearch это агрегация по query + событие click из вашей аналитики. Если у вас нет трекинга кликов по поиску — это первое, что стоит добавить, без него аналитика поиска слепая.
Повторные поиски за сессию: сигнал провала
Пользователь ищет «кресло офисное», кликает, смотрит товары, возвращается и ищет снова: «кресло офисное до 30000». Затем ещё раз: «кресло компьютерное».
Три запроса за одну сессию на одну тему — это провал поиска. Не полный провал (не ушёл сразу), но поиск не дал ответ с первого раза.
Такие сессии находятся через sessionId: если в рамках одной сессии больше двух поисков с семантически близкими запросами — это кандидат на разбор. Обычно проблема в отсутствии фасетов для быстрого уточнения или в том, что поиск не понимает атрибуты («до 30000» как ценовой фильтр).
Это сигнал не для разработчика — а для того, кто проектирует UX поиска и фасетов.
Как это читать за пять минут
Самый быстрый способ: выгрузить из Kibana или напрямую из индекса. Если у вас Elasticsearch + Bitrix, query logging включается через index.search.slowlog.threshold.query.warn: 0s — это пишет все запросы в slowlog независимо от времени.
Более чистый вариант — логировать сами запросы в отдельный индекс через middleware: поисковый запрос, количество результатов, userId, sessionId, timestamp. Это 20 строк PHP-кода и даёт вам полный контроль.
Минимальный набор для первого анализа:
топ-50 запросов с 0 результатов за 30 дней
топ-50 запросов с >0 результатов и кликрейтом <5%
запросы, повторявшиеся более 2 раз в одной сессии
Первая выгрузка занимает минут пять. Разбор — час. И это час, который стоит дороже, чем неделя работы над редизайном главной.
Что мы изменили и что стало
На том проекте с 28k SKU мы взяли топ-100 нулевых запросов за месяц и прошли по ним в три итерации.
Первая итерация: запросы с артикулами. 23 артикула, которые клиенты знают, а каталог — нет. Добавили артикулы в поле article и проиндексировали. Нулевые результаты по артикулам упали с 18% до 3% за неделю.
Вторая итерация: бренды в разном написании. Добавили 45 синонимов для брендов — не перестраивали конфигурацию ES, а пополнили словарь, который уже был настроен (подробнее о стратегии синонимов для русскоязычного e-commerce). Нулевые запросы снизились ещё на 6%.
Третья итерация: категорийные запросы с низким кликрейтом. Там проблема оказалась не в поиске, а в фасетах — «ноутбуки до 50000» не имел фасета по цене на странице результатов поиска. Добавили быстрые фильтры по бюджету.
Итого за четыре недели: zero-results rate с 22% до 13%, конверсия из поиска выросла на 1.7 п.п. Без переписывания архитектуры поиска. Только чтение логов и точечные правки.
Кто должен читать лог поиска
Это не только задача разработчика.
Мерчандайзер, который знает ассортимент, прочитает лог и скажет: «О, они ищут это? У нас есть похожее, просто называется иначе». Это быстрее, чем любой алгоритм.
Контент-менеджер увидит, что покупатели используют слова, которых нет в описаниях. Это SEO-сигнал и сигнал для контента одновременно.
Разработчик видит технические сбои: запросы, которые медленно отрабатывают, паттерны, которые нагружают кластер, cases где fuzzy search возвращает мусор.
Один документ — три аудитории. Проблема в том, что до него обычно добираются только разработчики, и только когда что-то сломалось.
Пять метрик, которые стоит мониторить постоянно
Если строить мониторинг с нуля, я бы начал с этих пяти:
- Zero-results rate. Процент запросов с нулём результатов. Норма для хорошо настроенного поиска: ≤5%.
- Click-through rate. Доля запросов, после которых пользователь кликнул хоть на что-то. Ниже 40% — что-то не так с релевантностью или выдачей.
- Search refinement rate. Доля сессий с повторным поиском. Выше 15% говорит о том, что поиск не даёт ответ с первого раза.
- Search-to-cart conversion. Конверсия от поиска к добавлению в корзину. Бенчмарк зависит от ниши, но это главная метрика поиска как продуктового инструмента.
- Топ-10 нулевых запросов за неделю. Не метрика, а живой список. Просматривать раз в неделю и принимать решение: синоним, переименование, создание товара.
Аналитика поиска — не разовый аудит. Это процесс. Лог пишется постоянно, покупатели постоянно приносят новые слова, ассортимент меняется. Час в неделю на просмотр этих пяти точек стоит больше, чем квартальный рефакторинг поиска.
Самый честный продуктовый документ в вашем e-commerce — это не CJM, который нарисовал дизайнер. Это то, что покупатели пишут в строке поиска прямо сейчас.