Фасетная навигация против SEO: кто на самом деле режет видимость каталога
Фасетная навигация — фильтры по цвету, размеру, цене, бренду, наличию — прекрасная вещь для покупателя и тихая мина для SEO. Каждая комбинация фильтров рождает отдельный адрес. На каталоге в пару тысяч товаров таких адресов набираются не сотни, а десятки тысяч. Поисковик смотрит на эту гору почти одинаковых страниц, решает, что перед ним мусор, и начинает хуже показывать весь каталог. Не только фильтры. Карточки тоже. Те самые, которые должны продавать.
Фильтры не бывают безопасными по умолчанию
Фасетная навигация — это система фильтров и сортировок, которая на каждую комбинацию выбранных значений отдаёт отдельную страницу или отдельный URL с параметрами. Цвет, плюс размер, плюс сортировка по цене. Три клика — а вариаций одного и того же набора товаров уже десятки. Отличаются они порядком вывода или служебным параметром в адресной строке.
Сам по себе интерфейс фильтрации ни в чём не виноват. Он поднимает конверсию. Проблема начинается, когда каждая комбинация попадает в индекс как самостоятельная «уникальная» страница.
И вот почему это происходит почти всегда. Фильтры придумывает маркетинг, рисует дизайнер, делает фронтендер. Человека, который отвечает за индексацию, зовут потом. Когда уже упало.
Фильтр без правил индексации — это не фича. Это генератор дублей с красивыми чекбоксами.
Глазами робота: тысяча одинаковых курток
Робот заходит на сайт. Видит «куртки красные размер M». Потом «куртки размер M красные» — другой порядок параметров, тот же товар, тот же текст. Для робота это два адреса. По сути — дубль.
Когда таких пар и троек тысячи, одновременно происходят две неприятности:
- Индекс раздувается бесполезными страницами.
- Сигналы релевантности размазываются. Вместо одной сильной страницы категории получается двадцать слабых, и ни одна не дотягивает до топа.
Отдельный сорт мусора — комбинации, на которые нет спроса. Пять редких параметров одновременно. Никто так не ищет. Никогда. Но робот исправно тратит на такие страницы время.
Crawl budget: почему новинки не попадают в поиск
У любого сайта ограничен ресурс обхода — crawl budget, то есть сколько страниц робот готов и может просканировать на конкретном хосте за период. Это касается не только гигантских порталов.
Простая арифметика: если робот тратит основную часть ресурса на перебор фильтров, до новых карточек, обновлённых цен и свежих разделов он доходит с опозданием. Новая коллекция появляется в поиске не завтра, а через недели. Всё это время товар формально есть на складе и формально отсутствует для покупателя из поиска.
Как это выглядит на практике:
- новинки индексируются с ощутимой задержкой;
- в логах сервера робот массово ходит по URL с параметрами;
- в панели вебмастера число страниц в индексе растёт, а трафик стоит;
- старые комбинации фильтров отдают 404 или цепочки редиректов и тоже съедают ресурс обхода.
Робот — не бесконечный стажёр. Если кормить его мусором, на нормальную еду у него не останется аппетита.
Откуда берутся дубли
| Источник | Как возникает | Что обычно делают |
|---|---|---|
| Порядок параметров в URL | ?color=red&size=m и ?size=m&color=red дают один результат | Единый порядок параметров и canonical |
| Сортировки и «показывать по 20/40/60» | Тот же набор товаров, другие служебные параметры | noindex,follow, для Яндекса — Clean-param |
| Комбинации без спроса | Пять фильтров сразу, такого никто не ищет | Закрыть от индексации, не генерировать ссылки |
| JS/AJAX-фильтры | Контент меняется без адреса или плодятся мусорные параметры | Серверный рендеринг ключевых страниц, контроль генерации URL |
Canonical: лекарство, которое легко передозировать
Тег rel="canonical" говорит поисковику, какая версия из нескольких похожих страниц основная. Для служебных вариаций — сортировки, количества товаров на странице — canonical на базовую категорию работает. Это описано и в документации Google, и в любом приличном руководстве по технической оптимизации.
Беда начинается, когда canonical ставят «на автомате».
Две ошибки встречаются чаще всего. Первая: на странице несколько противоречащих друг другу канонических ссылок. Вторая: canonical ведёт на страницу с другим содержимым — например, с фильтра, который реально меняет набор товаров. В обоих случаях поисковик либо игнорирует тег, либо склеивает не то. И из индекса вылетают как раз нужные посадочные — вроде «кроссовки мужские 42 размер».
Ещё момент, о котором забывают. Canonical — это подсказка, а не запрет обхода. Робот всё равно может ходить по такой странице. Хотите убрать комбинации из обхода — нужны другие инструменты.
noindex,follow: рабочая лошадка для фильтров
Мета-тег <meta name="robots" content="noindex, follow"> означает: страницу в индекс не брать, но по ссылкам с неё ходить. Для большинства фильтров без собственного спроса это ровно то, что нужно. Страница работает, товары на ней найдутся через карточки, а сама она не конкурирует в выдаче с категорией.
Теперь грабли. Огромные, ржавые, с гарантией.
Нельзя одновременно закрыть страницу в robots.txt через Disallow и поставить на неё noindex. Робот не может скачать запрещённую страницу — значит, не увидит и тег. Страница может застрять в индексе дольше, чем вы рассчитывали. Именно так выглядит «доработка фильтров» штатным программистом, который прочитал два гайда и применил оба одновременно.
Clean-param: только для Яндекса
У Яндекса есть отдельная директива в robots.txt — Clean-param. Она сообщает роботу, какие GET-параметры не меняют содержимое страницы и не должны считаться признаком новой страницы. Яндекс описывает её в своей документации и в блоге для вебмастеров.
Google эту директиву не поддерживает. Вообще.
Отсюда вывод, неприятный для любителей «одной волшебной строки». Универсального robots.txt на два поисковика не существует. Под Яндекс — Clean-param для сортировок, пагинации, UTM-меток. Под Google — canonical и noindex. Магазин, настроенный «по одному гайду», получает забавную картину: в одной поисковой системе каталог чистый, в другой продолжает размножаться почкованием.
Disallow: кувалда, а не скальпель
Disallow в robots.txt запрещает сканировать путь или параметр. Страница вообще не обходится. Для корзины, личного кабинета, служебных скриптов — правильно. Для фильтров каталога — очень осторожно.
Одно неаккуратное правило — и под запрет попадает «диваны угловые серые», у которой есть живой спрос. Вы собственными руками выключили из поиска страницу, которая могла приносить заказы.
Вот здесь я злюсь по-настоящему. Видел десятки robots.txt, собранных копипастой с чужих сайтов: строки на всякий случай, маски «чтобы наверняка», директивы под поисковики, которые давно их не читают. Подрядчик сдал работу, получил деньги, исчез. А владелец месяцами не понимает, почему «правильно настроенный» robots.txt не убирает дубли, но при этом прекрасно убирает продающие страницы. Robots.txt, собранный копипастой, — это не настройка. Это лотерея, в которой вы играете своим трафиком.
Пагинация: rel=next/prev уже не спасают
Раньше страницы постраничной навигации связывали атрибутами rel="next" и rel="prev". Они подсказывали поисковику последовательность. Google примерно с 2019 года не использует их как сигнал индексации пагинации. Ошибкой они не считаются, вреда не приносят. Пользы для Google — тоже.
Значит, вся нагрузка ложится на другое:
- canonical на каждой странице пагинации — на саму себя, а не на первую страницу;
- noindex,follow там, где отдельные страницы списка не несут ценности для выдачи;
- нормальные ссылки между страницами, по которым робот может пройти.
Canonical со второй страницы на первую — классика жанра. Товары со второй страницы после этого внезапно становятся хуже видны. Удивительно, правда?
AJAX-фильтры: быстро для людей, туманно для роботов
Всё больше магазинов фильтруют без перезагрузки: клик — и список товаров меняется через AJAX. Адрес при этом то меняется, то нет. Покупателю удобно.
Роботу — сложнее. Без серверного рендеринга он может не увидеть обновлённый список. Или наоборот: зацепит динамически сгенерированные параметры и наплодит новую порцию мусорных URL. Рекомендации по индексации JavaScript-сайтов сводятся к одному: важные для поиска страницы каталога отдавайте через серверный рендеринг (SSR). Не надейтесь, что робот выполнит ваш JavaScript так же старательно, как браузер.
Надежда — не стратегия индексации.
Сценарий: одежда и «удобные» фильтры
Возьмём магазин одежды на три тысячи товаров. Нанимают фронтендера сделать фильтры по цвету, размеру, бренду, материалу и сезону. Он делает ровно то, что просили: всё комбинируется, у каждой комбинации свой URL. Красиво. Логично. Про индексацию в задаче ни слова — задача называлась «сделать фильтры».
Проходит пара месяцев. В панели вебмастера страниц в индексе стало в разы больше, чем товаров. Органический трафик на карточки ползёт вниз. Владелец покупает рекламу, чтобы компенсировать. Рекламный бюджет растёт. Причина при этом спокойно лежит в каталоге и продолжает размножаться.
Сценарий: мебель и «улучшенная» сортировка
Мебельный магазин добавляет сортировки — по цене, новизне, рейтингу — и выбор «показывать 20, 40 или 60». Каждый вариант получает параметр в URL. Разработчики честно всё сделали: сортировка работает.
Только все комбинации открыты для индексации, canonical нет, в robots.txt пусто. Поисковик индексирует десятки версий одной категории с идентичным содержимым и не понимает, какую показывать. Позиции по основным коммерческим запросам опускаются. На сайте при этом «ничего не ломалось». Формально.
Что делаем мы в АйТи Фреш и чем это отличается
Типичный ИТ-подрядчик получает задачу «сделать фильтры» и делает фильтры. Вёрстка, скорость, анимация чекбоксов. Аудит индексации в смету не входит — и вы узнаёте о проблеме, когда трафик уже упал. Дешёвый конструктор сайтов часто вообще не даёт управлять canonical и robots.txt на нужном уровне: фильтры работают «как есть», и повлиять на это невозможно.
Мы делаем наоборот:
- Правила индексации — до разработки. Решаем, какие комбинации фильтров становятся посадочными страницами, а какие закрываются, ещё на этапе проектирования.
- Две стратегии, а не одна. Отдельная логика под Яндекс (Clean-param) и под Google (canonical, noindex).
- Логи вместо гаданий. Смотрим в логах сервера, куда реально ходит робот, а не угадываем по графику трафика.
- Сервер под контролем. Берём на обслуживание сервер магазина — от 7 000 ₽/мес, — чтобы очередной релиз фильтров не превратил каталог в свалку дублей.
Чек-лист на один день
- Сравните число страниц в индексе Яндекса и Google с реальным количеством товаров и категорий.
- Откройте несколько URL с разными фильтрами и посмотрите canonical: есть ли он, куда ведёт, нет ли двух разных.
- Проверьте robots.txt: есть ли Clean-param для Яндекса и отдельная логика для Google.
- Убедитесь, что страницы с noindex не закрыты одновременно Disallow.
- Посмотрите в логах, какую долю запросов робота занимают URL с параметрами фильтров.
- Проверьте, отдаются ли ключевые страницы каталога с сервера, если фильтры на AJAX.
- Найдите сортировки и пагинацию без canonical — они тоже плодят индексируемые копии.
Пока очередной фильтр не съел каталог
Подозреваете, что каталог теряет видимость из-за фильтров, сортировок или наследства от прошлого подрядчика? Напишите нам в АйТи Фреш. Проведём технический аудит индексации, настроим canonical, noindex и Clean-param под оба поисковика и возьмём сервер магазина на обслуживание, чтобы следующее «удобное улучшение» не обрушило трафик снова.
Частые вопросы
Сколько дублей — уже критично?
Универсального порога нет. Смотрите на соотношение: если страниц фильтров и сортировок в индексе кратно больше, чем карточек и категорий, индексацией никто не управляет.
Можно просто закрыть все фильтры и забыть?
Нет. Популярные сочетания — размер плюс бренд, цвет плюс тип — имеют реальный спрос и должны быть самостоятельными посадочными страницами. Закроете всё подряд — отдадите этот трафик конкурентам.
Чем canonical отличается от noindex?
Canonical указывает основную версию среди похожих страниц и помогает склеить сигналы. Noindex прямо запрещает брать страницу в индекс, есть у неё дубли или нет.
Если canonical уже настроен, Clean-param нужен?
Для Яндекса — да. Инструменты близкие, но работают по-разному: Clean-param влияет на обход параметров, canonical — на склейку сигналов уже найденных страниц.
Почему трафик падает не сразу, а через недели?
Роботу нужно время, чтобы обойти новые адреса, добавить их в индекс и перераспределить сигналы между дублями. Эффект накопительный — поэтому причину ищут где угодно, только не в недавно добавленном фильтре.
Отказаться от AJAX-фильтров?
Не обязательно. Важно, чтобы значимый для поиска контент отдавался роботу через серверный рендеринг, как бы ни был устроен фильтр на фронтенде.
Как понять, что виноваты именно фильтры?
Посчитайте долю URL с параметрами в индексе и в логах обхода. Если она аномально велика относительно числа товаров, начинать разбор стоит именно отсюда.


