На живом сайте чаще всего нужно закрыть не весь проект, а несколько конкретных URL: страницу поиска, архивы с дублями, служебные разделы, тестовые материалы, внутренние страницы благодарности или результаты фильтров. Делать это через один общий плагин не всегда удобно: где-то нужен noindex только для части контента, где-то — запрет в robots.txt, а где-то достаточно убрать страницу из карты сайта и оставить доступ по прямой ссылке.
Ниже — рабочий сценарий без выдуманных хуков и без магии. Разберём, как диагностировать проблему, чем отличаются способы закрытия от индексации и как проверить, что поисковики получили именно тот сигнал, который вы планировали.
Когда проблема действительно в индексации, а не в дублях
Перед правкой кода полезно понять, что именно не так. Иногда страница уже исключена из индекса, но продолжает висеть в отчёте как «Просканировано, но не проиндексировано». Иногда наоборот: URL открыт, но поисковик выбирает канонический адрес и индексирует не ту версию.
Что проверить в первую очередь
- Есть ли у страницы уникальный контент или это технический экран без ценности для поиска.
- Появляется ли URL в XML-карте сайта.
- Не создаёт ли WordPress несколько версий одного и того же адреса: с параметрами, со слешем и без, с пагинацией, с сортировкой.
- Нет ли уже
noindexв мета-тегах или заголовкеX-Robots-Tag. - Не закрыт ли URL случайно через
robots.txt, если вам нужен только запрет индексации, а не запрет обхода.
Важно различать два уровня: запрет индексации и запрет сканирования. Если вы закрываете URL в robots.txt, поисковик может не увидеть страницу и не прочитать noindex внутри HTML. Для точечного управления чаще безопаснее оставить обход доступным и отдать директиву noindex, follow.
Какой способ выбрать: мета-тег, заголовок или robots.txt
Для WordPress в реальных проектах обычно хватает трёх подходов. У каждого свой компромисс.
| Способ | Когда подходит | Плюс | Минус |
|---|---|---|---|
Мета-тег noindex | Отдельные страницы, записи, архивы | Понятный сигнал для поисковиков | Нужно, чтобы страница была доступна для обхода |
Заголовок X-Robots-Tag | PDF, файлы, нестандартные ответы, служебные URL | Работает не только для HTML | Чуть сложнее отлаживать |
robots.txt | Грубое ограничение обхода | Быстро и просто | Не всегда решает задачу индексации |
Если задача точечная, я бы начинал с noindex и только потом смотрел на robots.txt. Для служебных файлов и выгрузок — заголовок X-Robots-Tag. Для массового закрытия технических разделов — уже комбинация правил.
Пошаговое решение через functions.php или мини-плагин
Надёжнее всего вынести код в мини-плагин или в functions.php дочерней темы. Если тема обновляется часто, мини-плагин безопаснее: правило не потеряется при смене шаблона.
1. Добавляем мета-тег noindex для выбранных страниц
Ниже пример, который закрывает от индексации конкретный список страниц по ID. Это удобно для страницы «Спасибо за заявку», политики конфиденциальности в тестовой среде, внутренних лендингов и других адресов, которые не должны попадать в поиск.
<?php
add_action('wp_head', function () {
if (is_admin()) {
return;
}
$noindex_ids = array(12, 34, 56);
if (is_page($noindex_ids)) {
echo '<meta name="robots" content="noindex, follow">' . "\n";
}
});Этот вариант прост, но у него есть ограничение: он работает только для HTML-страниц и только там, где WordPress выводит wp_head(). Если шаблон страницы его не вызывает, мета-тег не появится.
2. Закрываем архивы, поиск и служебные страницы по условию
Если нужно убрать из индекса архивы автора, внутренний поиск или страницы вложений, лучше использовать условные теги WordPress. Это уже ближе к реальной технической оптимизации, а не к ручной правке каждого URL.
<?php
add_action('wp_head', function () {
if (is_admin()) {
return;
}
if (is_search() || is_author() || is_attachment()) {
echo '<meta name="robots" content="noindex, follow">' . "\n";
}
});Для вложений это особенно полезно: у медиафайлов часто есть отдельные страницы-обёртки без ценности для поиска. Но если у вас на таких страницах есть трафик или они используются как посадочные, закрывать их нужно осознанно.
3. Для файлов и нестандартных ответов используем X-Robots-Tag
Если нужно закрыть от индексации не HTML, а, например, PDF-файл или служебный endpoint, мета-тег не поможет. В таком случае можно отправить HTTP-заголовок.
<?php
add_action('send_headers', function () {
if (is_admin()) {
return;
}
if (is_attachment()) {
header('X-Robots-Tag: noindex, follow', true);
}
});Здесь важно не переборщить с логикой. Если вы ставите заголовок на все вложения, убедитесь, что это действительно нужно. Иногда лучше закрыть только медиа-страницы, а сами файлы оставить доступными.
Как убрать URL из карты сайта WordPress
Даже если страница закрыта через noindex, она может продолжать попадать в XML-карту сайта. Это не ошибка, но для служебных URL лучше убрать их из sitemap, чтобы не отправлять поисковику лишние сигналы.
В стандартном WordPress карта сайта генерируется ядром. Если вам нужно исключить конкретные страницы, проще всего фильтровать список URL на уровне генерации. Ниже пример для записей и страниц, которые должны исчезнуть из sitemap.
<?php
add_filter('wp_sitemaps_posts_query_args', function ($args, $post_type) {
if ($post_type === 'page') {
$args['post__not_in'] = array(12, 34, 56);
}
return $args;
}, 10, 2);Если у вас sitemap генерирует SEO-плагин, логика будет другой. Тогда нужно использовать его настройки или фильтры, а не код ядра. Не смешивайте оба подхода одновременно, иначе потом сложно понять, почему URL всё ещё присутствует в карте сайта.
Проверка результата после внедрения
После правки не ограничивайтесь открытием страницы в браузере. Нужно проверить именно сигналы для поисковика.
- Откройте страницу в режиме инкогнито и посмотрите исходный код: должен быть
<meta name="robots" content="noindex, follow">. - Проверьте заголовки ответа через DevTools или
curl -I https://example.com/page/, если используетеX-Robots-Tag. - Убедитесь, что URL исчез из XML-карты сайта или больше не генерируется в ней.
- В Google Search Console отправьте проверку URL и посмотрите, видит ли робот директиву
noindex. - Если страница уже была в индексе, дождитесь повторного обхода: мгновенного эффекта не будет.
Пример быстрой проверки заголовков:
curl -I https://example.com/thank-you/В ответе ищите строку X-Robots-Tag: noindex, follow, если вы использовали именно этот способ.
Частые ошибки и как их исправить
Закрыли страницу в robots.txt и ждёте удаления из индекса
Это частая ошибка. Если робот не может зайти на страницу, он может не увидеть noindex. Для точечного удаления из индекса лучше не блокировать обход, а отдать явную директиву.
Ставят noindex только в визуальном шаблоне
Если тема не вызывает wp_head() или страница рендерится нестандартно, мета-тег не появится. Проверяйте исходный HTML, а не только внешний вид страницы.
Закрывают важные страницы по шаблону
Например, добавляют is_page() без списка ID и случайно закрывают весь раздел. Перед публикацией кода проверьте, какие именно условные теги срабатывают на реальных URL.
Оставляют URL в sitemap
Если страница закрыта от индексации, но продолжает быть в карте сайта, это создаёт лишний шум. Для служебных страниц лучше убрать их и из sitemap, и из внутренних ссылок.
Путают noindex и canonical
canonical помогает подсказать основную версию страницы, но не заменяет noindex. Если задача — исключить URL из поиска, одного canonical может быть недостаточно.
Как не сломать производительность и безопасность
Технические правки для индексации обычно лёгкие, но есть несколько практических моментов. Не вставляйте код в случайный плагин с неизвестным происхождением. Лучше использовать собственный мини-плагин или дочернюю тему. Так вы не потеряете правки при обновлении и не будете зависеть от чужой логики.
Если вы закрываете от индексации страницы с формами, личными кабинетами или внутренними документами, не полагайтесь только на noindex. Для действительно приватных разделов нужен контроль доступа: авторизация, права пользователя, токены или серверные ограничения. noindex — это сигнал для поисковиков, а не защита от просмотра.
Для больших сайтов полезно вести короткий список правил: что закрыто, почему закрыто и где это реализовано. Через месяц это экономит время лучше любого «универсального» SEO-плагина.
Когда лучше использовать плагин, а когда код
Если задача разовая и нужна редактору без доступа к коду, плагин может быть удобнее. Но если нужно закрыть несколько технических URL, код обычно прозрачнее: видно, что именно закрыто, и проще отлаживать. В проектах, где уже используется SEO-плагин, не дублируйте его функции вручную без необходимости — сначала проверьте, нет ли нужной настройки в интерфейсе.
Если нужен более широкий набор инструментов для чистки дублей, служебных страниц и технической оптимизации, иногда удобнее собрать это в одном решении, чем держать десяток разрозненных сниппетов. Но даже тогда полезно понимать, как работает базовая логика noindex, robots.txt и sitemap: без этого легко закрыть не тот URL.