
Магазин на 800 товаров отдавал роботу почти 240 тысяч адресов: дубли с GET-параметрами размножили каталог в триста раз, и поисковик месяцами ходил по сортировкам вместо новых карточек. Владелец при этом жаловался на «медленную индексацию» и покупал ссылки. Ссылки были ни при чём — сайт сам себя закопал под сортировками, фильтрами и метками рекламных кампаний. Ниже — как устроена эта проблема, как её найти на любом сайте за один вечер и каким инструментом закрывать каждый конкретный случай, чтобы не сделать хуже.
Что считать параметром в адресе
Адрес страницы состоит из протокола, домена, пути и необязательной строки запроса. Строка запроса начинается с вопросительного знака, дальше идут пары «ключ=значение», склеенные амперсандом. Вот типичный адрес каталога с двумя параметрами:
https://example.ru/catalog/nasosy/?sort=price&order=asc
Здесь sort и order — параметры, они же GET-параметры (передаются методом GET, прямо в адресе, в отличие от POST, где данные уходят в теле запроса). Движок сайта читает их и меняет ответ: переставляет товары, включает фильтр, открывает нужную страницу списка, подставляет валюту.
Ключевая деталь, из-за которой начинаются все беды: поисковая система адресует документы по полному URL. Всё, что стоит после вопросительного знака, — часть URL. Значит /catalog/nasosy/, /catalog/nasosy/?sort=price и /catalog/nasosy/?sort=price&order=asc для робота три разных документа, даже если байт в байт содержат одно и то же. Человек видит один раздел. Робот видит три страницы, которые надо скачать, разобрать, сравнить между собой и решить, какую показывать в выдаче.
Не каждый параметр вреден. Параметр бывает значащим — он меняет содержимое так, что получается действительно другая страница (номер страницы пагинации, конкретный товар в старых движках вида ?id=15). И бывает незначащим — он ничего не меняет для поиска: метка кампании, идентификатор сессии, партнёрский код, порядок сортировки. Вся работа сводится к тому, чтобы разложить параметры сайта на две эти кучки и обойтись с каждой по-своему.
Почему один и тот же контент оказывается доступен по десяткам адресов
Дело в комбинаторике. Возьмём обычный каталог: пять фильтров по четыре значения в каждом, три варианта сортировки, два направления сортировки, три варианта количества товаров на странице и десять страниц пагинации. Даже если считать только по одному значению каждого фильтра, получается больше десяти тысяч уникальных адресов на один раздел. При наличии множественного выбора значений число уходит в сотни тысяч.
К комбинаторике добавляются четыре механизма, которые обычно упускают:
- Порядок параметров. Адреса
?brand=grundfos&type=drenazhи?type=drenazh&brand=grundfosдля робота разные, а для сайта одинаковые. Если фильтр собирает строку запроса в порядке кликов пользователя, вы получаете столько версий страницы, сколько существует перестановок. - Регистр и формат значений.
?city=Moscowи?city=moscow,?page=1и?page=01, значение с пробелом и с плюсом — снова разные адреса. - Пустые значения.
?sort=,?filter=&brand=— движок их игнорирует, робот аккуратно скачивает каждый. - Несуществующие параметры. Самая опасная штука. Откройте любую страницу сайта и допишите к ней
?test=12345. Если сервер вернул код 200 и ту же самую страницу, а канонического адреса на ней нет — сайт генерирует бесконечное пространство адресов. Достаточно, чтобы кто-то один раз поставил ссылку с мусорным параметром, и робот начнёт наматывать круги.
Эта проверка занимает десять секунд и сразу показывает, насколько всё запущено. Правильное поведение: либо отдать 404 на неизвестный параметр, либо отдать 200 с каноническим адресом, указывающим на чистую версию.
Откуда берутся параметры на обычном сайте
Источников немного, они повторяются от проекта к проекту. Перечислю с примерами и сразу с рекомендацией, чем закрывать — детали по каждому инструменту дальше в статье.
- Фильтры и сортировки каталога — главный поставщик дублей в магазинах.
- Пагинация — страницы списков товаров, статей, отзывов.
- Внутренний поиск по сайту — бесконечный генератор адресов, потому что запрос вводит пользователь.
- Метки рекламных кампаний — utm-набор, yclid, gclid, fbclid и их родственники.
- Идентификаторы сессий — PHPSESSID, sid, sessionid; старая болезнь самописных движков и части CMS.
- Партнёрские ссылки — ref, partner, from, aff.
- Версия для печати — print=1, view=print.
- Язык, валюта, регион, город — если реализованы параметром, а не отдельным разделом или поддоменом.
- Служебные параметры — replytocom в блогах, action, preview, sphrase_id в некоторых движках.
| Источник параметров | Пример адреса | Как закрывать |
|---|---|---|
| Сортировка каталога | /catalog/nasosy/?sort=price&order=desc | Канонический адрес на раздел + Clean-param для Яндекса |
| Фильтр без спроса | /catalog/nasosy/?price_from=1000&price_to=5000 | Канонический адрес на раздел, при большом объёме — noindex |
| Фильтр под частотный запрос | /catalog/nasosy/?brand=grundfos | Не закрывать: перевести на ЧПУ-адрес и открыть как посадочную |
| Пагинация | /catalog/nasosy/?page=3 | Оставить в обходе, канонический адрес на саму себя, уникальный title |
| Внутренний поиск | /search/?q=насос+для+скважины | Disallow в robots + мета-тег noindex на шаблоне |
| Метки рекламы | /uslugi/?utm_source=yandex&utm_medium=cpc | Канонический адрес + Clean-param. Запрет в robots не ставить |
| Идентификатор сессии | /catalog/?PHPSESSID=a1b2c3d4 | Отключить в движке, дополнительно Clean-param |
| Партнёрская ссылка | /tovar/nasos-1/?ref=blogger7 | Канонический адрес + Clean-param |
| Версия для печати | /statya/?print=1 | Заменить на стили @media print, старые адреса — в noindex |
| Валюта или город | /catalog/?currency=usd | Clean-param, если контент не меняется; поддомен или папка, если меняется |
Чем дубли с параметрами реально вредят
«Дубли — это плохо» звучит абстрактно. Разложу на конкретные потери, которые видно в цифрах.
Размывание сигналов между копиями. Внешние ссылки, поведенческие показатели, возраст документа, накопленный вес — всё это привязано к конкретному адресу. Если на страницу ссылаются десять сайтов, и половина ссылок ведёт на версию с партнёрской меткой, вес делится. Поисковик старается склеивать копии сам, но склейка не бесплатная: она происходит с задержкой, иногда неверно, а иногда не происходит вовсе.
Трата бюджета обхода. У каждого сайта есть лимит на то, сколько страниц робот готов скачивать в сутки. Он зависит от скорости ответа сервера, авторитетности домена, частоты обновлений. Если 90% лимита уходит на сортировки, новые товары и статьи попадают в индекс через недели вместо суток. Именно так выглядит «сайт плохо индексируется» в большинстве случаев — не магия, а арифметика.
Каннибализация. Робот сам выбирает, какой адрес показывать по запросу. Иногда он выбирает не тот. Классика жанра: по запросу «купить дренажный насос» в выдаче висит /catalog/nasosy/?sort=price&page=4 с заголовком раздела и случайной подборкой товаров. Конверсия с такой страницы ниже, позиции скачут, потому что копии конкурируют друг с другом.
Мусор в отчётах. В панели вебмастера раздел «Страницы в поиске» превращается в кашу, где невозможно понять, что реально проиндексировано. В аналитике страницы входа размазываются по десяткам вариантов одного адреса, и отчёт по посадочным перестаёт быть читаемым.
Нагрузка на сервер. Робот, обходящий сотни тысяч комбинаций фильтров, — это фактически лёгкий DDoS. На слабом хостинге сайт начинает тормозить, скорость ответа падает, и лимит обхода режется ещё сильнее. Круг замыкается.
Ищем дубли в панелях вебмастера
Начинать надо с данных самих поисковиков — они показывают не то, что вы думаете о сайте, а то, что робот на нём нашёл.
Яндекс.Вебмастер. Раздел «Индексирование» → «Страницы в поиске». Переключаемся на вкладку со всеми страницами и выгружаем список в XLS или CSV — интерфейс показывает ограниченное количество строк, а в выгрузке лежит полный набор. Дальше в таблице фильтруем адреса, содержащие вопросительный знак, и группируем по имени параметра. Обычно хватает пяти минут, чтобы увидеть главного виновника.
Второй важный отчёт — «Страницы, исключённые из поиска». Смотрим статусы «Дубль» и «Неканоническая». Статус «Дубль» означает, что робот сам склеил адрес с другим и выбрал главный — иногда не тот, который выбрали бы вы. Статус «Неканоническая» означает, что робот принял ваш канонический адрес. Если страниц со статусом «Дубль» тысячи, а канонических указаний на сайте нет, вы просто отдали выбор роботу.
Google Search Console. Раздел «Индексирование» → «Страницы». Интересуют статусы «Страница является копией: Google выбрал другую каноническую страницу, чем пользователь», «Страница является копией: канонический вариант не выбран пользователем», «Обнаружена — не проиндексирована» и «Просканирована — не проиндексирована». Последние два часто означают именно то, что робот утонул в комбинациях и решил не тратить силы. Отдельно стоит зайти в «Статистику сканирования» и посмотреть, сколько запросов в сутки приходится на сайт и как распределяются коды ответа.
Смежный материал по теме — «AMP страницы WordPress | Перевожу сайт на AMP и Турбо».

Ищем дубли своими руками: парсер, выдача, логи, аналитика
Панели показывают только то, что робот уже нашёл и решил показать. Полную картину дают четыре дополнительных источника.
Обход парсером. Screaming Frog, Netpeak Spider, SiteAnalyzer — любой краулер. Важная настройка: не отбрасывать параметры при обходе, иначе инструмент схлопнет все варианты в один адрес и покажет идеальную картину. После обхода сортируем список по адресу, ищем вопросительный знак, смотрим отчёты по дублирующимся заголовкам, описаниям и содержимому. Отдельно проверяем колонку с каноническим адресом: страниц без канонического указания в каталоге быть не должно. Полезный трюк — запустить обход дважды: с параметрами и без, разница в количестве адресов и есть масштаб проблемы.
Оператор в выдаче. Быстрая прикидка без инструментов:
site:example.ru inurl:?
site:example.ru inurl:utm_
site:example.ru inurl:sort
site:example.ru inurl:PHPSESSID
site:example.ru inurl:page=
Числа в выдаче приблизительные, но сам факт наличия таких страниц в индексе — уже сигнал.
Помогу с продвижением: продвижение бизнеса в Яндексе — вывожу сайты в топ Яндекса белыми методами.
Логи сервера. Единственный источник, который показывает, куда робот реально ходит, а не куда вы думаете. Забираем access.log за пару недель и считаем:
grep -i 'YandexBot' access.log \
| awk '{print $7}' | grep '?' \
| sed 's/=[^&]*//g' | sort | uniq -c | sort -rn | head -30
Команда отрезает значения параметров и оставляет их имена, поэтому на выходе получается рейтинг: какой параметр съедает больше всего обращений робота. Если сверху висит ?sort с десятками тысяч запросов, вы уже знаете, с чего начинать.
Отчёт по страницам входа в аналитике. В Яндекс.Метрике это «Отчёты» → «Содержание» → «Страницы входа». По умолчанию Метрика группирует адреса и режет метки, поэтому в настройках отчёта нужно отключить группировку параметров. Ставим сегмент «источник — переходы из поисковых систем» и смотрим, есть ли среди страниц входа адреса с параметрами. Если поиск приводит людей на ?sort=price, дубль уже победил оригинал.
| Где смотреть | Что открыть | Признак проблемы |
|---|---|---|
| Яндекс.Вебмастер | Страницы в поиске, выгрузка всех страниц | В индексе есть адреса с вопросительным знаком |
| Яндекс.Вебмастер | Исключённые страницы, статусы «Дубль» и «Неканоническая» | Тысячи дублей, главный адрес выбран роботом, а не вами |
| Search Console | Индексирование → Страницы | Статусы «Страница является копией», «Обнаружена — не проиндексирована» |
| Search Console | Статистика сканирования | Рост числа запросов без роста числа полезных страниц |
| Парсер | Обход с параметрами против обхода без них | Разница в количестве адресов больше чем в два раза |
| Парсер | Отчёты по дублям title, h1, содержимого | Десятки страниц с одинаковым заголовком |
| Выдача | site: с оператором inurl: | В индексе метки, сортировки, идентификаторы сессий |
| Логи сервера | Обращения робота к адресам с параметрами | Больше 30% обхода уходит на параметры |
| Метрика | Страницы входа без группировки параметров | Поисковый трафик идёт на адреса с параметрами |
| Ручная проверка | Любой адрес плюс ?test=12345 | Ответ 200 и нет канонического адреса |
Инструменты управления и когда какой применять
Инструментов шесть, и они делают разное. Половина ошибок в работе с дублями возникает оттого, что берут не тот инструмент: закрывают в robots то, что надо склеивать, и склеивают то, что надо удалять.
| Инструмент | Что делает | Робот скачивает страницу | Передаёт вес на основной адрес | Когда применять |
|---|---|---|---|---|
| Канонический адрес | Указывает предпочтительную версию, рекомендация | Да | Да | Копии с одинаковым содержимым: сортировки, метки, фильтры без спроса |
| Clean-param в robots | Сообщает Яндексу, что параметр незначащий, и склеивает адреса | Нет, после учёта директивы перестаёт | Да | Метки, сессии, партнёрские коды, сортировки — только для Яндекса |
| Disallow в robots | Запрещает обход, но не индексирование | Нет | Нет | Служебные разделы, внутренний поиск, корзина, личный кабинет |
| Мета-тег noindex | Запрещает показ страницы в выдаче | Да | Частично, через ссылки на странице | Мусорные комбинации фильтров, которые уже попали в индекс |
| 301-редирект | Постоянно перенаправляет на другой адрес | Да, один раз | Да, почти полностью | Старые параметрические адреса, у которых есть ЧПУ-замена |
| Настройки движка | Не создаёт лишние адреса вообще | Нечего скачивать | Вопрос не возникает | Сессии, порядок параметров, поиск через POST, печать через стили |
Правило выбора простое. Если содержимое по адресу с параметром совпадает с основным и адрес нужен людям — канонический адрес плюс Clean-param. Если адрес не нужен ни людям, ни роботам и его можно физически убрать — правим движок. Если адресов бесконечно много и они не несут пользы — noindex, а после выпадения из индекса можно добавить и запрет обхода. Если параметрический адрес заменён нормальным — 301.
Канонический адрес: рекомендация, а не приказ
Тег ставится в секции head и выглядит так:
<link rel="canonical" href="https://example.ru/catalog/nasosy/">
Требования, которые нарушают чаще всего:
- Адрес абсолютный, с протоколом и доменом, в том же виде, что и рабочий (с www или без, со слешем или без — как настроено на сайте).
- Тег один на страницу. Два разных канонических указания робот проигнорирует оба.
- Каноническая страница отдаёт код 200, не редирект, не 404, не закрыта в robots и не помечена noindex.
- На самой канонической странице тег тоже стоит и указывает на неё саму.
- Никаких цепочек: А указывает на Б, Б на В. Только один шаг.
Слово «рекомендация» здесь не формальность. Поисковик рассматривает канонический тег как один из сигналов и может его отклонить. Отклоняет он его в предсказуемых случаях: содержимое страниц заметно различается; на «дубль» ведёт много внутренних ссылок, а на канонический — мало; дубль указан в карте сайта; дубль получает внешние ссылки; канонический адрес отвечает медленно или с ошибкой. Статус в Search Console «Google выбрал другую каноническую страницу, чем пользователь» — как раз про это. Лечится не повторной установкой тега, а устранением противоречий: чистим внутренние ссылки, убираем дубли из карты сайта, приводим сигналы в согласие.
Отдельно: канонический тег не экономит бюджет обхода. Робот всё равно скачивает страницу, чтобы прочитать тег. Для сайта с сотнями тысяч комбинаций фильтров одного канонического недостаточно — нужен инструмент, который останавливает обход.

Clean-param против запрета в robots: в чём принципиальная разница
Директива Clean-param — специфика Яндекса и лучший инструмент для незначащих параметров. Синтаксис:
User-agent: Yandex
Clean-param: sort&order /catalog/
Clean-param: utm_source&utm_medium&utm_campaign&utm_term&utm_content
Clean-param: yclid&ymclid&gclid&fbclid&_openstat
Clean-param: PHPSESSID&sid&ref&from
Первый аргумент — имена параметров через амперсанд. Второй, необязательный, — префикс пути, к которому правило применяется. Без пути правило действует на весь сайт. Длина одной директивы ограничена, поэтому длинные списки разбивают на несколько строк — это допустимо, строк может быть сколько угодно.
Теперь разница в поведении, ради которой всё затевается:
| Критерий | Clean-param | Disallow: /*?sort= |
|---|---|---|
| Что говорит роботу | Это один документ, параметр можно отбросить | Сюда не ходи |
| Судьба показателей дубля | Переносятся на основной адрес | Теряются |
| Внешние ссылки на адрес с параметром | Учитываются в пользу основного адреса | Не учитываются |
| Расход бюджета обхода | Робот перестаёт качать копии | Робот перестаёт качать копии |
| Виден ли роботу канонический тег и noindex | Не требуется | Нет, страница не скачивается |
| Поддержка | Только Яндекс | Все роботы |
Итог: Disallow создаёт слепую зону. Робот знает, что адрес существует (он встречал на него ссылки), но не знает, что там лежит, и не может связать его с основной страницей. Clean-param, наоборот, объясняет связь: адреса склеиваются, показатели суммируются, обход прекращается. Для меток кампаний, сессий и сортировок это ровно то, что нужно.
Если нужны детали, смотрите «Турбо страницы Яндекс».
Google директиву Clean-param не понимает и молча игнорирует. Для него работают канонический тег, качество внутренней перелинковки и здравая структура сайта. Инструмент «Параметры URL» в Search Console закрыт несколько лет назад, замены ему нет — Google утверждает, что справляется сам, и в большинстве случаев действительно справляется, если сигналы не противоречат друг другу.
Почему запрет в robots не убирает страницу из индекса
Самое частое заблуждение: «закрыл в robots — страница выпала». Файл robots.txt управляет обходом, а не индексированием. Это разные вещи.
Google прямо пишет, что закрытая в robots страница может попасть в выдачу, если на неё ведут внешние ссылки: сниппета не будет, вместо описания появится строчка о том, что описание недоступно, но адрес в индексе окажется. Статус в Search Console — «Проиндексировано, несмотря на блокировку в файле robots.txt». Яндекс к закрытым адресам относится строже, но и там страницы иногда задерживаются в индексе месяцами.
Хуже другое. Если вы закрыли адрес в robots, робот не скачивает страницу. Значит, он не видит ни канонический тег, ни мета-тег noindex, ни заголовок X-Robots-Tag. Вы своими руками отключили тот самый инструмент, которым собирались убрать дубль. Классическая ошибка выглядит так: поставили noindex на страницы фильтров, подождали неделю, ничего не изменилось, добавили ещё и Disallow — и заморозили ситуацию навсегда.
Правильная последовательность, если страницы уже в индексе:
- Ставим мета-тег noindex или канонический адрес, robots не трогаем.
- Ждём, пока робот обойдёт страницы и они выпадут из индекса — от двух недель до пары месяцев.
- Убедившись по отчётам, что страницы ушли, при желании добавляем Disallow, чтобы сэкономить бюджет обхода.
Мета-тег для полноты:
<meta name="robots" content="noindex, follow">
Параметр follow важен: он оставляет ссылки на странице рабочими, чтобы вес не запирался. Для нетекстовых ответов тот же смысл передаётся заголовком X-Robots-Tag: noindex.
Метки рекламных кампаний: почему их нельзя запрещать бездумно
Первое, что хочется сделать, увидев в индексе адреса с utm-метками, — закрыть их одной строкой:
Disallow: /*utm_
Так делать не стоит по трём причинам. Во-первых, на адреса с метками ведут внешние ссылки — из рекламы, рассылок, партнёрских публикаций, статей на других сайтах. Запретив обход, вы обнуляете вес этих ссылок вместо того, чтобы передать его посадочной. Во-вторых, робот, наткнувшись на закрытый адрес, не увидит канонический тег и не сможет склеить его с чистой версией. В-третьих, у поисковых роботов рекламных систем и у краулеров, проверяющих объявления, могут возникнуть проблемы с доступом к посадочной страницей.
Правильная схема состоит из двух шагов и работает на обе поисковые системы:
- На всех страницах сайта стоит канонический адрес без параметров. Тогда версия с меткой сама указывает на чистую и склеивается с ней.
- В robots.txt для Яндекса добавлены Clean-param со списком меток — робот перестаёт тратить обход и переносит показатели.
Список меток, которые обычно нужно перечислить: utm_source, utm_medium, utm_campaign, utm_term, utm_content, а также идентификаторы кликов рекламных систем — yclid, ymclid, gclid, gclsrc, gbraid, wbraid, fbclid, msclkid, _openstat, roistat, erid.
Если нужна помощь по теме — заказать сайт.
Чего не надо делать точно: ставить 301-редирект с адреса с меткой на чистый. Формально дубль исчезнет, но вместе с ним исчезнет и атрибуция — счётчик аналитики не успеет прочитать метку, и весь платный трафик уедет в «прямые заходы». Отчёты по рекламе перестанут сходиться, а причину будут искать месяцами.

Фильтры каталога: что выводить в индекс, а что закрывать
Фильтры — единственный источник параметров, где ответ не «закрыть», а «разобраться». Часть комбинаций отвечает реальному спросу и способна приносить трафик, который головной раздел не соберёт никогда.
Критерий простой: комбинацию стоит открывать, если под неё есть частотный запрос, если по ней остаётся достаточно товаров (пустая или почти пустая страница только навредит) и если мы готовы дать ей собственные заголовок, title, description и хотя бы небольшой текст. Три условия из трёх — делаем посадочную. Хотя бы одно не выполняется — закрываем.
Технически посадочную страницу фильтра почти всегда переводят с параметра на человекопонятный адрес: /catalog/nasosy/?brand=grundfos превращается в /catalog/nasosy/grundfos/. Так страница перестаёт быть дублем по определению, получает нормальный вид в выдаче и её удобно перелинковывать.
Подробнее об этом — в статье «Как найти страницы без трафика на сайте».
| Тип комбинации | Пример | Решение |
|---|---|---|
| Один значащий фильтр с явным спросом | Бренд, тип, назначение, материал | ЧПУ-адрес, свои метатеги и текст, ссылка из меню фильтра |
| Два фильтра с подтверждённым спросом | Тип плюс бренд, назначение плюс мощность | ЧПУ-адрес, если запрос частотный и товаров достаточно |
| Три и более фильтров | Бренд плюс цвет плюс мощность плюс наличие | Канонический адрес на раздел, из индекса убрать |
| Диапазоны цены | ?price_from=1000&price_to=5000 | Закрыть: комбинаций бесконечно много, спроса нет |
| Сортировка и вид отображения | ?sort, ?order, ?view, ?limit | Канонический адрес плюс Clean-param |
| Служебные флаги | ?in_stock=1, ?ajax=1, ?set_filter=y | Закрыть полностью, лучше убрать из адреса на уровне движка |
Отдельная деталь: страницы фильтров, которые вы решили открыть, должны быть доступны по обычным ссылкам, а не только через JavaScript. Если робот не может дойти до посадочной по ссылке, её существование бессмысленно.
Пагинация: как правильно и чего делать не надо
Пагинация — параметр значащий: вторая страница списка содержит другие товары, это не дубль. Тем не менее с ней регулярно поступают так, будто это мусор.
Рабочий подход сегодня выглядит так. Страницы со второй и дальше остаются открытыми для обхода и индексирования. Канонический тег на каждой из них указывает на неё саму. Заголовок и описание получают уточнение вида «— страница 2», чтобы не считаться дублями по метатегам. Текст с описанием категории показывается только на первой странице. Ссылки на соседние страницы — обычные, доступные без скриптов, а не только по кнопке «показать ещё».
Чего делать не надо:
- Ставить канонический адрес всех страниц пагинации на первую. Робот перестанет считать вторую и последующие самостоятельными, а вместе с этим начнёт реже по ним ходить. Товары, доступные только с пятой страницы, рискуют вообще не попасть в индекс.
- Закрывать пагинацию мета-тегом noindex. Со временем такая страница перестаёт передавать вес по ссылкам, и весь хвост каталога оказывается отрезан.
- Запрещать пагинацию в robots. Тот же эффект, только жёстче: робот не увидит ни товаров, ни ссылок.
- Рассчитывать на rel=»next» и rel=»prev». Google перестал использовать эти теги ещё в 2019 году. Вреда от них нет, пользы тоже.
Если каталог огромный и товары со второй страницы всё равно доступны роботу из карты сайта и из перелинковки, допустим более консервативный вариант с каноническим тегом на первую страницу — Яндекс его понимает корректно. Но универсально безопаснее оставить страницы самостоятельными.
Редиректы и настройки движка
301-редирект — правильный инструмент ровно в одном случае: когда у параметрического адреса есть постоянная замена. Старый движок отдавал /catalog/index.php?section_id=15, новый отдаёт /catalog/nasosy/ — здесь нужен именно 301, он переносит почти весь накопленный вес. Для меток и сортировок редирект не годится.
Гораздо надёжнее не создавать лишние адреса вовсе. Что стоит проверить в движке:
- Идентификаторы сессий в адресе. Отключаются настройкой PHP
session.use_only_cookiesиsession.use_trans_sid=0. Появление PHPSESSID в адресе — прямой признак, что что-то настроено неверно. - Порядок параметров. Фильтр должен собирать строку запроса в фиксированном порядке, а не в порядке кликов.
- Неизвестные параметры. Либо игнорировать и отдавать канонический адрес, либо возвращать 404.
- Внутренний поиск. Если можно перевести на POST — переводите. Если нет, страница результатов должна нести noindex, а раздел — закрываться в robots.
- Версия для печати. Заменяется стилями
@media print, отдельный адрес не нужен. - Карта сайта. В sitemap.xml должны попадать только канонические адреса. Дубль в карте сайта — прямое противоречие вашему же каноническому тегу.
- Внутренние ссылки. Меню, хлебные крошки, блоки «похожие товары» не должны ссылаться на адреса с параметрами.
Порядок работ: от находки до переобхода
Соблазн велик — увидел дубли и сразу пошёл писать robots.txt. Так делать не надо: половина адресов может приносить трафик, и закрывать их будет дорого. Последовательность, которая работает:
| Шаг | Что делаем | Чем | Результат шага |
|---|---|---|---|
| 1. Собрать | Выгрузить все адреса с параметрами | Вебмастер, Search Console, парсер, логи | Общий список и рейтинг параметров по частоте |
| 2. Классифицировать | Разделить параметры на значащие и незначащие | Таблица со списком параметров и их назначением | Понятно, что склеиваем, а что удаляем |
| 3. Оценить трафик | Проверить, есть ли визиты и позиции у адресов с параметрами | Метрика, отчёт по запросам в вебмастере | Список адресов, которые нельзя закрывать резко |
| 4. Выбрать инструмент | Для каждой группы — свой способ | Канонический тег, Clean-param, noindex, 301, правки движка | План внедрения с приоритетами |
| 5. Внедрить | Начать с параметра, съедающего больше всего обхода | Шаблоны сайта, robots.txt, настройки CMS | Изменения на боевом сайте |
| 6. Проверить | Убедиться, что ничего не сломано | Анализ robots в вебмастере, проверка кодов ответа, повторный обход парсером | Нет закрытых нужных страниц и битых канонических адресов |
| 7. Ускорить | Отправить основные адреса на переобход | Переобход страниц в вебмастере, проверка URL в Search Console, IndexNow | Робот приходит быстрее, чем по расписанию |
| 8. Замерить | Зафиксировать цифры до и повторить замер | Те же отчёты, что на шаге 1 | Понятно, работает ли решение |
Шаг шесть пропускать нельзя. Одна лишняя звёздочка в robots.txt способна закрыть весь каталог, и заметить это можно через месяц по обвалу трафика. Проверять надо инструментом самого поисковика: в Яндекс.Вебмастере есть анализ robots.txt, куда можно вставить список адресов и увидеть, разрешён каждый из них или запрещён.
Как проверить результат через месяц
Изменения не мгновенные. Clean-param учитывается после того, как робот заново скачает robots.txt, а склейка происходит при следующих обходах — обычно две-четыре недели. Выпадение страниц с мета-тегом noindex зависит от того, как часто робот к ним заходит, и может занять до двух месяцев на больших сайтах.
Что замерять и с чем сравнивать:
- Количество страниц в поиске. В Яндекс.Вебмастере оно должно снизиться до величины, близкой к реальному числу полезных страниц. Падение здесь — хорошая новость, если падают именно дубли.
- Исключённые со статусом «Дубль». Число должно уменьшаться, а статус части адресов — меняться на «Неканоническая», что означает принятое каноническое указание.
- Доля обращений робота к адресам с параметрами в логах. Считаем той же командой, что и в начале. Именно этот показатель отражает экономию бюджета обхода.
- Статистика сканирования в Search Console. Общее число запросов может упасть, а число проиндексированных полезных страниц — вырасти.
- Скорость индексации новых страниц. Публикуем новый товар или статью и засекаем, через сколько появится в выдаче. Разница до и после обычно самая наглядная.
- Позиции основных адресов. Если раньше по запросу выходил адрес с параметром, а теперь чистый — склейка сработала.
Если через месяц ничего не изменилось, ищите противоречие в сигналах: канонический тег, указывающий на закрытую страницу, дубли в карте сайта, внутренние ссылки на адреса с параметрами, конфликт Disallow и noindex. В девяти случаях из десяти проблема именно в том, что сайт говорит роботу две разные вещи одновременно.
Найти дубли и лишние адреса на вашем сайте помогу на SEO-консультации.
Частые вопросы
Можно ли просто закрыть в robots все адреса со знаком вопроса одной строкой?
Технически да, строкой Disallow: /*?, но результат чаще плохой. Под запрет попадут страницы пагинации, посадочные фильтров и адреса с рекламными метками, а вес внешних ссылок на них потеряется. Кроме того, уже проиндексированные адреса не выпадут — робот перестанет их скачивать и не увидит указаний на удаление. Такой запрет уместен только на сайтах, где параметры не используются вообще ни для чего полезного.
Что делать, если Clean-param не помещается в одну строку?
Разбить на несколько директив Clean-param — их количество не ограничено, ограничена длина каждой. Логично группировать по смыслу: отдельная строка для рекламных меток, отдельная для сортировок с указанием пути каталога, отдельная для сессий и партнёрских кодов. Так файл проще читать и править через полгода.
Дубли с параметрами влияют на фильтры и санкции?
Прямых санкций за них не накладывают: поисковики понимают, что это техническая особенность движков, а не попытка обмана. Ущерб косвенный — распылённые сигналы, съеденный бюджет обхода, конкуренция копий между собой. Но если параметрами генерируются тысячи страниц с подставленным в заголовок текстом запроса, это уже похоже на дорвейную схему и рискует получить оценку как низкокачественный контент.
Нужно ли удалять дубли вручную через инструмент удаления страниц?
Только если адрес попал в выдачу и мешает прямо сейчас — например, вместо главной по бренду показывается версия с меткой. Инструмент удаления даёт временный эффект: в Search Console примерно на полгода, в Яндексе адрес вернётся, если причина не устранена. Это обезболивающее, а не лечение — параллельно нужно ставить канонический тег или Clean-param.
Сайт на популярной CMS, там есть плагин для работы с дублями. Достаточно его?
Плагин обычно решает базовую часть: расставляет канонические теги, добавляет noindex служебным разделам, чистит адреса от лишних параметров. Это хороший фундамент, но специфику каталога он не знает — какие комбинации фильтров выводить в индекс, какие метки перечислять в Clean-param, что делать с партнёрскими ссылками. Настройки под конкретный проект всё равно приходится дописывать руками.
Разбор живого сайта: что мешает ему продвигаться:
Коротко
- Любой символ после вопросительного знака делает адрес новым документом для робота, поэтому фильтры, сортировки и метки размножают каталог в десятки и сотни раз.
- Искать дубли надо в четырёх местах сразу: отчёты вебмастера и Search Console, обход парсером с параметрами, логи сервера и страницы входа в аналитике без группировки.
- Для Яндекса лучший инструмент по незначащим параметрам — Clean-param: он склеивает адреса и переносит показатели, тогда как Disallow только создаёт слепую зону.
- Запрет в robots не удаляет страницу из индекса и мешает роботу увидеть канонический тег и noindex, поэтому сначала указания на удаление, потом запрет обхода.
- Метки рекламных кампаний закрывают каноническим тегом и Clean-param, но никогда не редиректом и не запретом обхода — иначе развалится атрибуция и потеряется вес ссылок.
Увеличьте позиции и продажи вашего сайта
Профессиональное SEO-продвижение с гарантией результата. Выберите подходящую услугу:
Остались вопросы по продвижению?
Меня зовут Анатолий Кузнецов, я SEO-оптимизатор с 20-летним стажем. Разберу ваш сайт, отвечу на вопросы и подскажу, что улучшить для роста позиций в Яндексе и Google.
Связаться со мной →
Комментарии
Сергей Виноградов
Проверил трюк с ?test=12345 на своём магазине. Отдаёт 200 и никакого канонического адреса. Пошёл к программисту, спасибо за подсказку, я про такое даже не думал.
Марина Полякова
У нас в вебмастере 34 тысячи страниц в поиске при реальных 900 товарах. Всегда думала, что это хорошо, много страниц в индексе. Теперь понятно, откуда взялись эти тысячи и почему новые карточки заходят по три недели.
Дмитрий Ковалёв
А если сайт на самописном движке и фильтр собирает параметры в порядке кликов, это критично? Или Clean-param всё равно разберётся с любым порядком?
Анатолий Кузнецов автор
Clean-param разберётся, он смотрит на имена параметров, а не на их порядок в строке. Но до того момента, как директива будет учтена, робот успеет обойти все перестановки, а Google её вообще не понимает. Поэтому фиксированный порядок в движке всё равно стоит сделать: это разово, недорого и убирает целый класс адресов навсегда. Плюс аккуратный порядок сильно упрощает вам же анализ логов.
Анна Ефремова
Про редирект с utm на чистый адрес — прямо про нас. Сделали год назад, потом полгода не могли понять, почему в Метрике весь контекст сидит в прямых заходах. Отдел маркетинга ругался, подрядчик по рекламе ругался, виноват был редирект.
Игорь Селезнёв
Скажите, а если страницы фильтров уже проиндексированы и часть из них даже приносит трафик, но их несколько тысяч. Резать всё под ноль или как-то выбирать?
Анатолий Кузнецов автор
Резать под ноль точно нельзя, вы потеряете живой трафик. Выгрузите из Метрики все страницы входа из поиска за последний год и наложите на список адресов фильтров. Те, что дали хотя бы несколько визитов, отмечайте кандидатами на посадочные и переводите на человекопонятные адреса. Остальные закрывайте каноническим тегом на раздел. Такая сортировка на трёх тысячах адресов занимает пару часов и окупается сразу.
Ольга Черкасова
Отдельное спасибо за команду для логов. Прогнала за две недели, восемьдесят один процент обращений робота ушёл на сортировку и вид отображения. При этом сам каталог обходился раз в месяц. Всё встало на свои места.
Павел Ремизов
Читал, что канонический тег на пагинации нужно ставить на первую страницу, теперь вижу обратное. Кому верить и не поменяется ли рекомендация ещё раз через год?
Анатолий Кузнецов автор
Совет про первую страницу родом из времён, когда Google учитывал rel next и prev, потом эти теги отменили, а рекомендация осталась гулять по статьям. Ориентируйтесь на задачу: вам нужно, чтобы робот дошёл до товаров на пятой странице. Канонический тег на саму себя эту задачу решает, тег на первую страницу мешает. Если каталог небольшой и все товары есть в карте сайта, разница будет незаметна, но безопаснее первый вариант.
Наталья Бирюкова
Внутренний поиск у нас через GET, и в индексе висят запросы пользователей, включая совсем нецензурные. Закрыли noindex по вашей схеме, через месяц отпишусь о результате.
Артём Гладышев
Вопрос по Clean-param. У нас каталог и блог, параметр sort используется в обоих. Можно ли одной строкой закрыть его везде или лучше прописывать путь для каждого раздела отдельно?
Анатолий Кузнецов автор
Если параметр незначащий в обоих разделах, пишите одной строкой без указания пути, так надёжнее и короче. Путь имеет смысл указывать в обратной ситуации: когда в одном разделе параметр мусорный, а в другом реально меняет содержимое и его надо оставить. Ещё путь полезен, чтобы уложиться в ограничение длины директивы на очень больших списках. Начните с простого варианта, усложняйте только при необходимости.
Виктор Лапшин
Порядок действий из таблицы забрал в работу целиком. Особенно пункт про замер до внедрения, обычно все сразу лезут править robots, а потом нечем доказать, что стало лучше.
Елена Сорокина
Подскажите, сколько примерно ждать после добавления Clean-param, прежде чем бить тревогу? Прописали неделю назад, в вебмастере пока без изменений.
Анатолий Кузнецов автор
Неделя — это рано. Сначала робот должен заново скачать robots.txt, потом обойти адреса с параметрами и склеить их с основными. На среднем сайте первые изменения в отчёте появляются через две-три недели, полная картина складывается примерно за полтора месяца. Если через месяц вообще ничего не сдвинулось, проверьте файл через анализ robots.txt в вебмастере: чаще всего директива стоит не в той секции User-agent или в ней опечатка в имени параметра.
Роман Тихомиров
Добавлю от себя: перед массовыми правками обязательно проверьте карту сайта. У нас канонические теги стояли правильно, а в sitemap лежали адреса с параметрами, и робот честно ходил именно по ним. Полгода искали причину.