Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелочей: страницы доступны и со слэшем, и без него; архивы тегов дублируют рубрики; одна и та же запись открывается через несколько URL с параметрами; пагинация, вложенные архивы и служебные страницы попадают в индекс. В итоге поисковик видит несколько адресов с одинаковым или почти одинаковым содержимым и сам выбирает, что считать основным. Это почти всегда хуже, чем явная настройка со стороны сайта.
Ниже — рабочий сценарий: как найти источник дублей, где поставить canonical, когда нужен 301-редирект, а когда лучше не трогать URL вообще.
Как понять, что у вас именно дубли, а не обычные страницы
Сначала проверьте симптоматику. Если в поиске всплывают разные адреса одной и той же страницы, а в отчётах Search Console растёт число «Дубли, Google выбрал другой канонический URL», проблема уже не теоретическая. Второй частый признак — в выдаче индексируются URL с параметрами вроде ?replytocom=, ?utm_, ?amp или служебные версии архивов.
Быстрая диагностика вручную
- Откройте одну и ту же страницу с
https://иhttp://, со слэшем и без слэша. - Проверьте, не доступны ли старые адреса после смены структуры постоянных ссылок.
- Посмотрите исходный код страницы и найдите тег
<link rel="canonical" ...>. - Проверьте архивы рубрик, тегов, авторов, дат и пагинацию.
- Если сайт на кэше или CDN, убедитесь, что редирект не ломается на уровне прокси.
Для точечной проверки удобно использовать curl. Он покажет цепочку редиректов и финальный код ответа:
curl -I -L https://example.com/sample-page/Если в цепочке есть несколько переходов, а в конце остаётся 200 OK на другом URL, это уже повод упростить схему.
Какие дубли WordPress встречаются чаще всего
Не все дубли одинаково вредны. Одни нужно склеивать редиректом, другие — только каноникалами, третьи лучше закрыть от индексации, но оставить доступными для пользователей.
| Сценарий | Что делать | Почему |
|---|---|---|
| Старый URL после смены структуры | 301-редирект | Есть явный новый адрес, старый больше не нужен |
| Параметры сортировки, UTM, replytocom | Canonical + при необходимости правила очистки | Страница та же, но URL отличается |
| Архивы тегов и рубрик с похожим контентом | Оставить только один индексируемый вариант | Иначе поисковик тратит бюджет на дубли |
| Пагинация архивов | Не склеивать в первую страницу бездумно | Страницы пагинации могут быть полезны сами по себе |
Если у вас уже стоит SEO-плагин, часть задач может быть закрыта в интерфейсе. Но когда нужно убрать конкретный тип дублей точечно, код даёт больше контроля.
Пошаговое решение: canonical, редиректы и чистка параметров
Шаг 1. Настройте единый основной URL
Проверьте, что в Настройки → Общие адрес сайта указан в одной версии: с https и с нужным вариантом слэша. Это базовый уровень, без которого любые редиректы будут плодить лишние переходы.
Если сервер отдаёт и /page, и /page/, сначала исправьте это на уровне веб-сервера или WordPress-постоянных ссылок. Не пытайтесь лечить всё только плагином.
Шаг 2. Добавьте canonical для служебных параметров
Если на сайте есть параметры, которые не должны создавать отдельные страницы, можно принудительно указать канонический URL. Пример ниже убирает replytocom и сохраняет основной адрес записи.
add_filter('get_canonical_url', function ($canonical, $post) {
if (is_singular() && !empty($_GET['replytocom'])) {
return get_permalink($post);
}
return $canonical;
}, 10, 2);Этот вариант не ломает саму страницу, а лишь подсказывает поисковику, какой URL считать основным. Для UTM-меток обычно достаточно штатного canonical, если тема и плагины не вмешиваются в вывод.
Шаг 3. Склейте старые адреса через 301
Если вы меняли структуру URL, старые адреса нужно не закрывать, а перенаправлять. Иначе вы потеряете накопленные сигналы и получите 404 в индексе.
Ниже пример для template_redirect, когда нужно перенаправить старую рубрику на новую страницу. Логику подставляйте под свой кейс, не копируйте без проверки.
add_action('template_redirect', function () {
if (is_category('news-old')) {
wp_redirect(home_url('/news/'), 301);
exit;
}
});Для массовой миграции лучше использовать правила сервера или плагин редиректов, а не десятки условий в теме. Код выше годится для точечных случаев.
Шаг 4. Уберите из индекса мусорные архивы
Если у вас есть архивы, которые не несут самостоятельной ценности, их лучше не раздувать в индекс. Это касается пустых тегов, служебных авторских архивов на небольшом сайте и страниц поиска по сайту. Здесь важна не только метка noindex, но и логика: не создавайте лишние URL, если они не нужны пользователю.
Для некоторых сайтов удобнее использовать SEO-плагин и отключить индексацию в настройках. Если нужен более жёсткий контроль, можно дополнительно закрыть архивы через фильтры темы, но это уже зависит от структуры проекта.
Как проверить, что решение сработало
После внедрения не ограничивайтесь открытием страницы в браузере. Проверьте несколько уровней сразу:
- старый URL отдаёт 301, а не 200;
- финальная страница открывается без цепочки лишних редиректов;
- в исходном коде у страницы один корректный
canonical; - в Search Console старые URL постепенно уходят из отчётов как дубли или исключённые;
- в логах сервера нет циклических перенаправлений.
Минимальная проверка через консоль:
curl -I https://example.com/old-url/
curl -I -L https://example.com/old-url/В первом случае вы должны увидеть 301, во втором — финальный 200 на новом адресе. Если вместо этого цепочка идёт через несколько промежуточных URL, редирект лучше упростить.
Частые ошибки и как их исправить
Ставят canonical и забывают про 301
Canonical не заменяет редирект, если старый адрес больше не должен существовать. Поисковик может учесть подсказку, но пользователи и боты всё равно будут ходить по старому URL. Для миграций нужен именно 301.
Закрывают дубли robots.txt
Это частая ошибка. Если URL уже попал в индекс, запрет в robots.txt не удалит его быстро и не передаст сигнал на основной адрес. Для дублей нужен canonical, noindex или редирект — в зависимости от сценария.
Делают редирект на главную
Такой подход выглядит как «быстро убрать проблему», но для SEO это плохая замена. Если у старой страницы есть релевантная новая версия, редирект должен вести именно туда, а не на главную.
Не проверяют параметры в URL
Иногда дубли создаёт не тема, а аналитика, комментарии или сторонний плагин. Если на сайте есть ссылки с параметрами, проверьте, не индексируются ли они отдельными страницами. Особенно это заметно на больших блогах и новостных проектах.
Что делать для безопасности и производительности
Чем меньше лишней логики в шаблоне, тем проще сопровождать сайт. Если вы добавляете редиректы кодом, держите их в дочерней теме или в небольшом mu-plugin, а не в файле, который может потеряться при обновлении.
Если дублей много и они связаны с технической чисткой сайта, имеет смысл посмотреть в сторону инструментов, которые помогают убрать мусорные мета-данные, дубли и лишние элементы разметки. Например, у Clearfy Pro есть функции для технической оптимизации и чистки WordPress; это полезно, когда проблема не в одном URL, а в наборе мелких дублей и лишних сущностей. Ссылка для ориентира: Clearfy Pro.
Но даже с плагином не отключайте проверку руками. Любая автоматизация должна проходить через один и тот же контрольный сценарий: старый адрес, новый адрес, canonical, код ответа, индексация.
Мини-чек-лист перед публикацией изменений
- Проверен основной домен и версия со слэшем.
- Старые URL перенаправляются на релевантные новые страницы.
- У служебных параметров нет отдельного канонического адреса.
- Архивы, которые не нужны в поиске, не создают дублей.
- Проверка через
curlпоказывает один понятный путь без цепочек. - В Search Console нет новых всплесков дублей после обновления.
Если после всех правок дубли всё ещё появляются, обычно проблема уже не в одном шаблоне, а в комбинации темы, SEO-плагина и серверных правил. В таком случае проще идти от фактических URL в отчётах, а не пытаться «починить WordPress целиком» одним фильтром.