Как развивать «Поиск» в продукте — часть первая

Привет! Я Женя Гурьянов, Chief Product Officer в компании DocDoc.
У меня есть опыт в продуктовом менеджменте, стратегическом консалтинге и анализе данных. Работал в компаниях «Авито», «Лаборатории Касперского», ABBYY, «Мегафон», AT Kearney, «Аэрофлот», Datadvance Company.

В закладки

Давайте представим, что вас десантировали в новую для вас область продукта — поисковую выдачу. Ну или вы создаёте продукт с нуля и дошли до обдумывания этой функциональности.

Что делать? С чего начать? Какую логику заложить в выдачу, если вы создаёте её с нуля? Или как понять, насколько хорошо функционирует текущая выдача, если вы пытаетесь её улучшить?

Я решил написать серию статей для того, чтобы помочь вам разобраться с этими вопросами. Погнали!

Поиск и выдача в различных продуктах

Google и «Яндекс»

Самый очевидный пример — поиск в поисковых системах.

Вот мы ищем что-то в Google.

Какие возможности для поиска информации у нас есть?

  • Текстовый поиск — можно ввести какой угодно поисковый запрос. При обсуждении поисковых запросов их обычно берут в квадратные скобки (в нашем случае [параллелограм]).
  • Фильтры — можно фильтровать информацию по типу (картинки, новости), языку, дате обновления, формату файлов, расположению слов и так далее.

Страницу результатов поиска довольно часто называют английским акронимом SERP (Search Engine Results Page).

Отдельную карточку в выдаче называют сниппетом.

Классифайды, маркетплейсы, интернет-магазины

Поиск — важная функция таких продуктов, как Craigslist, Amazon, OLX, Avito, «Юла», «Авто.ру», «Профи.ру», ЦИАН, «Яндекс.Маркет», Ozon.

Давайте посмотрим на примере поиска велосипеда на Avito.

Перехожу в одну из предлагаемых категорий.

Какие возможности для поиска информации есть тут?

  • Поиск по структуре категорий и подкатегорий.
  • Текстовый поиск.
  • Фильтры (в случае поиска велосипеда фильтры по диапазону цен и по типу продавцов — все, частные, компании).
  • Сортировка — по умолчанию, по дате, по цене.

Другие продукты и сервисы

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

Например, поищем что-нибудь в YouTube.

Видим, что все фильтры скрыты. И YouTube «открыто» даёт нам одну основную возможность — текстовый поиск:

Кликнем на иконку «Фильтры» и увидим достаточно большое количество возможностей фильтрации контента:

Теперь, когда мы немного познакомились с поиском в различных продуктах и основными терминами, перейдём к делу.

В своей серии статей я сделаю акцент на текстовый поиск в продуктах.

Приоритизация задач по полнотекстовому поиску

Поиск — это одна из областей продукта. Обычно у продакт-менеджера таких областей бывает несколько, а ресурсы ограничены.

Прежде чем начинать вкладываться в развитие поиска, посмотрите, какое количество пользователей используют поиск. Это первое, что нужно сделать.

Вполне реален кейс, когда поиском пользуется 15–20% пользователей. Давайте рассмотрим несколько примеров.

Пример первый: пользователи в большинстве случаев используют поиск Google или «Яндекса», а не поиск на сайте

Представим себе, что источников трафика на ваш сайт несколько — SEO, CPC, переходы с сайтов партнёров, прямые заходы на сайт. Вполне может быть, что большая доля трафика из этих каналов приземляется на карточку товара, на карточку конкретного фильма, на покупку конкретной книги, на страницу компании, размещённой на классифайде… Возможно, что основной трафик приземляется уже на преднастроенную поисковую выдачу — это тоже влияет на приоритизацию инициатив по выдаче. Вот, например, вводим в Google запрос [джон уик 3 смотреть онлайн],

проходим по ссылке

и попадаем сразу на карточку фильма. Мы не использовали поиск фильмов на самом сайте.

Или другой пример.

Опять же, попадаем на карточку. Только в данном случае это анкета врача.

По первой ссылке в органической выдаче:

По второй ссылке:

Вы спросите «Зачем нам важно это понимать?»

Ответ такой: «Для того, чтобы правильно приоритизировать ресурсы компании».

Пусть большинство пользователей сайта Prodoctorov знают, к какому врачу они хотят записаться, и ищут его в «Яндексе» и Google.

Это выливается в следующую статистику:

  • 50% всего трафика идёт на анкету врача.
  • 25% на поиск.
  • Ещё 25% на другие сегменты страниц.

В этом случае в первую очередь надо было бы рассматривать проблемы и инициативы для анкет врачей.

Пример второй: пользователи используют другие инструменты для поиска внутри продукта

Вы пытаетесь понять, в каком приоритете сейчас развитие текстового поиска на сайте «Юла». Может, лучше направить усилия на развитие геопоиска, фильтров, карточки товаров или дерева категорий?

Для этого, в первую очередь, важно понимать, пользуются ли посетители сайта этим самым текстовым поиском. Вполне может быть, что доля невелика — 25–30%.

Почему так может быть? Ну, например, вы ищете авто. Для этого вы кликаете на иконку категории «Легковые автомобили» и далее уже работаете с фильтрами.

Поиск авто удобнее осуществлять фильтрами (марка, модель, поколение), а не текстовым поиском. На auto.ru, например, вообще нет текстового поиска. Поэтому мы можем сделать вывод, что и на Avito, и на «Юле» доля пользователей, использующих текстовый поиск в категории «Авто», должна быть невысокой по сравнению с теми, кто ищет личные вещи.

Как наполнить бэклог по поиску

Анализируйте статистику запросов в текстовом поиске

Если у вас в продукте есть текстовый поиск, попросите выгрузить вам запросы пользователей, например, за месяц. Отсортируйте их по частоте (количеству за месяц).

Для примера сгенерирую верх таблицы для «Юлы»:

В третьем столбце таблицы вы видите метрику CTR@10. Мы подробнее поговорим о метриках поиска в последующих статьях, а пока я приведу определение CTR@10:

Чем выше CTR@10, тем лучше. Низкий CTR@10 сигнализирует вам о проблемах с поиском по конкретным запросам.

Теперь вернёмся к частоте запросов (количеству поисков за месяц). Запросы делятся на высокочастотные и низкочастотные. На графике частотности обычно это выглядит так:

Высокочастотные запросы входят в «Голову распределения», а низкочастотные в «Хвост».

Я рекомендую отсмотреть топ-1000 всех запросов и топ-1000 по категориям (если у вас в продукте есть выделенные категории и подкатегории). Например, для «Юлы» или Avito категории: «Автомобили», «Недвижимость», «Вакансии».

При анализе смотрим на:

  • Группы запросов (что конкретно вводят пользователи, по каким ключевым словам они ищут).
  • CTR запроса. Если CTR@10 низкий, вбиваем запрос в поиск в продукте и анализируем глазами выдачу. Для начала вы можете сравнивать CTR@10 со средним CTR@10 анализируемых топ-1000 запросов. Сильные отклонения будут заметны сразу.

Что это вам даст

Давайте продолжим фантазировать на примере классифайдов.

Пользователи могут вводить в поисковую строку название категорий и подкатегорий (навигационные запросы)

Вот такая вот выдача по запросу [авто] (даже саджест не подсказывает нужную категорию).

Что можно сделать?

Можно было бы прокидывать пользователей сразу в нужную категорию.

В этом варианте система как бы говорит пользователю: «Ок, хочешь купить Авто? Тогда выбирай марку, модель».

Пользователи могут вводить значения фильтров или параметров в текстовый поиск (навигационные запросы)

Что это значит? Это значит, что вашим пользователям нужна помощь! Они пытаются найти товар по категории или параметру, но скорее всего, не найдут, если им не помочь.

Например, пользователь ввёл на «Юле» или Avito [шевроле траверс]. Это марка и модель автомобиля.

Сейчас он получит следующий результат на «Юле»:

И на Avito:

В одном случае фактически нет никакого результата, в другом — какой-то результат есть, но в выдаче много запчастей и пользователь не видит фильтры, которые помогли бы ему сделать дальнейший выбор (так как он остаётся в разделе «Любая категория», а там фильтров для выбора авто нет).

А вот так выглядели бы фильтры и выдача, если бы пользователь попал в категорию «Авто» с подставленной маркой и моделью:

Так почему бы нам не перебрасывать пользователя туда, где найти авто по марке и модели будет проще?

Пользователи потенциально могут вводить такие фразы, как [куплю однокомнатную метро Новокосино], [сниму двушку Новогиреево] (геозависимые запросы, навигационные запросы)

Если доля таких запросов высока, то вполне можно адаптировать систему под данный запрос:

  • Перевести пользователя в нужную ему категорию («Недвижимость»), выставить параметры (купить, квартиру, количество комнат), метро, город.

Пользователи могут вводить важные ключевые слова. Например, такие как [бесплатно] или [обмен]

Например, [бесплатно] позволяет выставить цену в диапазоне цен: от 0 до 0 рублей.

Внимание:

  • Как я уже написал ранее, такие инициативы надо приоритизировать (не факт, что вы поможете большой доле пользователей, также не факт, что текущее поведение сильно влияет на конверсию в целевое действие — нужен анализ).
  • Проверять всё нужно в виде mvp и через A/B-тесты (прежде чем строить космолёты). Например, в кейсе с марками и моделями авто всегда можно собрать и обработать 1000 запросов руками (!), посмотреть, какой трафик на эти запросы идёт, и запустить A/B-тест. По итогам A/B-теста можно ответить на вопрос «Какой прирост в конверсии будет благодаря такой доработке для всех запросов, подпадающих под правило?». И только потом начать думать, а нужно ли автоматически детектировать все такие запросы и как их, собственно, детектировать.

Пользуются ли посетители фильтрами? Если да, то какими и как именно? Пользуются ли сортировками?

Статистика использования фильтров и сортировок (доля поисков с конкретными фильтрами, последовательность выбора, количество выбранных) может дать много информации для ответа на вопросы:

  • Как делают выбор пользователи.
  • Какую информацию отобразить на сниппете (и насколько заметно).
  • Какую информацию учитывать при ранжировании сниппетов в выдаче в первую очередь.

Пример инсайта с сортировкой

Был у меня случай в одном продукте, когда мы обнаружили следующий доминирующий паттерн поведения пользователей:

  • Пользователь попадает на страницу с поиском.
  • 80–90% пользователей используют сортировку по цене (сначала самые дешёвые).

Это была вводная статья. В следующей статье я расскажу, что такое релевантность, как построить поиск книг в электронной библиотеке и поиск объявлений в онлайн-классифайде.

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Evgeny Guryanov", "author_type": "self", "tags": [], "comments": 14, "likes": 20, "favorites": 140, "is_advertisement": false, "subsite_label": "life", "id": 79690, "is_wide": false, "is_ugc": true, "date": "Sun, 18 Aug 2019 20:07:01 +0300", "is_special": false }
0
{ "id": 79690, "author_id": 346502, "diff_limit": 1000, "urls": {"diff":"\/comments\/79690\/get","add":"\/comments\/79690\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/79690"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199123, "last_count_and_date": null }
14 комментариев
Популярные
По порядку
Написать комментарий...
5

Поздравляю с первой статьей, Женя :)

Ответить
0

Никита, спасибо!

Ответить
4

Пока что я не могу целый квартал выбить документы у DocDoc, когда провёл оплату по рекомендации менеджера Сбербанка. Фактически, навязанная услуга ( до кучи), никто не предоставил ни ключ для активации промокода, никто не в состоянии отправить по оплаченному счету по безналичному расчёту. Поиск Вы говорите? Попробуйте связаться с этой компаний, будете долго искать свой акт на данную оплату.

Ответить
1

Алексей, разберемся. Написали Вам в Facebook.
Пока разбираемся, выдали промокод.

Ответить
3

Так может поиском потому и пользуются мало, что он неудобен? Как-то ждёшь от продакта, что он как раз об этом и скажет 🙂

(Из приложения VC пропала возможность копировать часть текста, поэтому цитирую картинкой)

Ответить
0

Спасибо за комментарий.
В статье были примеры, когда сам поиск на пользовательском пути не особо и нужен конкретным сегментам пользователей.
И да, при улучшении поиска доля пользователей, которые им пользуются, скорее всего будет расти.

Ответить
1

Для поиска есть чудесная штука, называется sphinx.
Натравливаешь ее на базу, она создает свой индекс, и выдает результаты.

Ответить
2

Это полно текстовый поиск и ищет он только по названию, отсюда и куча проблем с качеством выдачи результатов. После натравливания вам придётся докручивать руками синонимы и различные дополнительные правила, прикручивать алгоритмы ранжирования, включать анализ пользователей и т.д. Если это было бы так просто, то у каждой компании был бы свой поиск аля яндекс или гугл.
Настоятельно рекомендую разобраться, как изнутри работают стандартные поисковые машины)

Ответить
0

По какому еще названию? Если вы его натравите на столбец с названием - да.
Но натравить можно на все, плюс морфология есть.

Ответить
1

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

Ответить
0

Так это просто мощный инструмент поиска. Все, что Вы написали, необходимо до запроса к движку учитывать.

Как, по вашему, работает интернет-магазин, с остатками на разных складах?

Ответить
0

Так вот, поиск - это не только послать запрос движку и получить от него ответы. Об этом и речь.

Ответить
0

Александр, про Sphinx (как про инструмент для решения части поисковых задач) будет немного во второй статье. Её постараюсь опубликовать на этой неделе.
Про остальное достаточно правильно отписались Вадим и Антон.

Ответить
–1

Спасибо за статью Евгений!! Как раз определяемся по своему продукту с поиском. Понял что всего 900 Разных продуктов это фигня по сравнению с Вашими примерами)))

Ответить
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovx", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "disable": true, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ] { "page_type": "default" }