Старые версии страниц в WordPress часто остаются в индексе после редизайна, смены структуры URL или правок контента. В результате поисковик видит несколько похожих страниц, а в выдаче может показываться не та версия, которую вы хотите продвигать. Если задача точечная — закрыть именно устаревшие URL, а не весь сайт целиком, это можно сделать на уровне шаблона и хука wp_robots без SEO-плагина.
Ниже разберём рабочий сценарий: как определить проблемные URL, как закрыть их от индексации, чем отличается noindex от robots.txt, и как проверить, что поисковик получил нужные сигналы.
Когда проблема действительно в старых версиях страниц
Сначала стоит убедиться, что речь не о случайной технической ошибке, а именно о дублях или устаревших адресах. Типичный набор симптомов:
- в поиске есть старая версия страницы после смены URL;
- в индексе остаются страницы с параметрами, которые больше не нужны;
- один и тот же контент доступен по нескольким адресам;
- в логах или в Search Console всплывают URL, которые уже не используются в навигации;
- после обновления структуры сайта старые адреса продолжают получать переходы из поиска.
Что именно нужно закрывать
Не все старые URL одинаковы. Иногда правильнее сделать 301-редирект, а иногда — оставить страницу доступной, но запретить индексацию. Например:
- 301 редирект — если у старой страницы есть очевидная новая замена;
- noindex — если страница нужна пользователям, но не должна участвовать в поиске;
- 410 Gone — если URL удалён окончательно и возвращать его не планируется.
Если вы просто добавите Disallow в robots.txt, это не всегда решит задачу. Поисковик может продолжать хранить URL в индексе без содержимого, а сам адрес останется известным. Для устаревших страниц чаще нужен именно noindex или редирект.
Диагностика: как найти старые URL и дубли
Перед правкой кода проверьте, какие адреса реально существуют и как они отдаются сервером. Минимальный набор проверок:
- Откройте проблемный URL в браузере и посмотрите, не отдаёт ли он 200 OK вместо редиректа.
- Проверьте заголовки ответа через DevTools или
curl -I. - Посмотрите исходный HTML: есть ли уже
noindexв мета-тегах или в robots-правилах. - Сравните канонический адрес страницы и фактический URL.
Пример проверки через консоль:
curl -I https://example.com/staryj-url/Если в ответе 200 OK, а страница уже не должна индексироваться, значит нужно добавить явный сигнал для поисковика. Если стоит 301, но старая версия всё равно появляется в индексе, проверьте, не осталось ли на неё внутренних ссылок и нет ли цепочки редиректов.
Пошаговое решение без плагина
Самый аккуратный вариант — закрывать от индексации только нужные шаблоны или конкретные URL по условию. Для этого можно использовать фильтр wp_robots, который WordPress применяет к robots-мета в HTML.
1. Добавьте noindex для старых страниц по списку URL
Если у вас есть несколько известных старых адресов, проще всего задать их явно. Код можно положить в functions.php дочерней темы или в небольшой mu-plugin.
<?php
add_filter('wp_robots', function (array $robots) {
if (is_admin()) {
return $robots;
}
$old_paths = array(
'/staryj-url/',
'/old-about-page/',
'/archive-2022/',
);
$request_uri = parse_url($_SERVER['REQUEST_URI'] ?? '', PHP_URL_PATH);
if ($request_uri && in_array($request_uri, $old_paths, true)) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
return $robots;
});Этот вариант хорош тем, что не затрагивает весь сайт. Но он подходит только тогда, когда список старых URL небольшой и известен заранее.
2. Закройте от индексации архивы или служебные страницы по условию
Если проблема не в отдельных страницах, а в технических архивах, можно использовать условные теги WordPress. Например, для страниц поиска, вложений или специальных архивов.
<?php
add_filter('wp_robots', function (array $robots) {
if (is_search() || is_attachment()) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
return $robots;
});Важно: не ставьте noindex на всё подряд. Если закрыть от индексации важные посадочные страницы, они перестанут участвовать в поиске, и это уже будет не техническая чистка, а потеря трафика.
3. Если нужен именно HTTP-заголовок X-Robots-Tag
Для PDF, изображений или нестандартных ответов удобнее использовать заголовок X-Robots-Tag. WordPress сам его не добавляет для обычных страниц, но вы можете сделать это через send_headers или на уровне сервера. В PHP это выглядит так:
<?php
add_action('send_headers', function () {
$request_uri = parse_url($_SERVER['REQUEST_URI'] ?? '', PHP_URL_PATH);
if ($request_uri === '/archive-2022/') {
header('X-Robots-Tag: noindex, nofollow', true);
}
});Такой способ полезен, если HTML-мета-тег не подходит или страница генерируется не стандартным шаблоном.
Сравнение подходов: robots.txt, noindex и редирект
| Способ | Когда использовать | Плюс | Минус |
|---|---|---|---|
301 | Есть новая версия страницы | Передаёт пользователей и часть сигналов на новый URL | Нужна точная замена |
noindex | Страница должна открываться, но не индексироваться | Гибко и безопасно для контента | Нужно дождаться переобхода |
robots.txt | Нужно ограничить обход, а не индексирование как таковое | Просто реализовать | Не всегда убирает URL из индекса |
Если задача — убрать старую страницу из поиска, обычно лучше сначала сделать 301 на новый адрес. Если замены нет, тогда ставьте noindex. robots.txt оставьте для служебных ограничений, а не как основной инструмент удаления из выдачи.
Как проверить, что решение сработало
После внедрения не ограничивайтесь визуальной проверкой в браузере. Нужно убедиться, что поисковый робот видит именно те сигналы, которые вы добавили.
- Откройте страницу и проверьте исходный код: есть ли
<meta name="robots" content="noindex,nofollow">или аналогичный набор значений. - Проверьте заголовки ответа через
curl -I, если используетеX-Robots-Tag. - Убедитесь, что старый URL не ведёт на 200 OK, если должен быть редирект.
- Проверьте внутренние ссылки: старый адрес не должен встречаться в меню, хлебных крошках и контенте.
- В Search Console отправьте URL на повторную проверку после изменения.
Пример, как проверить мета-robots в HTML:
curl -s https://example.com/staryj-url/ | grep -i robotsЕсли страница отдает noindex, но в индексе всё ещё висит старая версия, это нормально на переходном этапе. Поисковику нужно время, чтобы переобойти URL и обновить состояние.
Частые ошибки и как их исправить
Ставят noindex и одновременно закрывают URL в robots.txt
Это частая ошибка. Если робот не может зайти на страницу, он может не увидеть noindex. В итоге URL остаётся в индексе дольше, чем ожидалось. Если цель — удалить страницу из поиска, сначала дайте роботу увидеть сигнал, а уже потом ограничивайте обход, если это действительно нужно.
Используют редирект на нерелевантную страницу
Например, старую статью отправляют на главную. Для поисковика это слабый сигнал, а для пользователя — плохой опыт. Лучше редиректить на ближайший по смыслу материал или оставить noindex, если замены нет.
Забывают про канонический URL
Если страница доступна по нескольким адресам, а canonical указывает не туда, поисковик может продолжать считать их дублями. Проверьте, что канонический адрес совпадает с основной версией страницы и не указывает на устаревший путь.
Закрывают от индексации не тот шаблон
Иногда разработчик добавляет условие в шаблон, но оно срабатывает шире, чем нужно. Например, вместо одной старой страницы закрывается весь тип записей. Перед публикацией правки проверьте несколько URL вручную.
Практические советы по безопасности и производительности
Если вы вносите такие правки через тему, лучше не редактировать родительскую тему напрямую. Используйте дочернюю тему или небольшой mu-plugin, чтобы обновление не затёрло изменения. Для точечных технических правил это особенно важно: код должен переживать обновления дизайна и не зависеть от визуальных шаблонов.
Ещё один полезный момент — не плодить десятки условий в functions.php. Если старых URL много, вынесите список в отдельный массив или конфигурационный файл. Так проще поддерживать правила и быстрее находить лишние записи после редизайна.
Если вам нужно регулярно чистить сайт от дублей, архивов и технических страниц, часть задач можно закрыть специализированным плагином вроде Clearfy Pro, но для единичного сценария с устаревшими URL код обычно проще и прозрачнее. Важно не смешивать SEO-логику с декоративными правками темы: чем меньше магии, тем легче потом проверить результат.
В итоге рабочая схема выглядит так: сначала находите конкретный старый URL, затем выбираете между редиректом и noindex, после этого проверяете заголовки и исходный код, а уже потом смотрите на переобход в Search Console. Такой подход не ломает сайт целиком и даёт предсказуемый результат на уровне конкретных страниц.