Старые версии страниц в WordPress обычно всплывают после редизайна, смены темы, переноса контента или правки постоянных ссылок. В индексе остаются URL с прежними слагами, параметрами, вложенными путями или дублями из архивов. Если такие адреса продолжают отдавать 200 OK, поисковик видит их как полноценные страницы и не спешит выкидывать из выдачи.
Задача здесь не в том, чтобы «спрятать всё подряд», а в том, чтобы оставить поиску один канонический адрес и убрать мусорные варианты без потери нужных страниц. Ниже — рабочая схема: как диагностировать проблему, чем закрывать старые URL, как проверить результат и где чаще всего ошибаются.
Когда проблема действительно есть
Сначала стоит понять, что именно попало в индекс. Старые версии страниц чаще всего появляются в таких сценариях:
- после изменения
/category/post-name/на короткий URL остались старые адреса; - страница доступна и по новому, и по старому пути через редирект, но редирект настроен не везде;
- в индекс попали URL с параметрами вроде
?replytocom=,?ampили служебными метками; - контент дублируется в архивах, тегах, авторских страницах, пагинации или поиске по сайту;
- плагин кэширования или SEO-плагин отдает разные версии одной и той же страницы без явного канонического адреса.
Что смотреть в первую очередь
Откройте проблемный URL и проверьте три вещи: код ответа, canonical и редирект. Если старый адрес отвечает 200 и содержит тот же контент, что и новый, это почти всегда лишний дубль. Если старый адрес уже отдает 301 на новый, а в индексе он все равно висит, значит поисковику нужно время, либо есть еще другие источники дублей.
Быстрая проверка через консоль:
curl -I https://example.com/old-page/В ответе важно увидеть либо 301 Moved Permanently с заголовком Location, либо 404/410 для реально удаленного адреса. Если там 200 OK, страница все еще доступна для индексации.
Что делать со старыми URL: сравнение подходов
| Способ | Когда подходит | Плюс | Минус |
|---|---|---|---|
| 301 редирект | Старый адрес заменен новым | Передает сигнал о переезде | Нужно точно сопоставить старый и новый URL |
| 410 Gone | Страница удалена навсегда | Быстрее убирает мусор из индекса | Нельзя использовать, если есть релевантная замена |
| noindex | Страница должна открываться, но не индексироваться | Просто внедрить на уровне SEO | Не решает проблему дубля, если URL уже разошелся по сайту |
На практике для старых версий страниц чаще всего нужен 301. Если контент переехал на новый адрес — редиректите. Если страница удалена без замены — отдавайте 410. noindex полезен для служебных страниц, но не заменяет правильную маршрутизацию URL.
Пошаговое решение через редиректы и очистку дублей
1. Составьте список старых адресов
Не начинайте с массовых правил «на глаз». Сначала соберите конкретные URL из Search Console, логов сервера, отчета по 404 и внутреннего поиска по сайту. Если старых адресов немного, их лучше закрывать точечно. Это безопаснее, чем пытаться одним правилом поймать все варианты и случайно сломать рабочие страницы.
- проверьте отчет по страницам с ошибками в Google Search Console;
- посмотрите логи веб-сервера на частые запросы к старым слагам;
- сравните старые и новые URL после миграции;
- найдите дубли с параметрами и служебными окончаниями.
2. Настройте 301 для переехавших страниц
Если у старой страницы есть новая версия, используйте постоянный редирект. В WordPress это можно сделать на уровне сервера или через плагин, но для точечных случаев удобнее и прозрачнее правило в .htaccess для Apache или конфигурация Nginx.
Пример для Apache:
Redirect 301 /old-page/ https://example.com/new-page/Если нужно несколько адресов, правила лучше перечислять отдельно, а не строить слишком широкие шаблоны. Так проще отлаживать и меньше шанс задеть лишние URL.
3. Для удаленных страниц отдавайте 410
Когда страницы больше не существует и замены нет, 410 Gone обычно честнее, чем 404. Поисковик быстрее понимает, что URL удален намеренно. Это особенно полезно для старых посадочных страниц, тестовых материалов и контента, который вы не планируете восстанавливать.
Пример для Apache:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^old-landing/?$ - [G,L]
</IfModule>В Nginx аналогичный подход обычно делают через return 410; в нужном location-блоке. Если вы не уверены в конфигурации сервера, лучше сначала протестировать на одной странице, а не на группе URL.
4. Уберите источник дубля, а не только его следствие
Если старые версии страниц появляются из-за структуры сайта, одного редиректа мало. Нужно убрать сам механизм генерации дублей:
- настроить канонический URL в SEO-плагине;
- отключить лишние архивы, если они не нужны;
- закрыть служебные параметры в шаблоне;
- не выводить устаревшие ссылки в меню, хлебных крошках и блоках похожих материалов;
- проверить, не создает ли тема отдельные шаблоны для одного и того же контента.
Если на сайте используется Clearfy Pro, часть таких дублей можно убрать через его настройки очистки и SEO-опций. Но даже в этом случае редиректы и проверка кодов ответа остаются обязательными: плагин не угадает, какой старый URL должен вести на какой новый.
Как закрыть старые версии через код в WordPress
Если у вас нет доступа к серверной конфигурации или нужен точечный контроль на уровне темы/плагина, можно добавить редирект через template_redirect. Это рабочий вариант для небольшого числа адресов, но его лучше держать в отдельном мини-плагине, а не в functions.php темы.
<?php
add_action('template_redirect', function () {
if (is_admin()) {
return;
}
$request_uri = isset($_SERVER['REQUEST_URI']) ? wp_unslash($_SERVER['REQUEST_URI']) : '';
$map = array(
'/old-page/' => home_url('/new-page/'),
'/old-section/page/' => home_url('/section/'),
);
foreach ($map as $old => $new) {
if (trailingslashit($request_uri) === trailingslashit(parse_url($old, PHP_URL_PATH))) {
wp_redirect($new, 301);
exit;
}
}
});Этот пример не универсален, но он показывает правильную логику: сравнивать путь запроса, а не пытаться ловить все через грубые регулярки. Для массовых правил лучше использовать сервер или специализированный плагин редиректов.
Проверка результата после внедрения
После настройки не ограничивайтесь открытием страницы в браузере. Проверьте результат по шагам:
- старый URL отвечает
301на новый или410, если удален; - новый URL отдает
200 OKи содержит правильныйcanonical; - внутренние ссылки на сайте больше не ведут на старый адрес;
- в Search Console старый URL постепенно уходит из отчета по индексированию;
- в кэше и CDN не осталось старой версии страницы.
Проверить заголовки можно так:
curl -I https://example.com/old-page/
curl -I https://example.com/new-page/Если у вас включен кэш на уровне сервера или CDN, очистите его после правок. Иначе вы можете увидеть старый ответ даже тогда, когда правило уже исправлено.
Частые ошибки и как их исправить
Редирект ведет на нерелевантную страницу
Это частая ошибка при массовой миграции. Например, все старые URL отправляют на главную. Для поисковика это слабый сигнал, а для пользователя — плохой опыт. Лучше вести на ближайший по смыслу новый материал или на раздел, где контент действительно продолжен.
Старый URL закрыли noindex, но он все еще доступен
noindex не убирает дубль из обхода сайта. Если страница продолжает открываться и на нее ведут внутренние ссылки, поисковик будет тратить на нее ресурсы. Для переехавших страниц нужен редирект, а не только мета-тег.
Правило случайно задевает рабочие адреса
Это бывает, когда используют слишком широкие регулярные выражения. Перед выкладкой проверьте несколько реальных URL, особенно похожих по структуре. Если правило затрагивает лишние страницы, сужайте шаблон или переходите на точечные редиректы.
Старая версия осталась в sitemap
Если URL удален или переехал, он не должен оставаться в XML-карте сайта. Иначе вы сами подсказываете поисковику старый адрес. После правок обновите sitemap и отправьте его на переобход.
Чек-лист перед публикацией изменений
- у каждого старого URL есть понятная судьба: 301, 410 или noindex;
- новые страницы открываются с кодом
200; - внутренние ссылки обновлены;
- canonical указывает на основной адрес;
- старые URL удалены из sitemap;
- кэш и CDN очищены;
- проверка через
curl -Iпоказывает ожидаемый код ответа.
Что делать, если старых URL очень много
Когда после переезда накопились сотни или тысячи старых адресов, ручная правка уже не подходит. В этом случае лучше сначала сгруппировать URL по типам: старые рубрики, старые слаги записей, параметры, архивы, технические страницы. Для каждой группы выбирается свой способ: часть уходит в 301, часть в 410, часть закрывается на уровне шаблона или SEO-настроек.
Если сайт большой, полезно сначала протестировать правила на небольшом наборе URL и только потом раскатывать их на весь проект. Так вы быстрее поймаете конфликт с кэшем, плагином редиректов или особенностями темы.
Главная мысль простая: старые версии страниц не нужно «прятать» вслепую. Их нужно либо корректно перенаправить, либо честно удалить из обхода, либо убрать источник дубля. Тогда индексация стабилизируется без лишних потерь для нормальных страниц.