Дубли в WordPress редко выглядят как одна очевидная ошибка. Чаще это набор похожих URL: страницы с параметрами, архивы тегов, пагинация, версии с www и без, HTTP и HTTPS, а иногда еще и служебные страницы темы или плагина. Если поисковик видит несколько адресов с одинаковым или почти одинаковым содержимым, он сам выбирает канонический URL не всегда так, как ожидает владелец сайта.
Ниже — рабочий сценарий: как найти источник дублей, что закрывать через canonical, что — через robots.txt, а что лучше просто убрать из генерации на уровне темы или плагина.
Как понять, что проблема именно в дублях
Сначала стоит проверить не «просел ли SEO вообще», а есть ли признаки разъезда URL. Для WordPress типичные симптомы такие:
- в поиске индексируются одинаковые страницы с разными параметрами в адресе;
- в отчете поисковой системы одна и та же страница отображается под несколькими URL;
- в логах или аналитике видны переходы на
?replytocom=,?amp,?utm_...или другие параметры; - архивы тегов, авторов и дат дают почти тот же контент, что и рубрики или записи;
- на сайте есть версии URL с завершающим слешем и без него, если где-то нарушена единая схема.
Что проверить вручную
Откройте несколько подозрительных адресов и сравните исходный HTML. Если в <head> у них одинаковый rel="canonical", но поисковик все равно индексирует лишние URL, значит проблема либо в настройках, либо в том, что дубли генерируются слишком массово. Если canonical отсутствует или указывает на неверный адрес, это уже задача для правки темы, плагина SEO или шаблона.
Полезно также проверить, не создают ли дубли:
- страницы пагинации архивов;
- поиск по сайту;
- страницы вложений медиафайлов;
- архивы авторов на небольшом блоге;
- страницы с параметрами сортировки и фильтрации;
- технические страницы плагинов, если они доступны публично.
Сначала диагностика: откуда берутся дубли
Не все дубли нужно закрывать одинаково. Сначала разделите их на три группы: полезные, нежелательные и технические.
| Тип URL | Что делать | Почему |
|---|---|---|
| Пагинация архивов | Обычно оставить, но проверить canonical | Это нормальная структура сайта |
| Страницы поиска | Чаще закрыть от индексации | Контент нестабилен и дублируется |
| Вложения медиа | Перенаправить на файл или parent post | Пустые или почти пустые страницы |
| URL с параметрами сортировки | Зависит от задачи: canonical или noindex | Фильтры часто плодят одинаковые страницы |
| Архивы автора/даты | Оставить только если они реально полезны | На небольших сайтах это частый источник дублей |
Если у вас стоит SEO-плагин, сначала посмотрите его настройки. Многие дубли появляются не из-за WordPress как такового, а из-за шаблонов мета-тегов, архивов и медиа-страниц, которые плагин оставил открытыми.
Пошаговое решение: canonical, noindex и robots.txt
Здесь важно не смешивать инструменты. canonical говорит поисковику, какая версия основная. noindex просит не индексировать страницу. robots.txt ограничивает обход, но не удаляет уже известный URL из индекса сам по себе. Для дублей это разные задачи.
Шаг 1. Проверьте canonical на страницах
Если дубли отличаются только параметрами или второстепенными элементами, canonical должен указывать на чистый основной URL. В WordPress это обычно делает SEO-плагин, но иногда шаблон темы или кастомный код ломает вывод.
Пример проверки через PHP в шаблоне или временно в плагине:
<?php
add_action( 'wp_head', function () {
if ( is_singular() ) {
echo '<!-- canonical should be handled by SEO plugin or theme -->';
}
}, 1 );Это не решение, а маркер: если в исходнике нет canonical или он дублируется, ищите конфликт между темой и SEO-плагином. Не стоит выводить второй canonical вручную, если его уже добавляет плагин.
Шаг 2. Закройте служебные страницы от индексации
Если нужно убрать из индекса поиск по сайту, архивы автора на маленьком проекте или страницы вложений, безопаснее использовать noindex. В WordPress это можно сделать через фильтр wp_robots.
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_search() || is_attachment() ) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
if ( is_author() && ! is_admin() ) {
$robots['noindex'] = true;
}
return $robots;
} );Такой подход лучше, чем массово править robots.txt, если страница уже известна поисковику. noindex работает именно на уровне индексации.
Шаг 3. Ограничьте обход лишних URL в robots.txt
robots.txt полезен, когда сайт генерирует много мусорных адресов с параметрами или служебными путями. Но не закрывайте им важные страницы, если хотите удалить их из индекса: поисковик должен сначала увидеть noindex или canonical.
Пример аккуратного файла:
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /?s=
Disallow: /*?replytocom=
Disallow: /*?orderby=
Disallow: /*?filter=
Sitemap: https://example.com/sitemap_index.xmlЭтот вариант подходит не всем. Если у вас в параметрах есть полезная навигация, не закрывайте их вслепую. Сначала посмотрите, какие URL реально попадают в индекс и дают мусорные страницы.
Шаг 4. Уберите источник дублей в теме или плагине
Иногда проблема не в мета-тегах, а в самой генерации страниц. Например, тема может выводить отдельные страницы для вложений, а плагин — создавать публичные архивы для таксономии, которая не нужна в поиске. Тогда лучше отключить генерацию, чем лечить последствия.
Если нужно убрать архивы автора для сайта с одним автором, можно сделать это через фильтр author_rewrite_rules не стоит — это слишком грубо. Проще закрыть архивы от индексации и при необходимости настроить редирект на главную или на страницу «О сайте».
Когда лучше использовать плагин, а когда код
Если сайт ведется без разработчика, удобнее закрывать дубли через SEO-плагин. Если у вас кастомная тема, много служебных шаблонов или нестандартные типы записей, код дает больше контроля. Ниже — короткое сравнение.
| Подход | Плюсы | Минусы |
|---|---|---|
| SEO-плагин | Быстро, без правки темы, удобно для редактора | Не всегда решает нестандартные URL |
| Код в теме/плагине | Точный контроль над noindex, canonical и редиректами | Нужна проверка после обновлений |
robots.txt вручную | Просто ограничить обход мусорных параметров | Не удаляет URL из индекса сам по себе |
Если нужен более широкий технический контроль за дублями, мета-тегами и чисткой служебных страниц, на практике часто используют Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином полезно понимать, что именно он меняет в коде.
Проверка результата после внедрения
После правок не ограничивайтесь открытием главной страницы. Проверьте несколько сценариев, которые раньше создавали дубли.
- Откройте страницу поиска и убедитесь, что в исходнике есть
noindex. - Проверьте архив автора, рубрику и запись с пагинацией.
- Сравните canonical у URL с параметрами и у чистого URL.
- Посмотрите, не остались ли доступными страницы вложений.
- Проверьте ответ сервера для старых дублей: иногда нужен 301-редирект, а не только noindex.
Для быстрой проверки можно использовать curl:
curl -I https://example.com/?s=test
curl -I https://example.com/sample-post/?replytocom=123В ответе смотрите на код статуса, заголовки Location при редиректе и отсутствие неожиданных цепочек перенаправлений. Если страница должна быть закрыта от индексации, проверьте еще и HTML-исходник, а не только заголовки.
Частые ошибки и как их исправить
Закрыли URL в robots.txt, но он остался в индексе
Это нормальная ситуация. Если поисковик уже знает адрес, одного Disallow недостаточно. Нужен noindex или 301-редирект на каноническую страницу.
Поставили два canonical одновременно
Такое часто случается, когда canonical выводит SEO-плагин, а тема — еще один раз вручную. Поисковик может проигнорировать оба. Оставьте только один источник.
Закрыли слишком много страниц
Ошибка типична для автоматических правил. Если вы поставили noindex на все архивы, можно случайно убрать полезные страницы из поиска. Сначала определите, какие архивы реально нужны пользователю и поиску.
Редиректите все параметры на главную
Это плохая практика. Если у страницы есть близкий канонический аналог, редирект должен вести на него, а не на главную. Иначе вы теряете релевантность и создаете путаницу для пользователя.
Практические советы по безопасности и производительности
Чем меньше лишних URL генерирует сайт, тем проще его поддерживать. Но не стоит превращать борьбу с дублями в набор жестких запретов.
- Не редактируйте
robots.txtбез списка конкретных URL, которые реально создают мусор. - Не закрывайте служебные страницы, если они нужны для входа, оплаты или личного кабинета.
- После обновления темы проверьте, не вернулся ли старый шаблон canonical.
- Если используете кастомные фильтры и параметры, тестируйте их на staging-копии сайта.
- Не полагайтесь только на визуальную проверку: смотрите HTML, заголовки и ответы сервера.
Если дубли появляются из-за старой темы или набора разрозненных настроек, иногда быстрее привести техническую часть к единому стандарту, чем точечно латать каждый URL. Но даже в этом случае полезно оставить список исключений: что индексируется, что закрыто, что редиректится и почему.