Как исправить отсутствие sitemap в robots.txt и robots.xml в WordPress

Ситуация типовая: сайт уже генерирует XML-карту, но поисковик не видит ее там, где ожидает — в robots.txt или в отдельном robots.xml. В итоге карта есть, а путь к ней приходится искать вручную. Это не всегда критично, но для техсайта с несколькими картами, кастомным robots.txt или конфликтом плагинов проблема быстро превращается в лишнюю диагностику.

Ниже — практический разбор: как понять, где именно ломается цепочка, что проверить в WordPress, и как безопасно вернуть sitemap в выдачу без дублирования и конфликтов.

Когда проблема действительно в WordPress, а не в кэше

Сначала важно отделить серверный кэш, CDN и реальную проблему генерации. Часто карта сайта есть в админке SEO-плагина, но в браузере или через curl отдается старая версия robots.txt без ссылки на sitemap. Это особенно заметно после миграции, смены темы или установки плагина для оптимизации.

Что проверить в первую очередь

  • Открывается ли /robots.txt напрямую и не отдает ли он старый кэшированный ответ.
  • Есть ли в нем строка вида Sitemap: https://example.com/sitemap_index.xml.
  • Не создает ли другой плагин собственный robots.txt или правила на уровне сервера.
  • Не отключена ли генерация sitemap в SEO-плагине.
  • Не закрыт ли сам sitemap через noindex или правила безопасности.

Если у вас включен кэш страниц или CDN, сначала очистите его. Иначе можно долго править WordPress, а поисковик будет видеть старый ответ.

Как устроена генерация sitemap в WordPress

В ядре WordPress есть базовая XML-карта сайта, но на практике чаще используют SEO-плагины: Yoast SEO, Rank Math, AIOSEO и похожие. Они могут добавлять sitemap в robots.txt автоматически, но только если не мешает кастомный код или другой плагин, который перехватывает вывод.

Отдельная история — robots.xml. Это не стандарт WordPress. Обычно под этим именем имеют в виду либо отдельный файл, либо нестандартный маршрут, который создает плагин или серверная настройка. Если у вас в задаче именно robots.xml, сначала проверьте, кто его генерирует: WordPress, плагин безопасности, SEO-плагин или nginx/apache rewrite.

ПодходЧто даетМинус
SEO-плагинАвтоматическая карта и ссылка в robots.txtКонфликтует с кастомным robots.txt
Код в теме / mu-pluginПолный контроль над выводомНужно следить за обновлениями и кэшем
Серверная настройкаБыстро и независимо от WordPressСложнее сопровождать при переносе сайта

Диагностика: где именно пропала ссылка на sitemap

Начните с простого запроса к robots.txt. Если там нет строки Sitemap:, это еще не значит, что WordPress сломан. Возможно, файл переопределен вручную.

curl -I https://example.com/robots.txt
curl https://example.com/robots.txt

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

Проверка через админку и плагины

  • В SEO-плагине откройте раздел sitemap и убедитесь, что XML-карта включена.
  • Проверьте, не включен ли отдельный модуль для robots.txt.
  • Посмотрите, нет ли в теме или в mu-plugins функции, которая фильтрует robots_txt.
  • Если используется плагин безопасности, проверьте, не блокирует ли он доступ к sitemap по маске.

Пошаговое решение через код

Если sitemap есть, но ссылка не попадает в robots.txt, можно добавить ее через фильтр WordPress. Это полезно, когда SEO-плагин не делает этого сам или когда вы хотите явно контролировать строку.

add_filter('robots_txt', function ($output, $public) {
    $sitemap = home_url('/sitemap_index.xml');

    if (strpos($output, 'Sitemap:') === false) {
        $output .= "\nSitemap: " . esc_url_raw($sitemap) . "\n";
    }

    return $output;
}, 10, 2);

Этот вариант лучше размещать не в functions.php активной темы, а в небольшом mu-plugin. Так правило не исчезнет после смены темы.

<?php
/**
 * Plugin Name: Robots Sitemap Fix
 */
add_filter('robots_txt', function ($output, $public) {
    $sitemap = home_url('/sitemap_index.xml');

    if (strpos($output, 'Sitemap:') === false) {
        $output .= "\nSitemap: " . esc_url_raw($sitemap) . "\n";
    }

    return $output;
}, 10, 2);

Если у вас не sitemap_index.xml, а другой адрес, подставьте реальный путь из SEO-плагина. Не копируйте пример вслепую: у некоторых сайтов карта лежит в /sitemap.xml или разбита на несколько файлов.

Если нужен именно robots.xml

Иногда под robots.xml подразумевают отдельный маршрут, который должен отдавать XML-ответ с набором ссылок. WordPress сам по себе этого не делает, поэтому решение зависит от того, кто должен обслуживать URL.

Если маршрут нужен только для внешней системы или внутренней интеграции, проще создать отдельный rewrite и отдавать XML через шаблон. Но это имеет смысл только когда вы точно понимаете, зачем нужен именно robots.xml, а не стандартный robots.txt.

add_action('init', function () {
    add_rewrite_rule('^robots\.xml$', 'index.php?robots_xml=1', 'top');
    add_rewrite_tag('%robots_xml%', '([0-1])');
});

add_action('template_redirect', function () {
    if ((int) get_query_var('robots_xml') !== 1) {
        return;
    }

    header('Content-Type: application/xml; charset=UTF-8');
    echo '<?xml version="1.0" encoding="UTF-8"?>';
    echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
    echo '<url><loc>' . esc_url(home_url('/')) . '</loc></url>';
    echo '</urlset>';
    exit;
});

После добавления такого кода нужно обновить правила постоянных ссылок: зайдите в Настройки → Постоянные ссылки и нажмите Сохранить. Это не декоративный шаг, а обязательная часть работы rewrite-правил.

Проверка результата после внедрения

Когда правки внесены, не ограничивайтесь визуальной проверкой в браузере. Нужен ответ сервера и фактическое содержимое.

  1. Откройте /robots.txt в режиме инкогнито.
  2. Проверьте, что строка Sitemap: присутствует и ведет на реальный XML-файл.
  3. Сделайте curl и убедитесь, что ответ не подменяется кэшем.
  4. Если есть Search Console, отправьте sitemap повторно и проверьте статус обработки.

Для дополнительной проверки можно открыть сам sitemap и убедиться, что он отдается с кодом 200, а не 301 или 403. Редирект на sitemap иногда ломает обработку у части сервисов, особенно если цепочка редиректов длинная.

Частые ошибки и как их исправить

Ссылка добавлена, но потом исчезает

Обычно это кэш: плагин кеширования, серверный кэш или CDN. Очистите все уровни, включая объектный кэш, если он используется. Если сайт на nginx с fastcgi cache, проверьте правила исключения для /robots.txt.

В robots.txt две строки Sitemap

Так бывает, когда и SEO-плагин, и кастомный код добавляют одну и ту же запись. Оставьте только один источник. Дубли в robots.txt не всегда критичны, но это признак того, что логика уже расползлась по нескольким местам.

robots.xml отдает 404

Значит, маршрут не зарегистрирован или не обновлены правила постоянных ссылок. Если используется rewrite, повторно сохраните постоянные ссылки и проверьте, не перехватывает ли URL другой плагин.

Sitemap закрыт от индексации

Иногда карта сайта случайно попадает под правила безопасности или SEO-настройки. Проверьте, нет ли noindex на уровне HTTP-заголовков, мета-тегов или настроек плагина.

Что делать для безопасности и стабильности

Если правите это через код, не вносите изменения в активную тему без необходимости. Для точечных технических правок лучше использовать mu-plugin или отдельный мини-плагин. Так вы не потеряете настройку после обновления темы.

Еще один практический момент: не плодите несколько sitemap-решений одновременно. Если у вас уже работает SEO-плагин, не добавляйте поверх него самописный генератор без нужды. Это почти всегда приводит к конфликтам, особенно после обновлений.

Если нужен более широкий контроль над технической чистотой сайта, удобно проверять такие вещи в связке с инструментами вроде Clearfy Pro: там проще отслеживать дубли, служебные страницы и часть SEO-настроек без ручного поиска по разным экранам админки.

Короткий чек-лист перед публикацией правок

  • Проверен реальный ответ /robots.txt через curl.
  • Удален или отключен второй источник генерации robots.txt.
  • Sitemap доступен по прямой ссылке и отдает 200.
  • Кэш на сайте и CDN очищен.
  • Если использовался rewrite, обновлены постоянные ссылки.
  • В Search Console sitemap отправлен повторно и без ошибок доступа.

Если после всех правок карта все еще не появляется там, где должна, проблема почти наверняка не в одном фильтре WordPress, а в цепочке между CMS, плагином, кэшем и сервером. В таких случаях быстрее идти от ответа сервера к источнику генерации, чем искать «магическую» настройку в админке.

Как исключить технические страницы WordPress из индексации без потери нужного трафика
27.08.2026
Как закрыть дубли страниц в WordPress через robots.txt, noindex и canonical
20.08.2026
Как исправить отсутствие sitemap в robots.txt и robots.xml в WordPress
31.08.2026
Как исправить 404 на страницах авторов в WordPress
23.08.2026