Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелочей: архивы тегов, страницы автора, пагинация, параметры сортировки, версии с ?replytocom, служебные URL плагинов. В итоге поисковик тратит краулинговый бюджет на мусор, а важные страницы получают меньше внимания.
Ниже разберём рабочую схему: как найти дубли, что закрывать через noindex, что лучше отдавать с canonical, а что вообще убирать из генерации. Без универсальных советов — только то, что можно проверить на реальном сайте.
Диагностика: какие дубли реально есть на сайте
Сначала не трогаем настройки вслепую. Нужно понять, какие типы страниц создают лишние URL. Самые частые источники:
- архивы тегов и рубрик, которые дублируют контент записей;
- страницы автора на одиночном сайте;
- пагинация архивов и комментариев;
- URL с параметрами сортировки, фильтров, поиска;
- страницы вложений медиафайлов;
- служебные страницы плагинов, которые не должны индексироваться.
Проверка начинается с поиска в поиске Google и в логике самого сайта. Полезно посмотреть, какие URL уже попали в индекс:
site:example.com intitle:tag
site:example.com inurl:author
site:example.com inurl:?replytocom
site:example.com inurl:/page/Если есть доступ к Search Console, откройте отчёт по страницам и посмотрите, какие URL помечены как дубли, альтернативные страницы с правильным каноническим URL или просканированные, но не проиндексированные. Это помогает не гадать, а видеть, что именно поисковик считает проблемой.
Что считать дублем, а что нет
Не каждый похожий URL нужно закрывать. Например, пагинация рубрики часто нужна для обхода и может оставаться открытой, если у неё нормальный canonical и она не плодит тонкие страницы. А вот страницы поиска по сайту, внутренние фильтры и вложения изображений почти всегда лишние в индексе.
Если сомневаетесь, ориентируйтесь на вопрос: несёт ли страница самостоятельную ценность для поиска? Если нет — её лучше убрать из индекса или из генерации.
Пошаговое решение: что закрывать и чем именно
Самая частая ошибка — ставить noindex на всё подряд через один плагин и не проверять, что он делает с canonical, картой сайта и внутренними ссылками. Рабочий подход обычно состоит из трёх слоёв: убрать лишнее из генерации, ограничить индексацию, настроить каноникал там, где есть похожие страницы.
1. Отключите ненужные архивы в SEO-плагине
Если на сайте нет смысла в архивах авторов, тегов или дат, проще отключить их в настройках SEO-плагина, чем потом закрывать каждый URL вручную. Например, в Clearfy Pro есть инструменты для чистки сайта и удаления дублей; это уместно, когда нужно убрать служебные элементы и сократить количество бесполезных страниц. Подход особенно полезен на контентных сайтах, где теги создавались автоматически и не поддерживаются редакцией. Clearfy Pro
Но если архивы тегов реально используются как навигация и имеют трафик, полностью отключать их не стоит. В этом случае лучше оставить страницу доступной, но аккуратно настроить мета-теги и canonical.
2. Закройте служебные страницы через robots meta
Для страниц поиска, авторов на одиночном сайте, вложений и некоторых архивов обычно достаточно noindex,follow. Это позволяет не индексировать саму страницу, но не ломает переходы по ссылкам.
Пример для темы или мини-плагина:
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_search() || is_attachment() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
if ( is_author() && ! is_multi_author() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );Этот способ предпочтительнее, чем вручную вставлять мета-тег в шаблон, потому что он опирается на штатный фильтр WordPress wp_robots.
3. Настройте canonical для похожих URL
Если у страницы есть несколько версий, но вы хотите оставить их доступными, canonical помогает указать основную. Это актуально для пагинации, параметров сортировки и некоторых фильтров.
Пример: у вас есть страница рубрики и её версия с параметром сортировки. Канонический URL должен вести на чистую версию без параметра:
<?php
add_filter( 'get_canonical_url', function( $canonical, $post ) {
if ( is_singular() && ! empty( $canonical ) ) {
return $canonical;
}
if ( is_archive() ) {
return remove_query_arg( array( 'orderby', 'filter', 'sort' ), home_url( add_query_arg( array(), $GLOBALS['wp']->request ) ) );
}
return $canonical;
}, 10, 2 );Здесь важно не переусердствовать: canonical должен указывать на реально существующую и релевантную страницу, а не на случайный URL. Иначе поисковик просто проигнорирует его.
4. Уберите вложения изображений из индекса
Страницы вложений часто индексируются отдельно, хотя по сути это пустые страницы с картинкой. Для большинства сайтов это лишний шум. В WordPress можно перенаправлять attachment page на сам файл или на родительскую запись, если она есть.
<?php
add_action( 'template_redirect', function() {
if ( is_attachment() ) {
$parent = wp_get_post_parent_id( get_the_ID() );
if ( $parent ) {
wp_safe_redirect( get_permalink( $parent ), 301 );
exit;
}
wp_safe_redirect( home_url( '/' ), 301 );
exit;
}
} );Если на сайте много медиа и старые вложения уже в индексе, после внедрения проверьте, что редирект не ломает прямые ссылки из внешних источников.
Когда лучше не закрывать, а исправить генерацию URL
Иногда проблема не в индексации, а в том, что WordPress или плагин создаёт лишние URL вообще без пользы. Тогда noindex — это костыль. Лучше убрать причину.
| Подход | Когда подходит | Минус |
|---|---|---|
| noindex | Страница нужна пользователю, но не поиску | URL остаётся в обходе |
| canonical | Есть похожие версии одной страницы | Не всегда учитывается, если страница слабая |
| Редирект 301 | Страница не нужна совсем | Нужно аккуратно проверить ссылки и историю |
| Отключение генерации | Служебные архивы и мусорные параметры | Требует понимания темы и плагинов |
Например, если у вас в URL постоянно появляется ?replytocom, это часто связано с комментариями и их настройками. В таком случае лучше отключить источник параметра, а не просто закрывать его от индексации.
Проверка результата после внедрения
После изменений не ограничивайтесь просмотром исходника. Нужно проверить три вещи: мета-роботы, canonical и фактический ответ сервера.
- Откройте страницу в браузере и посмотрите исходный код: есть ли
noindexтам, где вы его ожидали. - Проверьте canonical: он должен вести на нужный URL без лишних параметров.
- Убедитесь, что редиректы отрабатывают с кодом 301, а не 302.
- В Search Console отправьте на переобход несколько типовых URL и посмотрите, как меняется статус.
Быстрая проверка через curl:
curl -I https://example.com/sample-attachment/
curl -I https://example.com/category/news/?orderby=popularЕсли вы закрывали страницу через robots meta, в ответе заголовка этого не будет — тогда смотрите HTML. Если делали редирект, в заголовках должен быть 301 Moved Permanently и новый Location.
Частые ошибки и как их исправить
Закрыли рубрики, но оставили теги
Такое часто происходит, когда настройки делали по памяти. В итоге теги продолжают плодить дубли, а рубрики, которые реально помогают навигации, исчезают из поиска. Исправление простое: пересмотрите структуру таксономий и оставьте открытыми только те архивы, которые имеют смысл для пользователя и контента.
Поставили noindex, но не убрали страницу из sitemap
Если URL остаётся в карте сайта, поисковик получает противоречивые сигналы. Для страниц, которые вы закрываете от индексации, их лучше исключить и из XML sitemap. Иначе обход будет продолжаться дольше, чем нужно.
Сделали редирект на главную для всех дублей
Это плохая практика. Если у страницы есть логичный аналог, редирект должен вести на него, а не на главную. Иначе теряется релевантность, а пользователь получает не то, что искал.
Сломали пагинацию архивов
Иногда после жёсткой чистки архивы перестают листаться или canonical указывает только на первую страницу. Проверяйте, что страницы /page/2/, /page/3/ открываются корректно и не получают случайный редирект на первую страницу.
Практические советы по безопасности и производительности
Чем меньше лишних страниц генерирует сайт, тем проще его обходить и тем меньше нагрузка на сервер. Это особенно заметно на больших блогах и новостных проектах, где архивы и фильтры создают тысячи URL.
- не плодите теги автоматически без редакторской логики;
- не ставьте несколько SEO-плагинов одновременно — они часто конфликтуют в canonical и robots;
- проверяйте, не создаёт ли тема отдельные шаблоны для вложений, авторов и дат;
- если используете фильтры и сортировки, закрывайте от индексации только те комбинации, которые не несут ценности;
- после изменений смотрите логи обхода и отчёты Search Console, а не только визуальный результат.
Если нужен более системный подход к чистке дублей и технических хвостов, удобнее один раз настроить это в плагине, чем вручную поддерживать десятки исключений в теме. Но даже в этом случае полезно понимать, что именно выключено и почему — иначе через пару обновлений настройки легко потерять.
Рабочий критерий простой: если URL не нужен пользователю и не должен ранжироваться, он либо редиректится на правильную страницу, либо получает noindex, либо вообще перестаёт генерироваться. Всё остальное — временная мера, а не решение.