Старые страницы не всегда нужно удалять. Если URL уже приносит трафик, имеет внешние ссылки или нужен для истории, чаще безопаснее убрать его из индекса, чем ломать адрес и настраивать редиректы. В WordPress это решается несколькими способами, но у каждого свой побочный эффект: один вариант скрывает страницу от поисковиков, другой оставляет её доступной для пользователей, третий убирает её из карты сайта и ускоряет переобход.
Ниже разберём рабочий сценарий для типичной задачи: на сайте накопились устаревшие записи, служебные страницы, дубли архивов или старые посадочные, которые не должны участвовать в поиске, но удалять их пока рано.
Когда страницу лучше закрыть, а не удалять
Удаление URL — это уже крайний шаг. Если страница:
- получает переходы из закладок, почты или старых публикаций;
- имеет внешние ссылки;
- нужна как архив или справочный материал;
- может пригодиться после обновления контента;
то сначала имеет смысл закрыть её от индексации. Так вы не теряете рабочий адрес и не создаёте лишние 404.
Но если страница пустая, дублирует другой материал и не несёт ценности, лучше не прятать её через noindex бесконечно, а либо объединить с основной страницей, либо удалить с корректным редиректом.
Диагностика: что именно мешает индексации
Перед правками проверьте, что происходит с URL сейчас. Частая ошибка — закрывать страницу от индексации, когда она уже исключена из поиска по другой причине: canonical указывает на другой адрес, страница отдаёт 404, или её режет robots.txt.
Что проверить в первую очередь
- Статус ответа страницы:
200,301,404или410. - Есть ли мета-тег
noindexв HTML. - Не закрыт ли URL в
robots.txt. - Куда указывает
rel="canonical". - Есть ли страница в XML-карте сайта.
Если URL уже закрыт в robots.txt, поисковик может не увидеть noindex на самой странице. Это важный нюанс: для удаления из индекса лучше сначала дать роботу доступ к странице, а потом закрывать её через мета-тег или заголовок.
Рабочие способы закрыть страницу от индексации
В WordPress есть три практичных подхода: через SEO-плагин, через код темы или плагина, и через серверные заголовки. Выбор зависит от того, сколько страниц нужно закрыть и насколько точечно это надо сделать.
| Подход | Когда подходит | Плюс | Минус |
|---|---|---|---|
| SEO-плагин | Нужно закрыть отдельные записи, рубрики или архивы | Быстро и без кода | Зависит от интерфейса плагина |
| Код | Нужно закрывать страницы по шаблону, типу записи или условию | Гибко и прозрачно | Требует аккуратности |
| Заголовок X-Robots-Tag | Нужно закрывать не-HTML файлы или отдельные ответы | Работает на уровне ответа | Не всегда удобно в обычной админке |
Вариант 1: через SEO-плагин
Если у вас уже стоит SEO-плагин, проще всего использовать его настройки для конкретной страницы или архива. В большинстве случаев достаточно отключить индексацию у нужного объекта и убрать его из карты сайта. Это удобно для редакторов: не нужно лезть в код, а статус виден прямо в админке.
Плюс такого подхода в том, что он снижает риск случайно закрыть лишнее. Минус — настройки могут отличаться от плагина к плагину, и при миграции сайта их нужно перепроверять вручную.
Вариант 2: через код для отдельных шаблонов
Если нужно закрывать, например, все записи определённого типа или страницы с техническим шаблоном, можно добавить noindex через wp_head. Это рабочий способ, если условие понятное и стабильное.
<?php
add_action( 'wp_head', function () {
if ( is_page( array( 123, 456 ) ) ) {
echo '<meta name="robots" content="noindex,follow">' . "\n";
}
} );Здесь страницы с ID 123 и 456 будут закрыты от индексации, но ссылки на них поисковик сможет обходить. Это полезно, если страница ещё должна передавать внутренний вес или оставаться доступной из меню.
Если нужно закрывать не отдельные ID, а, например, весь тип записи, условие можно заменить на is_singular( 'post_type_name' ). Но не делайте это вслепую: сначала убедитесь, что тип записи действительно не должен попадать в поиск.
Вариант 3: через X-Robots-Tag
Для файлов, PDF или ответов, где HTML-тег не поможет, используют заголовок X-Robots-Tag. Это уже уровень сервера или PHP-ответа. Для обычных страниц WordPress такой способ тоже возможен, но он нужен реже.
<?php
add_action( 'send_headers', function () {
if ( is_page( array( 123, 456 ) ) ) {
header( 'X-Robots-Tag: noindex, follow', true );
}
} );Этот вариант полезен, если вы не хотите выводить мета-тег в HTML или если страница формируется нестандартно. Но для большинства сайтов мета-тега в <head> достаточно.
Пошаговое решение для старых страниц
- Составьте список URL, которые нужно убрать из поиска, но не удалять.
- Проверьте, нет ли у них внешних ссылок и трафика из поиска.
- Уберите страницы из XML-карты сайта.
- Добавьте
noindex,followдля нужных URL. - Проверьте canonical и статус ответа.
- Отправьте страницу на переобход в Google Search Console или Яндекс Вебмастер, если это уместно.
Если страница уже не нужна совсем, не ограничивайтесь noindex. В таком случае лучше поставить 301-редирект на ближайшую релевантную страницу или вернуть 410, если замены нет и URL точно должен исчезнуть.
Как проверить, что решение сработало
Проверка должна быть не только визуальной. Откройте страницу в браузере и посмотрите исходный код: в <head> должен появиться <meta name="robots" content="noindex,follow"> или соответствующий заголовок ответа.
- В браузере:
view-source:и поиск поrobots. - Через DevTools: вкладка Network, заголовки ответа.
- Через Search Console: проверка URL и статус индексации.
- Через sitemap: убедитесь, что URL больше не попадает в карту сайта.
Если страница всё ещё отображается в индексе, это не всегда ошибка. Поисковику нужно время на повторный обход. Но если после нескольких обходов URL остаётся в индексе, проверьте, не мешает ли ему robots.txt или canonical на другой адрес.
Частые ошибки и как их исправить
Закрыли страницу в robots.txt раньше, чем добавили noindex
Так делать не стоит, если цель — именно убрать URL из индекса. Поисковик может не увидеть мета-тег на странице. Сначала дайте доступ к URL, затем применяйте noindex.
Оставили страницу в XML-карте сайта
Если URL всё ещё в sitemap, робот будет возвращаться к нему снова. Уберите его из карты сайта на уровне плагина или шаблона генерации sitemap.
Поставили noindex на важную страницу по ошибке
Это частая проблема при массовых правилах. Например, условие is_page() может зацепить не только старую посадочную, но и новую страницу с похожим шаблоном. После внедрения всегда проверяйте несколько реальных URL вручную.
Смешали noindex и canonical на другой URL
Если страница закрыта от индексации, но canonical указывает на другой адрес, поисковик может выбрать собственную логику обработки. Для дублей это нормально, но для архивов и служебных страниц лучше держать правила простыми и предсказуемыми.
Безопасность и производительность
Если вы закрываете много страниц кодом, не вешайте тяжёлые проверки на каждый запрос. Условие должно быть дешёвым: проверка типа записи, ID или шаблона. Не делайте лишних запросов к базе в wp_head.
И ещё один практический момент: не храните список закрытых URL в коде, если редакторы часто меняют структуру сайта. Лучше вынести логику в понятное правило по типу записи или использовать SEO-плагин, где это можно сопровождать без деплоя.
Когда вместо noindex нужен редирект или удаление
Если страница устарела окончательно и у неё есть очевидная замена, 301 обычно полезнее, чем вечный noindex. Так вы сохраняете переходы и не держите в индексе лишний URL. Если замены нет, а контент не нужен, можно удалить страницу и отдать 410 Gone — это честный сигнал, что адрес больше не существует.
Практическое правило простое: noindex — для временно ненужных или архивных страниц, 301 — для переезда, 410 — для окончательно удалённых URL без замены.