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

В WordPress дубли чаще всего появляются не из-за «плохого SEO», а из-за штатной логики: архивы категорий, теги, авторы, пагинация, вложения, страницы поиска и служебные URL могут отдавать похожий или почти одинаковый контент. Если это не контролировать, поисковик тратит обход на мусорные страницы, а в индексе остаются не те URL, которые вы хотели бы продвигать.

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

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

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

  • архивы тегов и авторов, если они не несут самостоятельной ценности;
  • страницы пагинации архивов, где повторяется один и тот же список записей;
  • страницы вложений изображений, если они индексируются отдельно;
  • внутренний поиск сайта;
  • страницы с параметрами сортировки, фильтров или UTM, если они попадают в индекс;
  • дубли главной страницы через разные варианты URL, например с www и без, с index.php и без него, если сервер настроен неаккуратно.

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

Проверять нужно не только через визуальный осмотр, но и по факту ответа сервера и мета-тегов. Откройте несколько типовых URL и посмотрите:

  • есть ли на странице noindex в <meta name="robots">;
  • не отдает ли страница одинаковый title и description с другими архивами;
  • не доступна ли страница вложения как отдельный контент;
  • не индексируется ли пагинация вида /page/2/ и далее;
  • не создают ли плагины SEO, фильтров или кеша собственные канонические URL.

Если у вас есть доступ к Search Console, откройте отчёт по страницам и посмотрите, какие URL попали в индекс без смысла: внутренний поиск, теги без контента, архивы автора на сайте с одним автором, страницы пагинации и вложения. Это хороший ориентир, откуда начинать.

Что лучше закрывать от индексации, а что оставлять

Не все архивы нужно прятать. Иногда теговые страницы или архивы категорий дают трафик и нормально ранжируются. Ошибка многих сайтов — поставить noindex на всё подряд и потом удивляться падению видимости.

ВариантКогда подходитПлюсМинус
SEO-плагинЕсли нужно быстро закрыть архивы без кодаУдобно для редактораМожет быть лишняя нагрузка и зависимость от настроек
Код в теме или мини-плагинеЕсли нужен точечный контрольПрозрачно и предсказуемоНужно аккуратно тестировать после обновлений
robots.txtЕсли надо ограничить обход, а не индексациюПросто внедритьНе гарантирует исключение из индекса, если URL уже известен поисковику

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

Пошаговое решение без лишних плагинов

Если у вас уже стоит SEO-плагин, сначала проверьте его настройки. Многие плагины умеют ставить noindex для архивов и задавать канонические URL без кода. Но если нужен контроль на уровне темы или сайта, можно сделать это через фильтры WordPress.

1. Закрываем архивы автора и поиска

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

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

    return $robots;
});

Фильтр wp_robots работает в современных версиях WordPress и позволяет менять robots-правила без ручной правки шаблонов. Это лучше, чем вставлять мета-тег в header.php, потому что логика остаётся в одном месте.

2. Отключаем индексацию страниц вложений

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

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;
    }
});

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

3. Добавляем noindex для пагинации архивов

Пагинация сама по себе не ошибка, но страницы /page/2/, /page/3/ и дальше часто повторяют один и тот же набор карточек и не дают самостоятельной ценности. Если у вас контентный сайт, такие страницы обычно лучше исключить из индекса.

add_filter('wp_robots', function ($robots) {
    if (is_paged() && (is_home() || is_archive() || is_category() || is_tag())) {
        $robots['noindex'] = true;
        $robots['follow'] = true;
    }

    return $robots;
});

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

4. Для robots.txt используем только ограничение обхода

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

add_filter('robots_txt', function ($output, $public) {
    $output .= "\nDisallow: /?s=";
    $output .= "\nDisallow: /search/";
    $output .= "\nDisallow: /attachment/";

    return $output;
}, 10, 2);

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

Если используете SEO-плагин

В большинстве случаев удобнее закрывать дубли через SEO-плагин, если он уже установлен и настроен. Это особенно полезно, когда правки должны делать не разработчики, а редакторы или контент-менеджеры. Важно только не дублировать настройки: если плагин ставит noindex, не нужно ещё раз навешивать его кодом без необходимости.

Проверьте, умеет ли ваш плагин:

  • закрывать архивы авторов;
  • закрывать теги, если они пустые или технические;
  • ставить noindex на поиск и пагинацию;
  • задавать canonical для страниц с параметрами;
  • не создавать лишние мета-теги в шаблоне.

Если нужен более широкий набор инструментов для чистки дублей и технической оптимизации, иногда проще использовать один аккуратный SEO/cleanup-плагин, чем собирать это из нескольких разрозненных решений. Но даже в этом случае логику индексации лучше понимать вручную, а не полагаться на «автоматически всё исправит».

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

После внедрения не ограничивайтесь просмотром исходника. Проверка должна быть в несколько шагов:

  1. Откройте проблемный URL в браузере и убедитесь, что в исходном коде есть noindex или нужный canonical.
  2. Проверьте HTTP-ответ, если вы делали редирект для вложений: должен быть 301, а не 200.
  3. Сравните несколько страниц пагинации: у них не должно быть одинаковых canonical, если вы специально не задавали общий канонический URL.
  4. Посмотрите, не сломались ли хлебные крошки, архивы и навигация по сайту.
  5. В Search Console отправьте URL на повторную проверку, если проблема уже была в индексе.

Для быстрой локальной проверки удобно использовать curl:

curl -I https://example.com/author/admin/
curl -I https://example.com/page/2/
curl -I https://example.com/sample-attachment/

Если вы видите 200 там, где ожидали редирект, значит правило не сработало или конфликтует с темой, кешем либо другим плагином.

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

  • Ставят noindex только в robots.txt. Это не убирает URL из индекса, если он уже известен поисковику. Добавляйте мета-robots или редирект там, где это уместно.
  • Закрывают все архивы подряд. В итоге пропадают полезные страницы категорий и тегов. Сначала оцените, какие архивы реально дают трафик.
  • Делают редирект вложений без проверки структуры сайта. Если медиатека используется как отдельный контентный раздел, редирект может быть лишним.
  • Конфликтуют кодом и SEO-плагином. Два разных источника могут по-разному задавать canonical и robots. Оставьте один источник истины.
  • Не очищают кеш. После изменения robots-логики старые версии страниц могут ещё некоторое время отдаваться из кеша.

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

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

Следите за тем, чтобы:

  • не добавлять тяжёлые проверки в каждый запрос без необходимости;
  • не плодить несколько фильтров, которые делают одно и то же;
  • не отключать индексацию на уровне сервера, если достаточно точечной настройки в WordPress;
  • после правок очистить кеш страницы, объектный кеш и кеш CDN, если он есть.

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

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