Страницы фильтров и раздувание индекса: что индексировать в каталоге

В каталоге индексируются только комбинации фильтров, на которые есть реальный спрос и которые имеют уникальный контент, — например «кроссовки мужские 42 размер». Все остальные комбинации (цвет + цена + бренд + порядок сортировки одновременно) не должны попадать в индекс, потому что они повторно показывают один и тот же список товаров в разных порядках и забирают силу у реальных страниц каталога. Эта проблема называется раздуванием индекса: в индексе оказывается больше «производных» URL, чем у самого сайта.

Откуда появляются страницы фильтров

На сайте с каталогом каждый признак фильтра добавляет в URL один параметр. Если три фильтра — цвет, размер, бренд — и в каждом по 10 значений, по комбинаторике получается более тысячи URL. К ним добавляются сортировка (sort=price_asc), отображение (view=grid), пагинация (page=7) и параметры сессии. На практике такой сайт, имея несколько сотен товаров, предлагает к сканированию десятки тысяч адресов.

Google называет это "faceted navigation" и дал отдельную рекомендацию в документации: crawling-managing-faceted-navigation. Главная мысль простая — такие URL могут расти бесконечно, поэтому сам сайт должен решить, какие из них оставить открытыми.

В чём вред

Во-первых — ресурс сканирования. Робот тратит время, выделенное на сайт, не на новые карточки товаров, а на сотни вариантов одного и того же списка. Новые товары попадают в индекс позже.

Второе — каннибализация. Категория «кроссовки», фильтр «кроссовки + чёрный» и фильтр «кроссовки + чёрный + 42» конкурируют за один и тот же запрос. Google сам выбирает, какой из них показывать, и выбор оказывается нестабильным.

Третье — сигнал качества. На многих страницах фильтров бывает 2–3 товара или вообще нет. Нахождение в индексе страницы с пустым результатом не улучшает общую оценку качества сайта. Этот аспект напрямую связан с разделом индексации в списке SEO-аудита.

Какие фильтры стоит индексировать

Если выполняются три условия сразу — страница остаётся открытой:

  1. Есть спрос в поиске. Люди ищут «кроссовки 42 размер», а не «чёрные, 42 размер, 300–400 тысяч, от дешёвых к дорогим».
  2. Результат стабильный и достаточный. В списке постоянно десятки товаров, он не пустеет в зависимости от сезона.
  3. На странице есть уникальный элемент. Свой title/description, короткий текст, возможно, свой H1.
Тип страницы Индекс Причина
Категория: /krossovka/ Да Основной спрос
Один атрибут: /krossovka/42-razmer/ Да Ищется в поиске
Бренд + категория: /krossovka/nike/ Да Есть спрос
Комбинация двух-трёх атрибутов Обычно нет Низкий спрос, контент повторяется
Ценовой диапазон Нет Бесконечные варианты
Сортировка, отображение, размер страницы Нет Контент одинаковый
Фильтр с пустым результатом Нет Пользователю не нужен

Технические инструменты и их границы

Есть четыре инструмента, и они не заменяют друг друга:

Инструмент Что делает Чего не делает
robots.txt Disallow Останавливает сканирование Не удаляет из индекса
meta-тег noindex Исключает из индекса Не останавливает сканирование
rel=canonical Указывает основной вариант дублирующегося контента Это рекомендация, а не команда
Вообще не давать ссылку URL не будет найден Не работает, если есть внешняя ссылка

Самая частая ошибка — закрыть URL в robots.txt и одновременно поставить noindex. Робот не может открыть страницу, поэтому не видит noindex; URL может остаться в индексе без описания. Выберите один из двух вариантов: если нужно исключить из индекса — поставьте noindex и разрешите сканирование; если страница ещё не в индексе и нужно просто сэкономить ресурс — robots.txt.

Разделите структуру URL заранее

Надёжное решение — вынести индексируемые фильтры в «чистый» путь (path), а остальные — в параметры. Тогда правило умещается в одну строку:

# Индексируется — в виде path
/krossovka/
/krossovka/nike/
/krossovka/42-razmer/

# Не индексируется — в виде параметров
/krossovka/?color=qora&price=300000-400000
/krossovka/?sort=price_asc
# robots.txt
User-agent: *
Disallow: /*?sort=
Disallow: /*?view=
Disallow: /*?price=
Allow: /*?page=

Порядок параметров тоже важен: ?color=qora&size=42 и ?size=42&color=qora — это два разных URL. В backend всегда выводите параметры в одном и том же алфавитном порядке, иначе появятся две копии одного списка. Хранить значения фильтров в #-фрагменте тоже не рекомендуется — Google не принимает фрагмент как отдельную страницу, и контент может вообще не попасть в индекс.

Не путайте пагинацию и сортировку

Пагинация и сортировка — не одно и то же. ?page=2 — это другой список товаров, то есть реально новый контент; его нужно оставить открытым для сканирования, иначе робот не найдёт карточки товаров внутри списка. ?sort=price_asc показывает те же товары в другом порядке — нового контента нет.

Поэтому делать canonical для page=2 на первую страницу — ошибка: робот может посчитать её дублем и не обратить серьёзного внимания на ссылки внутри. Правильный подход — каждая страница пагинации должна быть canonical для себя, а варианты сортировки должны иметь canonical на основную страницу без фильтров. Не полагайтесь на теги rel="next" и rel="prev": Google официально объявил, что с 2019 года перестал использовать их как сигнал для индексации.

Управление через внутренние ссылки

Робот находит страницу в основном по ссылке. Значит, само отсутствие ссылок на комбинации фильтров, которые не должны индексироваться, — сильный инструмент. На практике: панель фильтров может менять результат через JavaScript, но каждый чекбокс не должен существовать в HTML как <a href>. Наоборот, индексируемые страницы фильтров — «42 размер», «Nike» и т. п. — должны быть связаны видимой ссылкой со страницы категории.

Это структура pillar и cluster в каталоге: категория — pillar, выбранные страницы фильтров — cluster. При построении каталога Bisyor.uz ключевое решение тоже принималось на этом этапе: какие срезы становятся отдельными страницами, а какие остаются только элементами интерфейса.

Как проверить

  1. В отчёте Pages в Search Console сравните количество проиндексированных URL с реальным числом страниц на сайте. Если разница в несколько раз — есть раздувание.
  2. Откройте в том же отчёте списки "Duplicate without user-selected canonical" и "Crawled — currently not indexed": URL фильтров обычно накапливаются именно там.
  3. В поиске вручную проверьте, попали ли URL с параметрами в индекс, запросом вида site:sayt.uz inurl:sort=.
  4. Посмотрите в логах сервера, какие адреса робот запрашивает чаще всего, — это самый точный источник.
  5. Перед закрытием проверьте трафик по каждому шаблону: не ставьте noindex на страницу фильтра, которая уже приводит посещаемость.

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

Часто задаваемые вопросы

Потеряю ли я трафик, если закрою страницы фильтров?

Если закрываемые страницы сейчас не приводят посещаемость — нет. Поэтому порядок такой: сначала проверьте в Search Console клики по каждому шаблону, затем закройте комбинации с нулевыми кликами и дублирующимся контентом. Страница фильтра с трафиком, наоборот, должна усиливаться — для неё добавляется собственный текст и ссылка из категории.

Сколько страниц фильтров нужно оставить открытыми?

Точного числа нет, критерий — спрос. Обычно для одной категории это несколько десятков: срезы по самому востребованному одному атрибуту (размер, бренд, основной тип). Комбинация двух атрибутов открывается только если её явно ищут.

Могу ли я сделать это сам или нужен разработчик?

Настройка robots.txt и meta-тегов — это работа в консоли. Но изменение структуры URL (вынос параметров в path, унификация порядка параметров) выполняется на стороне backend. Если каталог уже работает, потребуется 301-редирект со старых URL на новые — эту часть без разработчика не сделать.

Считается ли раздувание индекса штрафом?

Нет, это не отдельная санкция. Вред косвенный: ресурс сканирования тратится впустую, страницы конкурируют между собой, а доля низкокачественных страниц на сайте растёт. Санкции ожидать не стоит, но рост замедлится.

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