Как найти и убрать дубли страниц в WordPress через canonical и noindex

Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелких настроек: архивы тегов, страницы пагинации, параметры в URL, версии с www и без, HTTP/HTTPS, а иногда еще и дубли из-за фильтров плагинов. Если это не привести в порядок, поисковик начинает индексировать несколько адресов с одинаковым или почти одинаковым содержимым.

Ниже — рабочий сценарий: сначала находим источник дублей, потом выбираем, что должно быть основным URL, а что нужно закрыть от индексации или склеить через rel="canonical".

Где в WordPress чаще всего появляются дубли

Перед правками важно понять, какой именно тип дубля у вас есть. Для WordPress это обычно один из следующих случаев:

  • одна и та же запись открывается по нескольким адресам из-за параметров в URL;
  • страницы архивов тегов и рубрик повторяют фрагменты контента;
  • пагинация архивов индексируется как отдельные страницы без нужды;
  • страницы автора дублируют контент сайта на небольшом проекте с одним автором;
  • версии сайта с www и без www доступны одновременно;
  • HTTP и HTTPS отдают одинаковые страницы;
  • поисковик видит страницы вложений изображений как отдельные URL.

Что смотреть в первую очередь

Начните с поиска в индексе и в логах обхода. Если у вас есть доступ к Google Search Console, откройте отчет по страницам и посмотрите, какие URL отмечены как дублированные или выбранные не как канонические. Если GSC нет, проверьте сайт вручную: откройте одну и ту же запись с разными вариантами URL и сравните заголовок страницы, canonical и статус ответа.

Полезно проверить и серверный ответ. Дубли часто маскируются под редиректы, но на деле отдают 200 OK. Это особенно заметно, если сайт работает на нескольких шаблонах или есть кастомные правила в .htaccess или конфигурации nginx.

Диагностика проблемы без догадок

Самая частая ошибка — сразу ставить noindex на все подряд. Так можно случайно закрыть полезные страницы и ухудшить внутреннюю перелинковку. Сначала зафиксируйте, какие URL реально дублируют друг друга.

Проверка canonical и статуса ответа

Откройте страницу в браузере и посмотрите исходный код. В <head> должен быть один canonical, указывающий на основной адрес. Если canonical отсутствует, дубли будут разбираться поисковиком дольше. Если canonical указывает на не ту страницу, это уже ошибка шаблона или SEO-плагина.

<link rel="canonical" href="https://example.com/sample-post/" />

Параллельно проверьте, не открываются ли альтернативные адреса без редиректа. Например:

  • http://example.com/sample-post/
  • https://example.com/sample-post
  • https://www.example.com/sample-post/
  • https://example.com/sample-post/?utm_source=test

Если все они отдают 200 OK и показывают одинаковый контент, это уже кандидат на склейку.

Когда нужен noindex, а когда canonical

canonical нужен, когда у страницы есть допустимые альтернативные адреса, но основным должен быть один. noindex нужен, когда страница сама по себе не должна попадать в поиск: служебные архивы, некоторые страницы пагинации, результаты внутреннего поиска, страницы с параметрами фильтрации.

ПодходКогда использоватьОграничение
canonicalОдинаковый контент по нескольким URLНе убирает страницу из обхода полностью
noindexСтраница не должна индексироватьсяНужно следить, чтобы не закрыть важный контент
301 redirectНенужный URL должен вести на основнойПодходит не для всех сценариев фильтров и архивов

Пошаговое решение для типовых дублей

1. Приведите сайт к одному базовому адресу

Сначала выберите один вариант домена: с www или без него, а также один протокол — только HTTPS. Это делается не в SEO-плагине, а на уровне сервера и настроек WordPress.

В Настройки → Общие проверьте адрес WordPress и адрес сайта. Они должны совпадать с канонической версией. После этого настройте редирект на сервере, чтобы все альтернативные варианты уходили на основной URL.

# Пример для Apache: редирект на HTTPS и без www
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]

Если у вас nginx, правило будет другим, но логика та же: один основной хост и один протокол.

2. Закройте служебные архивы и лишние страницы

Для небольших сайтов часто достаточно закрыть от индексации архивы автора, если автор один, а также страницы внутреннего поиска и некоторые технические архивы. Это можно сделать через SEO-плагин или кодом, если нужен точечный контроль.

add_filter( 'wp_robots', function( $robots ) {
    if ( is_search() || is_author() ) {
        $robots['noindex'] = true;
        $robots['follow']  = true;
    }
    return $robots;
} );

Этот пример добавляет noindex, follow для поиска и архивов автора. Но применять его стоит только если вы понимаете структуру сайта. На новостном или многопользовательском проекте архив автора может быть полезным.

3. Настройте canonical для записей и страниц

Если canonical ломается из-за темы или кастомного шаблона, сначала проверьте, не выводится ли второй тег вручную. Два canonical на странице — частая причина путаницы. WordPress и SEO-плагин должны отдавать только один корректный вариант.

Если нужно принудительно задать canonical для конкретного шаблона, делайте это аккуратно и только в том месте, где вы уверены в логике URL.

add_action( 'wp_head', function() {
    if ( is_singular( 'post' ) ) {
        $url = get_permalink();
        echo '<link rel="canonical" href="' . esc_url( $url ) . '" />' . "\n";
    }
}, 1 );

Важно: если у вас уже работает SEO-плагин, не дублируйте его вывод. Иначе вы получите два canonical, а это хуже, чем один неправильный.

4. Уберите дубли от вложений изображений

Страницы вложений часто не несут ценности для поиска. Если тема или плагин не перенаправляют их на файл или родительскую запись, лучше сделать редирект на родительский пост или сам файл изображения.

Для большинства сайтов безопаснее отправлять вложение на родительскую запись, если она есть:

add_action( 'template_redirect', function() {
    if ( is_attachment() ) {
        $parent = wp_get_post_parent_id( get_queried_object_id() );
        if ( $parent ) {
            wp_redirect( get_permalink( $parent ), 301 );
            exit;
        }
    }
} );

Проверка результата после внедрения

После правок не ограничивайтесь визуальной проверкой. Нужно убедиться, что поисковик и браузер видят именно то, что вы задумали.

  • откройте основной URL и альтернативные варианты, проверьте 301-редирект;
  • посмотрите исходный код и убедитесь, что canonical один;
  • проверьте, что закрытые страницы отдают нужный robots-мета-тег;
  • в Search Console отправьте на переобход несколько проблемных URL;
  • через 1–2 обхода проверьте, уменьшилось ли число дублей в отчетах.

Если используете командную строку, можно быстро проверить заголовки ответа:

curl -I https://example.com/sample-post/
curl -I https://www.example.com/sample-post/
curl -I http://example.com/sample-post/

В идеале основной адрес должен отдавать 200 OK, а все альтернативные — 301 Moved Permanently на канонический URL.

Частые ошибки и как их исправить

Ставят noindex на все архивы подряд

Это грубая ошибка. Архивы рубрик могут быть полезны, если они собраны вручную и дают дополнительную навигацию. Закрывать нужно только те архивы, которые реально создают мусор в индексе.

Оставляют доступными HTTP и HTTPS одновременно

Даже если сайт визуально открывается нормально, поисковик может считать версии разными страницами. Решение — жесткий 301-редирект на один протокол и один хост.

Дублируют canonical через тему и SEO-плагин

Иногда разработчик добавляет canonical вручную, а плагин уже выводит свой. В результате в коде два тега canonical. Оставьте только один источник правды.

Закрывают важные страницы пагинации

Если у вас длинные рубрики или каталоги материалов, пагинация может быть полезной для обхода и внутренней перелинковки. Не ставьте noindex на все страницы пагинации без анализа.

Что делать с производительностью и безопасностью

Чистка дублей обычно улучшает не только индексацию, но и нагрузку на сайт. Меньше лишних URL — меньше обхода, меньше мусора в логах и кэше. Но любые правки в functions.php или в плагине лучше вносить через дочернюю тему или отдельный мини-плагин, чтобы не потерять изменения после обновления темы.

Если вы используете SEO-плагин, проверьте, не создает ли он конфликт с кастомными правилами. Для технической чистки сайта и удаления дублей иногда удобнее использовать инструменты вроде Clearfy Pro, если вам нужен набор точечных настроек без ручного редактирования кода. Но даже в этом случае базовую логику canonical и редиректов лучше понимать и проверять вручную.

Перед массовыми изменениями сделайте резервную копию базы и файлов. Это не формальность: ошибка в редиректе или robots-мета-тегах может быстро вывести из индекса нужные страницы.

Короткий чек-лист перед публикацией правок

  • выбран один основной домен и протокол;
  • альтернативные URL отдают 301;
  • на странице один canonical;
  • служебные архивы закрыты точечно, а не массово;
  • вложенные изображения не создают отдельные индексируемые страницы;
  • проверка через curl -I и исходный код подтверждает изменения;
  • в Search Console отправлены проблемные URL на переобход.

Если после правок дубли продолжают появляться, проблема обычно не в canonical, а в генерации URL на уровне темы, плагина фильтров или серверных редиректов. В таком случае нужно идти от конкретного адреса к конкретному источнику, а не пытаться закрыть весь сайт одним правилом.

WooCommerce AJAX-корзина не обновляется из-за кэширования: как найти причину и исправить
12.08.2026
Как удалить старые отзывы WooCommerce без плагинов
01.08.2026
Как создать свой плагин для WordPress с обратной связью
30.11.2025
WooCommerce: как установить ограничение на количество покупок товара
17.05.2026
Автоматическое удаление старых заказов в WooCommerce без плагинов
24.05.2026