Логотип seo-prodvizhenie-biznesa.ru
+7 (921) 333-77-45

Страницы дубли с GET-параметрами

Как удалить страницы дубли с GET-параметрами
Анатолий Кузнецов
Анатолий Кузнецов
SEO-оптимизатор с 20-летним стажем. Автор блога seo-prodvizhenie-biznesa.ru о продвижении и доработке сайтов.

Магазин на 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 и Турбо».

Что такое деректива clean-param

Ищем дубли своими руками: парсер, выдача, логи, аналитика

Панели показывают только то, что робот уже нашёл и решил показать. Полную картину дают четыре дополнительных источника.

Обход парсером. 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

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 — и заморозили ситуацию навсегда.

Правильная последовательность, если страницы уже в индексе:

  1. Ставим мета-тег noindex или канонический адрес, robots не трогаем.
  2. Ждём, пока робот обойдёт страницы и они выпадут из индекса — от двух недель до пары месяцев.
  3. Убедившись по отчётам, что страницы ушли, при желании добавляем Disallow, чтобы сэкономить бюджет обхода.

Мета-тег для полноты:

<meta name="robots" content="noindex, follow">

Параметр follow важен: он оставляет ссылки на странице рабочими, чтобы вес не запирался. Для нетекстовых ответов тот же смысл передаётся заголовком X-Robots-Tag: noindex.

Метки рекламных кампаний: почему их нельзя запрещать бездумно

Первое, что хочется сделать, увидев в индексе адреса с utm-метками, — закрыть их одной строкой:

Disallow: /*utm_

Так делать не стоит по трём причинам. Во-первых, на адреса с метками ведут внешние ссылки — из рекламы, рассылок, партнёрских публикаций, статей на других сайтах. Запретив обход, вы обнуляете вес этих ссылок вместо того, чтобы передать его посадочной. Во-вторых, робот, наткнувшись на закрытый адрес, не увидит канонический тег и не сможет склеить его с чистой версией. В-третьих, у поисковых роботов рекламных систем и у краулеров, проверяющих объявления, могут возникнуть проблемы с доступом к посадочной страницей.

Правильная схема состоит из двух шагов и работает на обе поисковые системы:

  1. На всех страницах сайта стоит канонический адрес без параметров. Тогда версия с меткой сама указывает на чистую и склеивается с ней.
  2. В 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-редирект с адреса с меткой на чистый. Формально дубль исчезнет, но вместе с ним исчезнет и атрибуция — счётчик аналитики не успеет прочитать метку, и весь платный трафик уедет в «прямые заходы». Отчёты по рекламе перестанут сходиться, а причину будут искать месяцами.

Как использовать директиву Disallow

Фильтры каталога: что выводить в индекс, а что закрывать

Фильтры — единственный источник параметров, где ответ не «закрыть», а «разобраться». Часть комбинаций отвечает реальному спросу и способна приносить трафик, который головной раздел не соберёт никогда.

Критерий простой: комбинацию стоит открывать, если под неё есть частотный запрос, если по ней остаётся достаточно товаров (пустая или почти пустая страница только навредит) и если мы готовы дать ей собственные заголовок, 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-оптимизатор

Остались вопросы по продвижению?

Меня зовут Анатолий Кузнецов, я 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 лежали адреса с параметрами, и робот честно ходил именно по ним. Полгода искали причину.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

 Нажимая «оставить комментарий» вы принимаетеправила конфиденциальности 

Прокрутить вверх