robots.txt и noindex в WordPress: как закрыть лишнее от индексации

robots.txt и noindex в WordPress: как закрыть лишнее от индексации

Кратко: robots.txt — это текстовый файл в корне сайта, который разрешает или запрещает поисковым роботам обходить те или иные адреса. Директива noindex — это метатег на конкретной странице, который просит поисковик не показывать её в результатах. Это два разных инструмента: robots.txt управляет обходом (crawl), noindex управляет индексацией. Главное правило новичка — никогда не закрывать в robots.txt то, что вы исключаете через noindex: если робот не сможет прочитать страницу, он не увидит и метатег. В WordPress robots.txt генерируется автоматически, поэтому его удобно править фильтром robots_txt, а noindex добавляют хуком wp_robots — для поиска, пагинации, архивов и служебных страниц. Ниже — синтаксис директив, готовые сниппеты на PHP, скрипт проверки на JavaScript, сравнительная таблица и разбор типичных ошибок.

Что такое robots.txt и зачем он нужен сайту

robots.txt — это обычный текстовый файл, который лежит в корне сайта по адресу https://вашсайт.ру/robots.txt. Поисковые роботы первым делом запрашивают его и читают правила: какие разделы можно обходить, а какие трогать не нужно. Это не команда, а вежливая просьба, которую соблюдают все крупные поисковики — Яндекс, Google и другие. Злоумышленник или парсер правила проигнорирует, поэтому robots.txt — инструмент для поисковых роботов, а не защита от взлома.

Зачем вообще что-то закрывать? Причин три. Первая — технический мусор: страницы поиска, корзины, результаты фильтров, служебные адреса. Их не нужно тратить драгоценный лимит обхода, ведь робот тратит на них время, а пользы для выдачи ноль. Вторая — дубли: один и тот же контент доступен по нескольким адресам, и поисковику нужно помочь выбрать главный. Третья — нагрузка: если разрешить обход бесконечных календарей и параметров, робот может «застрять» и нагружать сервер тысячи раз в сутки.

Важно понимать разницу между «не обходить» и «не показывать». robots.txt говорит роботу, куда не ходить. Если адрес закрыт в robots.txt, робот не увидит содержимое страницы — но при этом иногда всё равно покажет её в выдаче, взяв заголовок из внешних ссылок. Чтобы страница гарантированно не попала в результаты поиска, нужен не robots.txt, а метатег noindex. Об этом различии мы подробно поговорим ниже — это самая частая точка ошибок у новичков.

Для WordPress есть отдельная особенность: файла robots.txt на диске обычно нет. Ядро отдаёт его «на лету», генерируя содержимое на PHP. Поэтому не получится просто открыть файл на FTP и отредактировать — правильный путь лежит через фильтр, встроенный в WordPress.

Синтаксис robots.txt: директивы, которые нужно знать

Формат файла простой: каждая строка — это директива, а имя директивы отделяется от значения двоеточием. Регистр в именах директив не важен, а комментарии начинаются с символа решётки. Ниже — рабочий пример, в котором собраны все директивы, которые реально нужны на обычном сайте на WordPress.

# robots.txt для сайта на WordPress

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php

Disallow: /search
Disallow: /*?s=
Disallow: /*&preview=
Disallow: /?add-to-cart=

User-agent: Yandex
Disallow: /cart/
Disallow: /checkout/
Clean-param: utm_source&utm_medium&utm_campaign

Sitemap: https://delai-sait.ru/sitemap_index.xml

Разберём ключевые директивы. User-agent задаёт, к какому роботу относятся следующие за ним правила. Звёздочка означает «все роботы», а строка User-agent: Yandex открывает отдельный блок только для Яндекса. Disallow запрещает обход, а Allow разрешает его — при конфликте правил побеждает более длинное совпадение, поэтому Allow: /wp-admin/admin-ajax.php перекрывает общий запрет на /wp-admin/.

Отдельно стоит сказать про Clean-param — директиву Яндекса, которая склеивает адреса с разными UTM-метками в один. Это спасает от дублей, когда рекламные ссылки добавляют к странице хвосты вида ?utm_source=vk. Директива Sitemap указывает на карту сайта, и её удобно оставить поисковикам как подсказку. Больше о карте сайта и её настройке — в отдельной статье про XML-карту сайта (sitemap) для Яндекса и Google.

Ещё одна директива, которую часто ищут новички, — Host. Раньше она помогала Яндексу выбрать главное зеркало, но сейчас устарела и в новых файлах не нужна: главное зеркало подтверждается в Яндекс Вебмастере. Символ звёздочки в путях тоже нужно использовать осторожно: маска Disallow: /*?* закроет вообще все адреса с параметрами, включая полезные, а не только мусорные.

И маленькая, но важная деталь: файл должен лежать строго в корне и быть доступен по HTTPS без редиректов. Если робот получит ошибку или переадресацию, он может вообще проигнорировать ваши правила.

robots.txt в WordPress: виртуальный файл и фильтр robots_txt

Поскольку WordPress отдаёт robots.txt динамически, редактировать его нужно кодом. Для этого ядро предусмотрело фильтр robots_txt, который передаёт готовый текст файла в вашу функцию. Небольшое предупреждение: не добавляйте бесполезные строки, если правила уже сгенерированы правильно, — лучше дописывать только то, чего не хватает. Ниже — сниппет, который закрывает текстовый файл целиком и формирует своё содержимое.

<?php
/**
 * Полностью берём robots.txt под контроль.
 * Код можно добавить в functions.php дочерней темы или в свой плагин.
 */
add_filter( 'robots_txt', 'ds_custom_robots_txt', 20 );

function ds_custom_robots_txt( $output ) {
    $lines = array(
        'User-agent: *',
        'Disallow: /wp-admin/',
        'Allow: /wp-admin/admin-ajax.php',
        'Disallow: /search',
        'Disallow: /*?s=',
        'Disallow: /?add-to-cart=',
        '',
        'Sitemap: ' . home_url( '/sitemap_index.xml' ),
    );

    // Каждую строку завершаем переводом строки.
    return implode( "\n", $lines ) . "\n";
}

Хук robots_txt — это классический пример работы фильтров: ваша функция получает текущее значение и возвращает изменённое. Если хотите не заменять файл целиком, а лишь дополнить сгенерированный вариант, просто верните $output . "\nDisallow: /new-path/". Всю механику фильтров и экшенов мы разбирали в статье про хуки actions и filters в WordPress.

Есть и второй, более простой путь — вообще не трогать код, а включить генерацию robots.txt в SEO-плагине. Rank Math и Yoast умеют собирать файл из настроек с живым редактором прямо в админке: вы видите текстовое поле, редактируете его и сохраняете. Для сайта без собственного кода это часто удобнее и безопаснее, чем сниппет. Как включить редактор robots.txt в популярных плагинах, показано в разборе про настройку SEO-плагина Rank Math и Yoast.

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

Директива noindex и её отличие от Disallow

noindex — это метатег в HTML-коде страницы, который говорит роботу: «страницу можно прочитать, но в результатах поиска не показывай». Самый простой вариант выглядит так:

<meta name="robots" content="noindex, follow">

Тег добавляется в раздел <head> страницы. Атрибут follow означает, что робот может не показывать страницу в выдаче, но по ссылкам с неё ходить разрешено, и вес он передаёт дальше. Если поставить nofollow, ссылки с этой страницы тоже перестанут учитываться. Для большинства служебных страниц лучше noindex, follow: страниц не видно в выдаче, но внутренняя перелинковка не рушится.

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

Есть и третья, менее известная форма noindex — HTTP-заголовок X-Robots-Tag. Его применяют для файлов и данных, где нельзя вставить HTML-метатег: PDF, изображения, документы и ответы сервера. В WordPress такой заголовок удобно отдавать через модуль mod_headers на уровне сервера, а в коде — фильтром на отправляемые заголовки. Для обычных HTML-страниц этот способ избыточен, там достаточно метатега.

И ещё один частый вопрос: работает ли noindex для уже проиндексированных страниц? Да, но не мгновенно. Робот должен снова посетить страницу, увидеть метатег и исключить её из индекса. Ускорить это можно, переобойдя URL в панели вебмастера. Быстрее, чем ждать, но всё равно не за одну минуту.

robots.txt, noindex, canonical и nofollow: сравнительная таблица

Новички часто путают четыре инструмента, которые внешне решают «одну задачу». На самом деле у каждого своя роль, и путаница приводит к ошибкам, из-за которых из индекса пропадают нужные страницы. Разложим их по полочкам.

Инструмент Что делает Где задаётся Когда использовать
Disallow (robots.txt) Запрещает обход страницы Файл robots.txt Технический мусор, служебные разделы, мешающие обходу
noindex Запрещает показ страницы в выдаче Метатег или HTTP-заголовок Уже проиндексированные страницы, которые нужно вывести из поиска
canonical Указывает главный адрес среди дублей Метатег <link> Один контент доступен по нескольким URL
nofollow Запрещает учитывать ссылки Метатег или атрибут rel Ссылки, за которые сайт не отвечает

Как читать эту таблицу на практике. Если мусорная страница ещё не в индексе, а обход её только тратит лимит — хватит Disallow. Если страница уже в поиске, но показывать её не нужно — ставьте noindex и уберите её из robots.txt. Если один товар открывается по нескольким адресам с фильтрами — этим занимается canonical, а не robots.txt. А nofollow сегодня чаще применяют точечно, к отдельным внешним ссылкам, а не ко всей странице целиком.

Есть и правило сочетания: не нужно скармливать роботу противоречивые сигналы. Классическая ошибка — закрыть раздел в robots.txt и одновременно поставить там noindex. Робот страницу не скачает, метатег не увидит и, если страница уже в индексе, может оставить её там. Второе противоречие — Disallow на важный раздел для robots при одновременном noindex: Google в такой ситуации медленнее исключает адрес из индекса, чем если бы он мог прочитать тег.

Как добавить noindex в WordPress: рабочие способы с кодом

В WordPress есть удобный хук wp_robots, который собирает содержимое метатега robots. Это правильный инструмент: не нужно вручную вставлять теги в header.php и следить за дублированием. Хук принимает массив директив, и достаточно вернуть его с нужными ключами. Ниже — пример, который ставит noindex на страницы поиска, архивов даты и результатов пагинации.

<?php
/**
 * Управляем метатегом robots через хук wp_robots.
 */
add_filter( 'wp_robots', 'ds_custom_wp_robots' );

function ds_custom_wp_robots( $robots ) {
    // Страницы поиска.
    if ( is_search() ) {
        $robots['noindex'] = true;
        $robots['follow']  = true;
    }

    // Пагинация: клиентские запросы вида ?paged=2 и /page/2.
    if ( is_paged() ) {
        $robots['noindex'] = true;
        $robots['follow']  = true;
    }

    // Архивы по датам (убирают тонкие страницы из индекса).
    if ( is_date() ) {
        $robots['noindex'] = true;
        $robots['follow']  = true;
    }

    return $robots;
}

Обратите внимание: массив работает как переключатель. Установив $robots['noindex'] = true, вы добавляете директиву, а $robots['index'] при этом лучше снять — иначе метатег получится противоречивым. Хук вызывается только на фронтенде и гарантирует, что тег попадёт в <head> каждого подходящего шаблона, включая кастомные.

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

<?php
/**
 * Закрываем от индексации одну служебную рубрику и метки.
 * 12 — пример ID рубрики, которую не нужно показывать в поиске.
 */
add_filter( 'wp_robots', 'ds_noindex_category' );

function ds_noindex_category( $robots ) {
    if ( is_category( 12 ) || is_tag() ) {
        $robots['noindex'] = true;
        $robots['follow']  = true;
    }

    return $robots;
}

Третий способ — подключить noindex на уровне SEO-плагина. В карточке записи, рубрики, страницы или архива Rank Math и Yoast дают переключатель «Advanced» → «Robots Meta», где ставится галочка noindex для выбранного типа. Это удобно, когда редактор сам решает, прятать ли конкретную страницу от поиска. Четвёртый способ — вывод тега вручную в header.php дочерней темы по условию, но он нужен редко: без дочерней темы правки снимутся при обновлении. Если вы ещё не сделали дочернюю тему, поможет гайд про дочернюю тему WordPress, а базовые приёмы и сниппеты собраны в подборке про полезные сниппеты для functions.php.

Что закрывать в WordPress: типовой robots.txt и правила noindex

Понимая инструменты, легко собрать рабочую схему. Она состоит из двух частей: то, что закрываем в robots.txt (обход), и то, что помечаем noindex (индексация). Начнём с robots.txt — ниже готовый вариант для типового сайта на WordPress.

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /search
Disallow: /*?s=
Disallow: /*&preview=
Disallow: /?add-to-cart=
Disallow: /*?orderby=
Disallow: /*?filter_
Disallow: /feed/
Disallow: /trackback/

Sitemap: https://delai-sait.ru/sitemap_index.xml

Этот набор закрывает то, что роботу обходить бесполезно: панель администратора (кроме admin-ajax), страницы внутреннего поиска, предпросмотр, корзину, сортировку каталога, бесконечные фильтры и RSS-ленты. Важно не перестараться: CSS- и JS-файлы закрывать нельзя, иначе робот не сможет корректно оценить отображение страницы и решит, что она неудобна на мобильных.

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

Теперь про noindex. Лучше всего пометить тегом те страницы, которые должны существовать на сайте, но быть невидимыми в поиске: страницы благодарности после заказа, внутренние тестовые страницы, страницы с тонким контентом, архивы по датам, страницы авторов с одной записью, а также результаты поиска и пагинацию. Для интернет-магазинов это ещё и страницы корзины и оформления заказа. Про то, как устроены адреса и перелинковка в WordPress, подробно рассказано в статье про настройку ЧПУ и постоянных ссылок.

И важное замечание про дубли. Если у вас есть кастомные типы записей и таксономии, у них могут появляться адреса-дубли — например, архив термина и страница категории с тем же контентом. Прежде чем закрывать такие страницы, проверьте, не создаёт ли их ваш код. О правильном построении архивов читайте в разборе про кастомные типы записей и таксономии. А если сайт отдаёт данные через API, стоит убедиться, что служебные эндпоинты не попадают в выдачу — механика описана в статье про REST API WordPress.

Частые ошибки при настройке robots.txt и noindex

Даже опытные разработчики иногда закрывают лишнее. Вот список ошибок, которые чаще всего приводят к выпадению сайта из поиска.

  • Закрыт важный раздел целиком. Строка Disallow: / или Disallow: /* закрывает весь сайт от обхода. Проверьте файл целиком, а не только свои строки.
  • noindex и Disallow вместе. Самый частый конфликт: робот не скачает страницу и не увидит метатег, и адрес останется в индексе дольше, чем должен.
  • noindex на ключевой странице. Иногда галочку в SEO-плагине ставят у всего раздела и забывают снять с главной или коммерческой страницы. Регулярно проверяйте важные URL в вебмастере.
  • Закрытие CSS и JS. Робот должен уметь отрисовать страницу. Закрытые стили и скрипты портят оценку удобства и могут ухудшить позиции.
  • Маска /*?* бездумно. Она закрывает все адреса с параметрами, включая полезные функции, которые используют GET-параметры.
  • noindex вместо nofollow и наоборот. Директива без follow рубит передачу веса по ссылкам. Для большинства страниц нужен именно noindex, follow.
  • Робots.txt закрыт паролем или отдаёт редирект. Если файл недоступен, робот считает, что правил нет, и обходит всё подряд. Проверьте доступность по HTTPS.
  • Забыли про карту сайта. Закрытые в robots.txt адреса всё равно попадают в sitemap и сбивают робота с толку. Следите, чтобы два инструмента не противоречили друг другу.

Отдельно стоит сказать про производительность и кэш. Если вы правите robots.txt или метатеги, не забудьте сбросить кэш страниц и плагины кэширования: некоторые отдают старый HTML и ваши изменения «не видны» роботу. О том, как это устроено, читайте в статье про кэширование WordPress. И держите в голове, что любые правки в functions.php удобнее тестировать на дочерней теме или на локальной копии — подробнее об этом в материале про 10 настроек безопасности WordPress.

Как проверить robots.txt и noindex: чек-лист и скрипт на JavaScript

Настроили — проверьте. Ручной чек-лист занимает пару минут: откройте https://вашсайт.ру/robots.txt и убедитесь, что файл отдаётся с кодом 200 и виден как текст; затем откройте пару важных страниц и посмотрите в исходном коде, нет ли у них noindex; наконец, проверьте в Яндекс Вебмастере и Google Search Console раздел «Диагностика» или «Проверка URL».

Чтобы делать это быстрее и сразу по множеству адресов, удобно написать небольшой скрипт на JavaScript и запустить его в Node.js. Он скачает robots.txt, а затем проверит, в каком статусе индексации находятся ключевые страницы.

// check-robots.mjs — быстрая проверка robots.txt и метатегов
const SITE = 'https://delai-sait.ru';
const PAGES = ['/', '/blog/', '/uslugi/'];

// 1. Читаем robots.txt и ищем строки, закрывающие весь сайт.
const robots = await (await fetch(SITE + '/robots.txt')).text();
console.log('robots.txt получен, строк:', robots.split('\n').length);
if (/Disallow:\s*\/\s*$/m.test(robots)) {
    console.log('ВНИМАНИЕ: сайт закрыт от обхода целиком!');
}

// 2. Проверяем метатег robots на важных страницах.
for (const path of PAGES) {
    const html = await (await fetch(SITE + path)).text();
    const meta = (html.match(/<meta name="robots" content="([^"]+)">/i) || [])[1] || '(нет)';
    const bad = /noindex/i.test(meta);
    console.log(path, '→', meta, bad ? '❌ закрыт от индекса!' : '✅ открыт');
}

Такой скрипт можно запускать вручную после правок или встроить в процесс выкладки. Он ловит две самые опасные ошибки: полный запрет обхода в robots.txt и случайный noindex на важной странице. Для регулярного контроля добавьте проверку в мониторинг — тогда проблема не застанет врасплох. Похожие технические задачи автоматизации разбираются в статье про REST API WordPress, если нужно проверять данные прямо из админки.

TimeWeb

Частые вопросы о robots.txt и noindex в WordPress

Чем robots.txt отличается от noindex?

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

Как создать robots.txt в WordPress, если файла нет?

WordPress генерирует robots.txt динамически, поэтому файла на диске обычно нет. Добавьте своё содержимое фильтром robots_txt: ваша функция получит текст файла и вернёт изменённый вариант. Альтернатива — включить редактор robots.txt в SEO-плагине Rank Math или Yoast и править содержимое прямо в админке без кода.

Как добавить noindex в WordPress без плагина?

Используйте хук wp_robots. В функции-обработчике проверьте нужное условие — например, is_search() или is_paged() — и установите $robots['noindex'] = true вместе с $robots['follow'] = true. WordPress сам добавит корректный метатег в <head> всех подходящих шаблонов, без ручной правки header.php.

Почему страница с noindex всё равно в поиске?

Роботу нужно время: он должен снова посетить страницу и увидеть метатег, и только потом исключает её из индекса. Это не мгновенный процесс — обычно дни или недели. Ускорить можно, переобойдя адрес в панели Яндекс Вебмастера или Google Search Console. Проверьте также, что страница не закрыта в robots.txt — иначе робот её не прочитает.

Что нельзя закрывать в robots.txt?

Нельзя закрывать адреса, которые должны быть в поиске, а также CSS- и JS-файлы темы: без них робот не сможет корректно отрисовать страницу. Не стоит закрывать разделы категорий, изображения и служебные файлы, нужные для рендеринга. Если страница должна передавать вес по ссылкам или показываться в выдаче — оставьте её открытой для обхода.

Как проверить, что robots.txt настроен правильно?

Откройте https://вашсайт.ру/robots.txt и убедитесь, что файл отдаётся с кодом 200 и отображается как текст. Проверьте важные страницы на отсутствие случайного noindex в исходном коде. Затем посмотрите раздел диагностики в Яндекс Вебмастере и Google Search Console. Для массовой проверки удобно написать небольшой скрипт на JavaScript, который скачает robots.txt и метатеги всех ключевых адресов.

Вывод

robots.txt и noindex — это два разных инструмента, и путать их нельзя. Первый управляет обходом: что роботу скачивать, а что нет. Второй управляет индексацией: что показывать в выдаче, а что спрятать. Простое правило, которое снимает 90% проблем: технический мусор закрывайте в robots.txt, а страницы, которые уже в индексе и не должны там быть, помечайте noindex и держите открытыми для обхода.

В WordPress всё делается кодом или плагином. Фильтр robots_txt даёт полный контроль над файлом, хук wp_robots — над метатегом, а Rank Math и Yoast закрывают обе задачи без единой строки сниппета. Главное — не создавать противоречивых сигналов, не закрывать CSS и JS и периодически проверять важные адреса в вебмастере.

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

Clearfy

Поделиться:
Telegram ВКонтакте