Фасетная навигация и фильтры в SEO
В интернет-магазине есть товары.
У каждого товара есть свойства:
цвет, размер, бренд, цена.
Пользователь хочет выбрать
красные кроссовки размера 42.
Для этого на сайте делают фильтры. Пользователь кликает по чекбоксам, а URL меняется:
/catalog/crossovki/?color=red&size=42
Это удобно для человека. Но для поисковика каждый набор фильтров - это новый URL. Такие страницы называют фасетными.
Проблема в том, что комбинаций
слишком много. Цвет 'red',
размер 42, бренд 'nike',
цена от 3000 до 5000.
Поисковик получает миллионы
почти одинаковых страниц.
Это называется фасетный взрыв. Робот тратит краулинговый бюджет на мусор и не доходит до важных страниц: карточек товаров и категорий.
Вот типичный пример ссылок в фасетной навигации:
<a href="/catalog/crossovki/?color=red">Red</a>
<a href="/catalog/crossovki/?color=red&size=42">Red 42</a>
<a href="/catalog/crossovki/?color=red&size=42&brand=nike">Red 42 Nike</a>
Каждая такая ссылка - отдельный URL. Если не принять меры, они все попадут в индекс.
Как закрывать фасетные страницы
Есть три основных инструмента:
robots.txt, canonical и
noindex. Они делают разное,
и путать их нельзя.
Файл robots.txt запрещает
обход. Робот не скачивает страницу.
Но если на URL уже есть внешние
ссылки, он может попасть в индекс
без контента.
Директива noindex запрещает
индексацию. Робот скачивает страницу,
видит мета-тег и не добавляет ее
в индекс.
<head>
<meta name="robots" content="noindex, follow">
</head>
Тег canonical указывает
главную версию страницы. Робот
понимает, что перед ним дубль,
и склеивает сигналы с основной
страницей.
<head>
<link rel="canonical" href="https://example.com/catalog/crossovki/">
</head>
Что выбрать
Для фасетных страниц обычно
используют canonical.
Он ведет на чистую категорию
без параметров.
Если страница точно не нужна
в поиске, ставят noindex.
Например, сортировка по цене
или по популярности:
/catalog/crossovki/?sort=price
/catalog/crossovki/?sort=popular
Файл robots.txt подходит
для параметров, которые не создают
ценных страниц. Например,
UTM-метки:
User-agent: *
Disallow: /*?utm_
Disallow: /*?sort=
Disallow: /*?page=
Но помните: robots.txt не
гарантирует исключение из индекса.
Если страница важна для исключения,
лучше noindex.
Часто комбинируют: robots.txt
для мусорных параметров,
canonical для фасетов,
noindex для служебных
страниц.
Практические задачи
Расскажите, почему фильтры в интернет-магазинах создают тысячи мусорных URL.
Чем отличается robots.txt
от noindex?
Что выбрать, если страница
уже проиндексирована и нужно
ее убрать?
Дан фрагмент верстки:
<head>
<title>Красные кроссовки</title>
</head>
<body>
<a href="/catalog/crossovki/?color=red&size=42">Red 42</a>
<a href="/catalog/crossovki/?color=red&size=42&brand=nike">Red 42 Nike</a>
</body>
Добавьте canonical,
который ведет на чистую
категорию /catalog/crossovki/.
Дан файл robots.txt:
User-agent: *
Disallow: /*?sort=
Disallow: /*?utm_
Allow: /
Расскажите, что делает этот файл. Какие страницы он закрывает от обхода?
Дана верстка:
<head>
<meta name="robots" content="noindex, follow">
</head>
<body>
<h1>Сортировка по цене</h1>
<a href="/catalog/crossovki/?sort=price">Price</a>
<a href="/catalog/crossovki/?sort=popular">Popular</a>
</body>
Исправьте верстку так, чтобы страницы сортировки не попадали в индекс, но ссылки на товары оставались доступными для робота.
Напишите robots.txt,
который закрывает от обхода
URL с параметрами sort,
page и utm_,
но оставляет открытыми
карточки товаров и категории.