Каноническая ссылка (canonical) для фильтров
Как использовать canonical URL для предотвращения индексации непопулярных комбинаций фильтров в интернет-магазинах и каталогах.
Canonical для фильтров — это стратегия управления дублирующимся контентом на страницах с фильтрацией. Для популярных комбинаций (имеющих поисковый спрос) указывается self-referencing canonical, для непопулярных — canonical на родительскую страницу категории. Это помогает сохранить краулинговый бюджет и избежать санкций за дубли.
Что такое canonical для фильтров
В интернет-магазинах и каталогах фильтры генерируют огромное количество URL-адресов с одинаковым или частично изменённым содержимым. Например, категория «Кроссовки» может иметь фильтры по бренду, размеру, цвету, цене. Комбинации параметров создают до сотен тысяч вариантов страниц. Проблема: поисковые роботы тратят бюджет на обход всех этих дублей, а пользователи редко заходят на непопулярные комбинации. Решение — динамически устанавливать canonical в зависимости от спроса на комбинацию.
Стратегия принятия решений
Разделите все комбинации фильтров на три категории:
- Высокий спрос — комбинации, по которым есть регулярные запросы в поиске (например, «кроссовки найк»). Устанавливайте canonical на саму страницу фильтра (self-referencing).
- Средний спрос — комбинации, которые иногда ищут, но не часто. Можно оставить canonical на себя, но следить за краулинговым бюджетом.
- Низкий или нулевой спрос — комбинации, которые никто не ищет. Устанавливайте canonical на родительскую категорию (без фильтров).
Пример принятия решений для категории /shoes/:
URL Спрос Canonical
/shoes/ Высокий self (на себя)
/shoes/?brand=nike Высокий self
/shoes/?brand=nike&color=red Средний self
/shoes/?brand=nike&color=red&size=42 Низкий /shoes/
/shoes/?brand=nike&color=red&size=42&sort=price_asc Низкий /shoes/Как реализовать технически
Вам потребуется определить на сервере, является ли текущая комбинация фильтров популярной. Самый простой способ — вести список «белых» комбинаций в коде или базе данных.
<?php
// Пример логики на PHP
$popularCombinations = [
'brand=nike',
'brand=adidas',
'color=black',
'brand=nike&color=black'
];
$currentFilters = http_build_query($_GET); // 'brand=nike&color=red&size=42'
// Упрощённо: проверяем, есть ли текущая комбинация в списке популярных
if (in_array($currentFilters, $popularCombinations)) {
$canonical = 'https://example.com/shoes/?' . $currentFilters;
} else {
$canonical = 'https://example.com/shoes/';
}
?>
<link rel="canonical" href="<?= htmlspecialchars($canonical) ?>" />Более продвинутый подход — анализ данных из Google Search Console и Analytics. Комбинации, которые приносят клики и показы, оставляем с self-canonical. Остальные — canonical на категорию.
Альтернативные подходы
- JavaScript-фильтры без изменения URL — фильтрация происходит на клиенте, URL не меняется. Нет проблемы дублей, но нельзя проиндексировать популярные комбинации как отдельные страницы.
- noindex для непопулярных комбинаций — запрет индексации через meta robots. Минус: потеря ссылочного веса.
- Параметр nofollow для ссылок на фильтры — указание роботам не переходить по ссылкам на непопулярные комбинации (через атрибут rel="nofollow"). Не всегда эффективно, поскольку роботы могут всё равно их обнаружить.
Частые вопросы
Обсудим ваш проект?
Расскажите о целях и сайте — предложу формат работы и следующий шаг.