Фасетный поиск (или фасетная навигация) — это способ организации поиска и фильтрации информации, при котором результаты одновременно уточняются по нескольким независимым категориям (фасетам), а пользователь видит, сколько вариантов останется после применения каждого фильтра.
Наиболее распространенное применение – фильтраторы интернет-магазинов: «Бренд», «Размер», «Цена», «Цвет». Вы ставите галочку «красный» — остаются только красные товары, затем выбираете «размер M» — результаты сужаются дальше. При этом вы можете снять любой фильтр в любой момент и не начинать поиск заново.
Множественные критерии: фильтры из разных фасетов можно комбинировать (бренд X + цена до 5000 + цвет синий).
Немедленный подсчёт. Система заранее показывает, сколько результатов даст применение каждого фильтра (например: «Красный (15)», «Синий (7)»).
Независимость фасетов: каждый фасет (цвет, бренд, цена) не зависит от других, но вместе они сужают выдачу.
Гибкость. Можно снять любой фильтр, и остальные продолжат работать.
Практический пример
Вы ищете отель. Фасеты:
Звездность: 5* (24 отеля), 4* (38), 3* (12)
Бассейн: есть (45), нет (29)
Завтрак: включён (50), не включён (24)
Вы выбираете «5*» + «есть бассейн» — система покажет отели, удовлетворяющие обоим условиям.
Где применяется
Интернет-магазины (одежда, электроника)
Поиск авиабилетов и отелей
Каталоги недвижимости
Библиотечные системы
Аналитические дашборды
Фасетный поиск и модель EAV
Обычный поиск (поисковая строка) даёт плоский список результатов, и чтобы уточнить запрос, нужно переформулировать его с нуля. Фасетный поиск позволяет «играть» с фильтрами как с кубиками — добавлять и убирать их без потери контекста.
Модель EAV (Entity-Attribute-Value, «сущность-атрибут-значение») и фасетный поиск тесно связаны, но не тождественны. Их связь проявляется в двух аспектах: хранении разнородных атрибутов и проблемах производительности при фасетной фильтрации. Фасетный поиск работает с множеством динамических категорий (фасетов): цвет, размер, материал, бренд и т.д. В реляционных базах данных для каждого такого атрибута создавать отдельный столбец было бы негибко (при добавлении нового фасета придётся менять схему таблицы). Модель EAV решает это:
Attribute (атрибут) — название фасета (например, «цвет»).
Value (значение) — конкретное значение («красный»).
Все характеристики хранятся в одной или нескольких таблицах вида `(entity_id, attr_id, value)`. Это идеально подходит для каталогов, где у разных товаров могут быть разные наборы фасетов (у смартфона — «объём памяти», у футболки — «размер»).
Проблема: EAV плохо подходит для быстрого фасетного поиска
Фасетный поиск требует:
Быстрой фильтрации по множеству условий одновременно (цвет = красный AND цена < 5000).
Подсчёта количества для каждого возможного значения каждого фасета (например, «красный (15)», «синий (7)») без применения других фильтров.
В наивной реализации EAV каждая фильтрация превращается в серию `JOIN` или `EXISTS` с самосоединением таблицы атрибутов. Например, для двух фильтров:
SELECT entity_id FROM eav WHERE (attr='color' AND val='red')
INTERSECT
SELECT entity_id FROM eav WHERE (attr='price' AND val BETWEEN 0 AND 5000)
При большом количестве записей и атрибутов такие запросы становятся очень медленными (полноценные `JOIN`, `GROUP BY` с повторами).
Как решают эту проблему на практике
Связь «EAV → фасетный поиск» обычно реализуют через специальные оптимизации:
Денормализация — данные из EAV сворачивают в широкие строки (одна строка на товар, все атрибуты — как колонки) в поисковом индексе (Elasticsearch, Solr). Там фасетная фильтрация работает быстро.
Колоночные базы данных (ClickHouse, Vertica) — хранят EAV-подобные данные, но эффективно сжимают и индексируют.
Инвертированные индексы — для каждого значения атрибута строят список идентификаторов сущностей (как в поисковых движках).
Фасетный поиск и EAV часто используются вместе (например, в интернет-магазинах на реляционных БД), но из-за низкой производительности EAV для сложных запросов реальный фасетный поиск строят поверх EAV с помощью индексов, денормализации или специализированных поисковых движков. EAV даёт гибкость для фасетов, но без оптимизаций убивает скорость.
Преимущества фасетного поиска для SEO
Грамотно реализованный фасетный поиск открывает перед SEO несколько важных преимуществ. Хотя часто его представляют как технически сложный элемент, он способен превратить обычный каталог в мощный инструмент для привлечения целевого трафика.
С точки зрения SEO, ключевые преимущества фасетного поиска заключаются в следующем:
Привлечение целевого низкочастотного трафика. Страницы, создаваемые комбинациями фильтров, идеально соответствуют длинным низкочастотным запросам (long-tail), которые пользователи вводят на этапе, близком к покупке (например, “купить синие беговые кроссовки 42 размера”). Конкуренция по таким запросам невысока, а конверсия — значительно выше, что позволяет эффективно расширять семантическое ядро.
Расширение органического охвата. Вы перестаете полагаться только на статические страницы категорий. Индексируя наиболее ценные комбинации фильтров, вы создаете сотни и тысячи новых точек входа на сайт из поиска.
Улучшение поведенческих факторов за счёт упрощения навигации. Упрощая поиск нужного товара, вы снижаете количество отказов. А поведенческие факторы, как известно, являются важным сигналом качества для поисковых систем.
Возможность значительно масштабировать ассортимент за счёт дополнительных семантических срезов (категорий). Ассортимент представленной информации (товары, услуги, относящиеся к одной тематике сущности) был и остаётся одним из важнейших критериев ранжирования сайта. Чем полнее ассортимент – тем он ценнее для поисковой системы.
Взгляд от Google
Интересно, что сам Google активно использует принципы фасетного поиска для улучшения выдачи. Поисковая система автоматически анализирует результаты и предлагает пользователю свои варианты уточнения запроса (фасеты), ранжируя их по тому, насколько полезными они могут быть. Это подтверждает, что фасетная навигация — это не просто техническая фишка, а признанный мировым стандартом способ организации информации в современном поиске.
Возможные проблемы
Однако было бы нечестно не упомянуть об обратной стороне медали. Именно фасетный поиск называют самой частой причиной проблем с избыточным сканированием (overcrawling). Это происходит, когда поисковые роботы тратят свой краулинговый бюджет на бесконечный обход бесполезных комбинаций фильтров, вместо того чтобы индексировать новые товары и важные страницы. Причина – открытые для индексирования страницы, генерируемые фильтратором. В этом случае автоматически сгенерированные страницы без реального поискового спроса и без полезных пользовательских сигналов могут стать как “ловушкой для поисковых краулеров”, так и причиной попадания сайта под фильтр за малопопулярный и некачественный контент.
Это приводит к главному правилу SEO для фасетного поиска: нужно индексировать не все подряд, а только страницы с реальной поисковой ценностью.
Что нужно индексировать: страницы, которые отвечают на осмысленный пользовательский запрос (`/catalog/smartfony/samsung/s-1000`).
Что нужно исключить из индекса: страницы с “мусорными” комбинациями, которые не ищут в реальности (сортировка по цене, фильтр по артикулу, множество пересекающихся параметров).
Управление этим процессом — отдельная, но решаемая задача, для которой существуют такие инструменты, как файл `robots.txt`, мета-тег `noindex` и атрибут `rel=”canonical”`.
Фасетный поиск — это мощный катализатор SEO, который может дать вашему сайту существенное преимущество в конкурентной борьбе. Он позволяет привлекать целевой трафик, на который сложно выйти другими способами.