За двадцать лет в SEO я привык, что владелец сайта приходит с одним и тем же ощущением: «контент уникальный, тексты писал копирайтер, плагиат проверял — откуда дубли?». А дубли есть. Просто они не в тексте. Они в адресной строке.
Самая коварная категория дублей — та, которую невозможно заметить, листая сайт глазами. Вы открываете каталог, видите красивую страницу с товарами и не подозреваете, что для робота Яндекса этот же каталог существует в трёхстах вариантах: с сортировкой по цене, с открытым фильтром «белый цвет», со второй страницей пагинации, с меткой из рассылки и с обрывком сессии в хвосте URL. Все триста — почти одинаковые. И все триста претендуют на индексацию.
Давайте разберу по полочкам, откуда берётся этот мусор, чем он реально вредит и как закрывать его так, чтобы не отстрелить себе заодно и целевой трафик. Расскажу так, как объясняю клиентам на созвоне — без академизма, с конкретикой.
Почему технические дубли опаснее, чем кажется
Когда я говорю «дубль», большинство представляет две одинаковые статьи. На деле для поисковика дубль — это любые два URL с почти идентичным содержимым. И вот здесь начинается интересное.
Во-первых, страдает краулинговый бюджет. У робота на ваш сайт выделен лимит обходов. Если он тратит его на тысячу вариаций одной категории с фильтрами, до новых товаров и свежих статей он просто не доходит вовремя. Я не раз видел, как у интернет-магазина новые карточки висели вне индекса по две-три недели — а робот в это время прилежно переобходил ?sort=price_asc в сотый раз.
Во-вторых, размывается релевантность. Ссылочный вес и поведенческие сигналы, которые должны были сконцентрироваться на одной сильной странице, растекаются по десяткам её клонов. В итоге ни один из URL не набирает достаточно, чтобы выйти в ТОП.
В-третьих — и это самое неприятное — Яндекс сам выбирает, какую из версий считать главной. И выбирает он не всегда ту, что нужна вам. Я разбирал случай, когда в выдаче по коммерческому запросу торчала страница пагинации /catalog/page/7/ вместо первой страницы категории. Пользователь попадал на седьмую страницу товаров, не понимал, куда он пришёл, и уходил. Конверсия по этому запросу была околонулевой просто потому, что в индекс попал не тот URL.
За все годы работы у меня ноль фильтров Яндекса на проектах, и во многом потому, что я разгребаю эту техническую грязь до того, как она накопится. Дубли — это не «когда-нибудь потом». Это фундамент.
Пагинация: где она ломается чаще всего
Пагинация — это разбивка длинного списка на страницы: /catalog/, /catalog/?page=2, /catalog/page/3/ и так далее. Сама по себе она нужна и нормальна. Проблема в том, как её обрабатывают движки по умолчанию.
Классическая ошибка — когда все страницы пагинации полностью самостоятельны, открыты для индексации, и при этом у каждой одинаковые title, description и текст категории вверху. Для Яндекса это набор близнецов. Он начинает их склеивать на своё усмотрение, и тут как повезёт.
Был популярный в нулевых трюк с атрибутами rel="next" и rel="prev". Скажу прямо: забудьте про него как про основной инструмент. Google официально объявил, что давно не использует эти атрибуты для склейки, а Яндекс на них всерьёз и не опирался. Держать их можно, вреда нет, но решать проблему они не будут.
Что работает на практике. Я обычно иду одним из двух путей в зависимости от движка и задачи.
Первый путь — оставить страницы пагинации в индексе, но сделать их по-настоящему разными. На каждой странице — свой уникальный title с номером («Купить двери в СПб — страница 2»), self-canonical (каждая ссылается сама на себя), а вводный SEO-текст категории показывать только на первой странице. Тогда вторая, третья и далее не конкурируют с первой за один и тот же запрос. Этот вариант хорош, когда товаров реально много и страницы пагинации сами по себе могут ловить низкочастотный трафик.
Второй путь — указать на всех страницах пагинации канонический адрес первой страницы категории. Здесь важная оговорка: Яндекс относится к rel="canonical" как к рекомендации, а не приказу. Если содержимое второй страницы сильно отличается от первой, он канонический указатель проигнорирует. Поэтому канонизировать на первую страницу имеет смысл только тогда, когда контент категории действительно повторяется, а не когда на каждой странице принципиально разные товары.
Чего делать категорически не стоит — закрывать пагинацию в robots.txt. Я постоянно встречаю это «решение» и каждый раз вздыхаю. Закрыв страницы пагинации от обхода, вы обрубаете роботу путь к товарам, которые на этих страницах лежат. Он до них просто не дойдёт по внутренним ссылкам. Лечите симптом — получаете болезнь похуже.
Фильтры и фасетная навигация: фабрика бесконечных URL
Вот где настоящая мина. Фасетная навигация — это фильтры в каталоге: цвет, размер, бренд, цена, материал. Каждый чекбокс добавляет в URL параметр. А теперь арифметика: пять фильтров по пять значений в любых комбинациях дают тысячи уникальных адресов. На реальном магазине я видел, как из двухсот товаров вырастало под полтора миллиона проиндексированных URL. Робот захлёбывался.
Стратегия здесь не «закрыть всё», а «разделить на ценное и мусорное».
Ценные комбинации фильтров — это те, под которые есть живой спрос. «Межкомнатные двери белые» люди ищут в Яндексе тысячами. Значит, под такую комбинацию я делаю отдельную статичную посадочную страницу с человекопонятным адресом, своим title, своим текстом и оптимизацией под этот запрос. Она работает как полноценная категория и приносит трафик. Это, по сути, и есть грамотная техническая доработка сайта, когда фильтры из проблемы превращаются в источник низкочастотных лидов.
Мусорные комбинации — это всё остальное: «красные двери размером 80 отсортированные по убыванию цены с открытым фильтром производителя». Спроса ноль, ценности ноль, а URL плодятся. Их я закрываю от индексации. Инструментов несколько, и работают они в связке.
Главный инструмент именно для Яндекса — директива Clean-param в robots.txt. Это его фирменная фишка, которой нет смысла пренебрегать. Она прямо говорит роботу: вот эти GET-параметры на адрес контента не влияют, склей все версии в одну. Запись вида Clean-param: sort&filter /catalog/ уберёт из индекса вариации с сортировкой и фильтрами по всему каталогу, передав их сигналы базовому адресу. Для русскоязычного бизнеса, который живёт за счёт Яндекса, Clean-param — это первое, что я настраиваю.
Параллельно с мусорных фильтров я ставлю rel="canonical" на базовую категорию и, где уместно, мета-тег robots со значением noindex, follow — чтобы страница не индексировалась, но робот по ссылкам с неё всё равно ходил и не терял товары.
И ещё одна вещь, о которой забывают: не вешайте на внутренние ссылки сайта параметры фильтров без нужды. Если ваша же навигация ведёт на отфильтрованные URL, вы сами кормите робота мусором.
UTM-метки: безобидные хвосты, которые ломают индекс
UTM-метки — это ?utm_source=, ?utm_medium=, ?utm_campaign= и компания. Маркетолог цепляет их к ссылкам в рассылке, в постах, в рекламе, чтобы видеть, откуда пришёл трафик. Дело нужное. Проблема в том, что для поисковика site.ru/page/ и site.ru/page/?utm_source=newsletter — это два разных адреса с одинаковым содержимым. Дубль на ровном месте.
Беда в том, что эти метки расползаются по интернету. Кто-то скопировал ссылку из рассылки с меткой и поставил её у себя на сайте. Кто-то пошарил в соцсетях. И вот уже в индексе болтаются версии страниц с хвостами от кампаний трёхлетней давности.
Лечится это тем же Clean-param — для UTM он подходит идеально. Одна строка Clean-param: utm_source&utm_medium&utm_campaign&utm_term&utm_content в robots.txt — и Яндекс перестаёт считать помеченные ссылки отдельными страницами, склеивая их сигналы с чистым адресом. Дополнительно страховкой работает rel="canonical" без параметров: каждая страница в коде указывает свой канонический адрес без хвостов. И базовое правило гигиены — внутри сайта на свои же страницы метки не вешать никогда. UTM нужны для внешних источников, а не для внутренней перелинковки.
Сессионные параметры: привет из прошлого, который всё ещё кусается
Думаете, сессии в URL — это древность? На старых самописных движках и некоторых версиях популярных CMS я до сих пор это встречаю. Сервер дописывает к адресу идентификатор сессии: ?PHPSESSID=abc123, ?sid=, ?sessionid=. У каждого посетителя — свой. У каждого захода робота — потенциально новый.
Эффект разрушительный: одна страница порождает столько дублей, сколько было визитов с идентификатором в адресе. Я разбирал сайт, где из-за сессий в индексе оказалось в десятки раз больше URL, чем реальных страниц на сайте. Робот месяцами ходил по фантомам.
Правильное решение — техническое: сессии должны храниться в cookie, а не в URL. Это вопрос настройки сервера и движка, и это та работа, которую я закрываю в рамках доработки сайта. Пока программная правка не сделана, временно гасим симптом всё той же директивой — Clean-param: PHPSESSID&sid&sessionid — и каноническими указателями на чистые адреса. Но повторю: с сессиями временный костыль — это именно костыль. Корень проблемы убирается только на уровне кода.
Как найти эти дубли своими руками
Прежде чем что-то закрывать, надо увидеть масштаб. Без диагностики вы будете лечить вслепую. Вот мой порядок действий.
Начинаю всегда с Яндекс.Вебмастера. Раздел «Индексирование» → «Страницы в поиске» и особенно «Исключённые страницы» — там Яндекс честно показывает, что он счёл дублем и по какой причине. Статусы вроде «Дубль» и «Малоценная или маловостребованная страница» — это прямые улики. Параллельно смотрю «Статистику обхода»: если робот тратит большую часть визитов на URL с параметрами, диагноз очевиден.
Дальше — оператор site в самом поиске. Запрос site:вашсайт.ру с уточнением по параметру быстро показывает, сколько мусорных URL уже в индексе.
Затем прогоняю сайт краулером — Netpeak Spider, Screaming Frog или любым привычным. Сортирую найденные адреса по наличию параметров, по совпадающим title и по дублирующимся description. Совпадающие title — самый быстрый маркер: если у вас сорок страниц с заголовком «Каталог», это сорок кандидатов в дубли.
И обязательно — анализ логов сервера, когда есть доступ. Логи показывают не то, что вы думаете о сайте, а то, что реально делает робот: по каким URL он ходит и как часто. Иногда картина в логах отрезвляет сильнее любого отчёта.
Когда полная карта дублей собрана, дальше уже дело техники — Clean-param, canonical, noindex, посадочные под ценные фильтры, перенос сессий в cookie. Именно с такого разбора начинается любой мой технический SEO-аудит: сначала находим, где утекает краулинговый бюджет и релевантность, а потом затыкаем дыры по приоритету.
Частые ошибки, на которых горят даже опытные
Подытожу грабли, на которые наступают чаще всего. Закрывают всё подряд в robots.txt — и теряют доступ робота к товарам. Ставят canonical и тут же закрывают ту же страницу в robots — робот не видит canonical, потому что ему запрещён обход, и указание не срабатывает. Канонизируют пагинацию на первую страницу при том, что товары на страницах разные — Яндекс игнорирует. Настраивают Clean-param с ошибкой в синтаксисе и удивляются, почему ничего не склеилось. И самое частое — вообще не трогают дубли годами, списывая просадку трафика на «алгоритмы Яндекса», хотя дело в собственной технической запущенности.
Дубли — это не та проблема, которую решают один раз и забывают. На живом интернет-магазине новые фильтры, новые метки и новые комбинации появляются постоянно. Чистоту индекса нужно поддерживать, как порядок в мастерской.
Если из-за технических дублей вы недополучаете целевой трафик
Давайте честно. Можно прочитать эту статью, кивнуть и закрыть вкладку. А можно посмотреть, что у вас реально творится в индексе, — и почти наверняка обнаружить там сотни URL, которые воруют ваш краулинговый бюджет и роняют позиции по коммерческим запросам.
Я Анатолий Кузнецов, частный SEO-специалист в профессии с 2005 года. Беру один проект на нишу, работаю напрямую, без менеджеров и посредников, и за двадцать лет не словил ни одного фильтра Яндекса именно потому, что начинаю с фундамента — с технической чистоты сайта.
Что я предлагаю конкретно по вашей ситуации:
Начните с бесплатного — закажите бесплатный экспресс-аудит сайта. Я за 24 часа покажу, сколько дублей у вас уже в индексе, где утекает краулинговый бюджет и какие страницы тянут позиции вниз. Без воды и общих фраз — только конкретные точки роста.
Дальше, если решим работать, — комплексное SEO-продвижение в ТОП Яндекса: техническая зачистка дублей через Clean-param и canonical, проработка фасетной навигации с выводом ценных фильтров в посадочные страницы, сбор семантики, контент и наращивание трафика. У моих клиентов рост заявок обычно в 3–4 раза за первые полгода, и держится он за счёт того, что фундамент сделан правильно.
И отдельно — GEO-продвижение, оптимизация под нейросетевой поиск. Алиса, YandexGPT, GigaChat, ChatGPT и Perplexity всё чаще отвечают пользователю напрямую, и попасть в их ответы — это новый канал, который большинство ваших конкурентов пока даже не трогают. Кстати, чистый от дублей сайт нейросети «читают» гораздо охотнее: им проще извлечь смысл со страницы без мусорных клонов. Так что техническая гигиена работает сразу на оба фронта — и на классический поиск, и на AI-выдачу. Хотите быть в ответах нейросетей раньше конкурентов — напишите мне, обсудим вашу нишу.
Сайт должен приносить заявки, а не копить технический мусор. Если устали смотреть, как трафик уходит к конкурентам, — давайте разберёмся, что чинить в первую очередь.
#SEO #дубли_страниц #техническийSEO #ЯндексВебмастер #CleanParam #пагинация #фасетнаяНавигация #UTM #краулинговыйБюджет #продвижениеСайтов #GEO #AISEO