На живом WordPress-сайте поисковики часто тратят краулинговый бюджет на URL, которые не должны попадать в индекс: /wp-admin/admin-ajax.php, служебные endpoints REST API, страницы поиска, архивы с дублями и технические адреса плагинов. Проблема обычно не в одном «плохом» URL, а в том, что сайт сам отдаёт слишком много мусорных точек входа для индексации.
Ниже разберём, что именно закрывать, чем отличается запрет индексации от блокировки доступа, и как проверить, что решение не сломало фронтенд, формы и интеграции.
Когда служебные URL становятся проблемой
Если в отчётах Search Console появляются страницы без полезного контента, а в логах заметно много запросов к admin-ajax.php или REST API, это уже повод проверить настройки. Особенно часто проблема всплывает после установки SEO-плагина, кастомной темы или набора плагинов, которые добавляют свои публичные endpoints.
Типичные симптомы
- в индексе есть URL с параметрами, которые не несут ценности для пользователя;
- поисковик видит служебные ответы JSON или пустые страницы;
- в выдаче появляются дубли архивов, страниц поиска и пагинации;
- робот тратит время на URL, которые не должны ранжироваться;
- в отчётах по покрытию много «Просканировано, но не проиндексировано».
Что именно не стоит закрывать без проверки
Не все служебные адреса одинаковы. REST API нужен для блоков редактора, мобильных приложений, интеграций и некоторых плагинов. admin-ajax.php используется для AJAX-запросов на фронтенде. Если просто запретить их в robots.txt, сайт может продолжить работать, но поисковик не перестанет видеть URL как отдельные ресурсы, а некоторые интеграции могут начать вести себя нестабильно.
Диагностика: какие URL реально индексируются
Сначала нужно понять, какие адреса уже попали в индекс и откуда они берутся. Не стоит закрывать всё подряд: иногда проблема в одном плагине, который генерирует лишние ссылки в HTML или sitemap.
- Проверьте отчёт «Страницы» в Google Search Console.
- Сделайте поиск по сайту в Google с оператором
site:example.comи добавьте подозрительные фрагменты URL. - Посмотрите исходный код страниц: нет ли ссылок на служебные endpoints в меню, футере, JSON-LD или виджетах.
- Проверьте sitemap.xml: туда не должны попадать технические URL.
- Если есть доступ к логам, посмотрите, какие служебные адреса чаще всего запрашивает бот.
Отдельно проверьте, не создаёт ли тема или плагин страницы поиска по внутренним параметрам, например ?s=, ?orderby=, ?replytocom=. Это частая причина дублей, и закрывать её нужно не robots.txt, а настройками SEO и каноникалами.
Что лучше: robots.txt, noindex или заголовки
Для разных задач нужны разные инструменты. Если смешать их, можно получить либо лишнюю индексацию, либо недоступные для робота ресурсы, которые всё равно будут светиться в результатах.
| Подход | Когда использовать | Плюс | Минус |
|---|---|---|---|
| robots.txt | Для явного запрета обхода технических путей | Просто и быстро | Не гарантирует удаление уже известных URL из индекса |
| meta robots noindex | Для страниц, которые должны быть доступны, но не индексироваться | Контроль на уровне страницы | Нужно, чтобы робот мог страницу обойти |
| X-Robots-Tag | Для JSON, файлов и ответов, где нет HTML | Подходит для API и служебных ответов | Требует настройки на сервере или в коде |
Пошаговое решение
1. Закройте служебные URL от индексации, а не от работы сайта
Если задача — убрать из индекса технические адреса, но не ломать фронтенд, используйте X-Robots-Tag для ответов, которые не должны индексироваться. Для WordPress это можно сделать через PHP, если у вас есть доступ к теме или небольшому MU-плагину.
<?php
add_action('send_headers', function () {
if (is_admin()) {
return;
}
$uri = $_SERVER['REQUEST_URI'] ?? '';
if (strpos($uri, '/wp-json/') !== false || strpos($uri, 'admin-ajax.php') !== false) {
header('X-Robots-Tag: noindex, nofollow', true);
}
});Этот вариант не блокирует запрос, а только сообщает поисковику не индексировать ответ. Для JSON и AJAX это обычно безопаснее, чем грубый запрет через robots.txt.
2. Уберите лишние URL из robots.txt
Если у вас есть доступ к виртуальному robots.txt через WordPress или сервер, добавьте только те пути, которые действительно не должны обходиться. Не стоит закрывать всё подряд, особенно если не уверены, как это повлияет на плагины.
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /wp-json/
Disallow: /search/
Disallow: /*?s=
Disallow: /*?replytocom=Обратите внимание на Allow: /wp-admin/admin-ajax.php. Это важно: многие темы и плагины используют AJAX на фронтенде, и полная блокировка может сломать фильтры, формы или динамические элементы.
3. Закройте архивы и параметры, которые создают дубли
Если проблема не в служебных endpoints, а в дублях контента, используйте настройки SEO-плагина или канонические URL. Для архивов авторов, дат и внутренних поисков часто достаточно noindex, follow. Это лучше, чем блокировать их в robots.txt, потому что робот сможет увидеть каноникал и понять структуру сайта.
Если вы правите кодом, для отдельных шаблонов можно добавить мета-тег через wp_head:
<?php
add_action('wp_head', function () {
if (is_search() || is_author() || is_date()) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
});Это не универсальная замена SEO-плагину, но для узкой задачи работает предсказуемо.
4. Проверьте sitemap и внутренние ссылки
Даже если URL закрыт от индексации, он может продолжать попадать в sitemap или быть связан внутренними ссылками. Это лишний шум для поисковика. Уберите технические адреса из карты сайта, а в шаблонах и виджетах проверьте, не выводятся ли ссылки на поиск, AJAX-эндпоинты или служебные страницы.
Как проверить, что решение сработало
Проверка нужна не только в браузере, но и на уровне ответа сервера. Иначе можно получить ситуацию, когда в коде всё выглядит правильно, а робот всё равно видит индексируемый ресурс.
- Откройте URL в браузере и проверьте исходный HTML или JSON-ответ.
- В DevTools посмотрите заголовки ответа: должен быть
X-Robots-Tag: noindex, nofollow, если вы его добавляли. - Проверьте robots.txt через инструмент тестирования в Search Console.
- Убедитесь, что URL больше не попадает в sitemap.
- Через несколько дней повторно проверьте статус страницы в Search Console.
Если URL уже был в индексе, мгновенного эффекта не будет. Поисковику нужно время, чтобы переобойти страницу и обновить статус. Это нормальное поведение, а не ошибка настройки.
Частые ошибки и как их исправить
Закрыли admin-ajax.php в robots.txt и сломали фронтенд
Некоторые темы используют AJAX для фильтров, подгрузки контента и отправки форм. Если полностью запретить обход, функциональность может остаться, но диагностика и интеграции станут нестабильными. Исправление простое: разрешите admin-ajax.php и, если нужно, ставьте X-Robots-Tag только на ответы, которые не должны индексироваться.
Поставили noindex на страницу, которую нужно оставить доступной для пользователей
Это частая ошибка с поиском, пагинацией и архивами. Если страница нужна пользователю, но не должна ранжироваться, используйте noindex, follow. Если страница вообще не нужна, лучше удалить её, вернуть 404 или 410, а не маскировать настройками.
Запретили всё в robots.txt и не убрали ссылки из шаблонов
Такой подход не решает проблему дублей, а только скрывает её от обхода. Поисковик может продолжать знать о URL из внешних ссылок или старых обходов. Сначала уберите источник ссылок, затем настройте индексацию.
Путают блокировку и индексацию
Robots.txt запрещает обход, но не гарантирует удаление из индекса. Noindex требует, чтобы робот увидел страницу. Для JSON и API чаще подходит заголовок X-Robots-Tag. Если перепутать методы, результат будет непредсказуемым.
Практические советы по безопасности и производительности
Если вы добавляете правила в тему, лучше вынести их в MU-плагин или отдельный мини-плагин. Так они не потеряются при обновлении темы и не будут зависеть от шаблона. Для сайтов с высокой нагрузкой полезно ограничить логику проверок простыми условиями по URI, без тяжёлых запросов к базе.
Ещё один практичный момент: не закрывайте от индексации всё, что выглядит «техническим» только по названию. Некоторые endpoints REST API используются редактором блоков и внешними интеграциями. Перед изменениями проверьте, какие URL реально вызываются в браузере и в логах.
Если у вас уже есть SEO-плагин, сначала проверьте его настройки. Часто нужные опции уже есть: noindex для архивов, управление robots.txt, исключение параметров URL и очистка дублей. Кастомный код имеет смысл только там, где плагин не закрывает конкретный сценарий.
Для сайтов, где нужно одновременно чистить дубли, управлять мета-тегами и убирать технический мусор, удобно использовать специализированные SEO-инструменты вроде Clearfy Pro: он помогает централизованно отключать лишние элементы и закрывать типовые дубли без ручного редактирования шаблонов. Но даже с плагином полезно понимать, какие URL вы закрываете и почему.
Короткий чек-лист перед публикацией
- Проверить, какие служебные URL реально индексируются.
- Выбрать метод: robots.txt, noindex или X-Robots-Tag.
- Не блокировать
admin-ajax.php, если он нужен фронтенду. - Убрать технические URL из sitemap.
- Проверить заголовки ответа и мета-теги после изменений.
- Сверить Search Console через несколько дней после внедрения.
Если подходить к задаче точечно, можно убрать из индекса служебные URL без побочных эффектов для темы, форм и интеграций. В WordPress это особенно важно: один и тот же адрес может быть техническим для поисковика и критичным для работы интерфейса.