Как найти и убрать дубли страниц в WordPress без плагинов

Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелочей: одинаковые записи доступны по разным URL, архивы индексируются вместе с основными страницами, а параметры в адресе создают новые версии контента. В итоге поисковик видит несколько почти одинаковых страниц и сам выбирает, какую считать основной. Это часто бьёт по индексации, распределению ссылочного веса и скорости переобхода сайта.

Ниже — рабочий сценарий: как найти дубли, что именно править в WordPress и как проверить, что проблема действительно ушла. Без выдуманных хуков и без лишней магии.

Как понять, что на сайте есть дубли

Сначала не трогайте код. Сначала проверьте симптомы. Если в Search Console одна и та же страница появляется с разными вариантами URL, если в индексе есть и адрес с /page/2/, и основной архив, если в выдаче всплывают версии с параметрами вроде ?replytocom= или ?utm_, это уже повод разбирать структуру адресов.

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

  • отчёт по страницам в Google Search Console;
  • результаты поиска по site:example.com и похожим URL;
  • исходный код страниц на наличие rel="canonical";
  • доступность архивов тегов, авторов, дат и вложений;
  • редиректы между версиями с www и без www, с http и https.

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

Какие дубли WordPress создаёт чаще всего

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

Источник дубляЧто обычно происходитЧто делать
Архивы тегов и рубрикОдинаковые списки записей доступны через несколько таксономийОставить в индексе только нужные архивы, остальные закрыть от индексации или удалить
Страницы вложенийМедиафайл имеет отдельную страницу без полезного контентаРедиректить attachment URL на сам файл или родительскую запись
Параметры URLОдна и та же страница доступна с параметрами сортировки, трекинга, комментариевНормализовать URL и задавать канонический адрес
Пагинация архивовСтраницы /page/2/, /page/3/ индексируются как отдельные сущностиОставить их доступными, но следить за canonical и качеством пагинации

Пошаговое решение: как убрать дубли без плагинов

1. Нормализуйте основной адрес сайта

Сначала убедитесь, что сайт открывается только в одном варианте: с https, с одним доменом и одним форматом слэша. Это базовая точка, без неё остальные меры будут частично работать.

Проверьте настройки в Настройки → Общие: WordPress Address (URL) и Site Address (URL) должны совпадать с выбранным каноническим вариантом. Если сайт уже живёт на другом варианте, настройте 301-редирект на уровне сервера.

2. Закройте attachment-страницы редиректом

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

<?php
add_action('template_redirect', function () {
    if (!is_attachment()) {
        return;
    }

    $post = get_post();
    if (!$post) {
        return;
    }

    $parent_id = $post->post_parent;

    if ($parent_id) {
        wp_safe_redirect(get_permalink($parent_id), 301);
        exit;
    }

    $file_url = wp_get_attachment_url($post->ID);
    if ($file_url) {
        wp_safe_redirect($file_url, 301);
        exit;
    }
});

Этот код лучше добавить в дочернюю тему или в небольшой mu-plugin, а не в основной файл темы, если вы часто обновляете шаблон.

3. Уберите индексацию лишних архивов

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

<?php
add_action('wp_head', function () {
    if (is_tag() || is_author() || is_date()) {
        echo '<meta name="robots" content="noindex,follow">' . "\n";
    }
});

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

4. Задайте канонический URL для страниц с параметрами

Параметры в URL — частая причина дублей. Если страница доступна как /post/ и /post/?utm_source=..., поисковику нужно явно показать основную версию. WordPress сам ставит canonical для многих шаблонов, но если у вас есть кастомные страницы, фильтры или нестандартные шаблоны, проверьте это вручную.

Для отдельных шаблонов можно вывести canonical самостоятельно:

<?php
add_action('wp_head', function () {
    if (!is_singular()) {
        return;
    }

    $canonical = get_permalink();
    if ($canonical) {
        echo '<link rel="canonical" href="' . esc_url($canonical) . '">' . "\n";
    }
}, 1);

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

5. Проверьте редиректы для старых и альтернативных URL

Если сайт раньше открывался по другому адресу, старые версии должны уходить на новый 301-редиректом. Это касается и www/non-www, и http/https, и старых путей после смены структуры постоянных ссылок.

На уровне Apache это обычно делается через .htaccess, на Nginx — через конфигурацию сервера. В WordPress не стоит пытаться чинить это только PHP-редиректами, если проблема глобальная: лишний запрос уже будет сделан, а это лишняя нагрузка и задержка.

Как проверить, что решение сработало

Проверка нужна не только в браузере. Смотрите на ответ сервера, canonical и индексируемость.

  • Откройте старый URL и убедитесь, что он отдаёт 301, а не 302 или 200.
  • Проверьте исходный код страницы: canonical должен вести на единственную основную версию.
  • Посмотрите, исчезли ли attachment-страницы из внутренней перелинковки.
  • В Search Console отправьте на переобход несколько проблемных URL и проверьте, как Google видит канонический адрес.
  • Сравните результаты site:-поиска до и после правок, но не делайте выводы по одному дню — индексация обновляется не мгновенно.

Если у вас есть доступ к командной строке и установлен WP-CLI, полезно быстро проверить, не осталось ли старых ссылок в контенте:

wp search-replace 'http://example.com' 'https://example.com' --dry-run
wp search-replace 'https://www.example.com' 'https://example.com' --dry-run

--dry-run здесь обязателен на первом проходе. Он показывает объём замены без записи в базу.

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

Закрыли от индексации всё подряд

Иногда пытаются убрать дубли, ставя noindex на все архивы, категории и даже записи. В результате сайт теряет полезные посадочные страницы. Исправление простое: закрывайте только то, что реально дублирует основной контент или не несёт самостоятельной ценности.

Сделали редирект через JavaScript

Клиентский редирект не решает задачу для поисковика и создаёт лишнюю задержку для пользователя. Для дублей нужен серверный 301.

Оставили несколько canonical одновременно

Это часто случается, когда canonical выводит тема, SEO-плагин и ещё кусок кастомного кода. В таком случае поисковик может проигнорировать часть сигналов. Оставьте один источник canonical и проверьте итоговый HTML.

Удалили архивы, но забыли про внутренние ссылки

Если в меню, хлебных крошках или блоках рекомендаций остались ссылки на старые URL, поисковик и пользователи продолжат ходить по ним. После редиректов проверьте шаблоны, виджеты и контент.

Когда лучше использовать плагин, а когда код

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

Коротко по выбору:

  • Код — когда нужен точечный контроль и минимум зависимостей.
  • Плагин — когда важнее быстро закрыть несколько типовых проблем в одном месте.
  • Комбинация — когда базовые редиректы делаются на сервере, а мелкие правила — в теме или mu-plugin.

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

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

С точки зрения производительности самый дорогой вариант — пытаться лечить дубли на лету через сложные PHP-условия в каждой загрузке. Если правило можно вынести в серверный редирект или в постоянную настройку темы, так и делайте. Чем меньше логики в wp_head и template_redirect, тем проще сопровождать сайт.

Если после правок дубли всё ещё появляются, не ищите проблему только в WordPress. Иногда источник — в CMS-обвязке, CDN, кэше страницы или в том, как настроены параметры UTM в рекламных ссылках. В таких случаях сначала проверьте, какой именно URL попадает в индекс, а уже потом меняйте код.

Как удалить конфликты иконок FontAwesome в WordPress без потерь
19.05.2026
Как отключить oEmbed в WordPress и убрать лишние запросы без плагинов
26.08.2026
Как создать подсказки с иконками в WordPress
16.03.2026
Как отключить Gutenberg в WordPress без плагинов
09.12.2025
Как найти и убрать дубли страниц в WordPress без плагинов
31.08.2026