Как закрыть от индексации старые версии страниц в WordPress

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

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

Какие старые версии страниц реально попадают в индекс

Чаще всего речь идёт о таких сценариях:

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

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

Диагностика: как понять, что именно дублируется

Начните с проверки реальных URL, а не с правки robots.txt. Откройте несколько подозрительных адресов и посмотрите, какой код ответа возвращается, есть ли редирект, и совпадает ли содержимое с основной страницей.

Что проверить вручную

  • открывается ли страница по старому адресу без редиректа;
  • есть ли на ней тег rel="canonical";
  • не закрыта ли она случайно от индексации через noindex вместе с нужной страницей;
  • не генерирует ли тема или плагин отдельные URL для одной и той же записи;
  • не остались ли внутренние ссылки на старый адрес.

Если есть доступ к консоли, удобно проверить ответ сервера так:

curl -I https://example.com/staryy-adres/

Смотрите на статус. Если это 200 OK, страница доступна и поисковик может её индексировать. Если 301 или 302, проверьте, куда ведёт редирект. Если 404 или 410, это уже сигнал на удаление, но только если URL действительно больше не нужен.

Что выбрать: noindex, canonical, редирект или удаление

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

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

Если страница переехала на новый адрес, почти всегда лучше делать 301 редирект. Если это технический дубль с параметром в URL, чаще уместен canonical или noindex. Если контент удалён и не должен возвращаться, можно отдавать 410, но только когда вы уверены, что на него не завязаны внутренние ссылки и внешние переходы.

Пошаговое решение для WordPress

1. Уберите старый URL через редирект

Если у страницы есть новый адрес, не пытайтесь лечить проблему только метатегами. Редирект передаёт пользователей и поисковые сигналы на актуальный URL.

add_action('template_redirect', function () {
    if (is_page('staryy-slug')) {
        wp_redirect(home_url('/novyy-slug/'), 301);
        exit;
    }
});

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

2. Для дублей с параметрами задайте canonical

Если страница открывается с параметрами вроде ?utm_source= или техническими фильтрами, а содержимое не меняется, поисковику нужен основной адрес. В WordPress это можно сделать через фильтр wpseo_canonical в Yoast SEO или аналогичный механизм в другом SEO-плагине. Если плагина нет, canonical можно вывести в шаблоне, но лучше не дублировать логику вручную в каждой теме.

Пример для кастомного шаблона:

<link rel="canonical" href="<?php echo esc_url( home_url( add_query_arg( array(), $wp->request ) ) ); ?>" />

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

3. Закройте технические страницы через noindex

Если страница нужна для пользователей или внутренних сценариев, но не должна попадать в поиск, используйте noindex. Для WordPress это обычно делается через SEO-плагин или через фильтр, который добавляет мета-тег в <head>.

add_action('wp_head', function () {
    if (is_page('testovaya-stranitsa') || is_page('staryy-dubl')) {
        echo '<meta name="robots" content="noindex,follow" />' . "\n";
    }
});

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

4. Для окончательно удалённых URL используйте 410 или 404

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

В WordPress можно отдать 410 так:

add_action('template_redirect', function () {
    if (is_page('udalennaya-stranitsa')) {
        status_header(410);
        nocache_headers();
        include get_query_template('404');
        exit;
    }
});

Такой подход полезен, когда старый URL уже не нужен и вы не хотите держать его в индексе через редирект на нерелевантную страницу.

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

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

  • старый URL отдаёт нужный статус: 301, 404 или 410;
  • на странице с дублем есть правильный canonical;
  • в HTML присутствует noindex там, где он нужен;
  • внутренние ссылки больше не ведут на старый адрес;
  • в sitemap остались только актуальные URL;
  • страница не блокируется robots.txt, если вы ждёте от неё сигнал на удаление.

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

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

Закрыли URL в robots.txt и ждёте удаления

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

Ставите canonical на несуществующую или нерелевантную страницу

Canonical должен указывать на реальный основной адрес с тем же смыслом. Если он ведёт на другую тему или на страницу с другим контентом, поисковик может проигнорировать сигнал.

Делаете 302 вместо 301

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

Оставляете внутренние ссылки на старые адреса

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

Смешиваете несколько сигналов сразу

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

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

Если дублей много, не пытайтесь решать всё PHP-кодом в теме. Для массовых редиректов и правил индексации лучше использовать плагин или серверную конфигурацию, чтобы не потерять настройки при обновлении темы. Для чистки дублей и технических страниц в WordPress удобно смотреть в сторону инструментов, которые умеют управлять canonical, noindex и системными архивами без ручного редактирования шаблонов. Например, у Clearfy Pro есть набор функций для удаления дублей и технической чистки сайта: https://wpshop.ru/plugins/clearfy.

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

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

  • определён тип старого URL: дубль, переезд, удаление или техническая страница;
  • выбран один основной метод: 301, canonical, noindex или 410;
  • проверен статус ответа через curl -I или аналогичный инструмент;
  • обновлены внутренние ссылки и меню;
  • старый URL не блокируется robots.txt, если от него нужен сигнал на удаление;
  • актуальный URL попал в sitemap, а старый — нет.

Если после правок старый адрес всё ещё появляется в поиске, обычно проблема не в одном теге, а в сочетании факторов: где-то осталась ссылка, где-то canonical указывает не туда, а где-то сервер продолжает отдавать 200 OK вместо редиректа или удаления. В таких случаях лучше идти от ответа сервера и структуры URL, а не от метатегов.

Шаблоны для WP Плагины для WP

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

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

Какие старые версии страниц реально попадают в индекс

Чаще всего речь идёт о таких сценариях:

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

Диагностика: как понять, что именно дублируется

Начните с проверки реальных URL, а не с правки robots.txt. Откройте несколько подозрительных адресов и посмотрите, какой код ответа возвращается, есть ли редирект, и совпадает ли содержимое с основной страницей.

Что проверить вручную

Если есть доступ к консоли, удобно проверить ответ сервера так:

curl -I https://example.com/staryy-adres/

Смотрите на статус. Если это 200 OK, страница доступна и поисковик может её индексировать. Если 301 или 302, проверьте, куда ведёт редирект. Если 404 или 410, это уже сигнал на удаление, но только если URL действительно больше не нужен.

Что выбрать: noindex, canonical, редирект или удаление

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

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

Если страница переехала на новый адрес, почти всегда лучше делать 301 редирект. Если это технический дубль с параметром в URL, чаще уместен canonical или noindex. Если контент удалён и не должен возвращаться, можно отдавать 410, но только когда вы уверены, что на него не завязаны внутренние ссылки и внешние переходы.

Пошаговое решение для WordPress

1. Уберите старый URL через редирект

Если у страницы есть новый адрес, не пытайтесь лечить проблему только метатегами. Редирект передаёт пользователей и поисковые сигналы на актуальный URL.

add_action('template_redirect', function () {
    if (is_page('staryy-slug')) {
        wp_redirect(home_url('/novyy-slug/'), 301);
        exit;
    }
});

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

2. Для дублей с параметрами задайте canonical

Если страница открывается с параметрами вроде ?utm_source= или техническими фильтрами, а содержимое не меняется, поисковику нужен основной адрес. В WordPress это можно сделать через фильтр wpseo_canonical в Yoast SEO или аналогичный механизм в другом SEO-плагине. Если плагина нет, canonical можно вывести в шаблоне, но лучше не дублировать логику вручную в каждой теме.

Пример для кастомного шаблона:

<link rel="canonical" href="<?php echo esc_url( home_url( add_query_arg( array(), $wp->request ) ) ); ?>" />

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

3. Закройте технические страницы через noindex

Если страница нужна для пользователей или внутренних сценариев, но не должна попадать в поиск, используйте noindex. Для WordPress это обычно делается через SEO-плагин или через фильтр, который добавляет мета-тег в <head>.

add_action('wp_head', function () {
    if (is_page('testovaya-stranitsa') || is_page('staryy-dubl')) {
        echo '<meta name="robots" content="noindex,follow" />' . "\n";
    }
});

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

4. Для окончательно удалённых URL используйте 410 или 404

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

В WordPress можно отдать 410 так:

add_action('template_redirect', function () {
    if (is_page('udalennaya-stranitsa')) {
        status_header(410);
        nocache_headers();
        include get_query_template('404');
        exit;
    }
});

Такой подход полезен, когда старый URL уже не нужен и вы не хотите держать его в индексе через редирект на нерелевантную страницу.

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

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

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

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

Закрыли URL в robots.txt и ждёте удаления

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

Ставите canonical на несуществующую или нерелевантную страницу

Canonical должен указывать на реальный основной адрес с тем же смыслом. Если он ведёт на другую тему или на страницу с другим контентом, поисковик может проигнорировать сигнал.

Делаете 302 вместо 301

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

Оставляете внутренние ссылки на старые адреса

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

Смешиваете несколько сигналов сразу

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

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

Если дублей много, не пытайтесь решать всё PHP-кодом в теме. Для массовых редиректов и правил индексации лучше использовать плагин или серверную конфигурацию, чтобы не потерять настройки при обновлении темы. Для чистки дублей и технических страниц в WordPress удобно смотреть в сторону инструментов, которые умеют управлять canonical, noindex и системными архивами без ручного редактирования шаблонов. Например, у Clearfy Pro есть набор функций для удаления дублей и технической чистки сайта: https://wpshop.ru/plugins/clearfy.

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

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

Если после правок старый адрес всё ещё появляется в поиске, обычно проблема не в одном теге, а в сочетании факторов: где-то осталась ссылка, где-то canonical указывает не туда, а где-то сервер продолжает отдавать 200 OK вместо редиректа или удаления. В таких случаях лучше идти от ответа сервера и структуры URL, а не от метатегов.