wpquiz.ru wordpress WPQuiz.ru

Как запретить индексацию XML sitemap в WordPress для служебных страниц

Проблема обычно выглядит так: в Google Search Console появляются URL из /wp-sitemap.xml, а в индексе всплывают страницы вложений, архивы автора, служебные таксономии или тестовые разделы. Сам sitemap сам по себе не вреден, но если он отдает поисковику лишние URL, дальше начинается мусор в индексе, дубли и лишняя нагрузка на краулинг.

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

Когда проблема действительно в sitemap

Сначала стоит понять, что именно вы видите в отчётах. Если в индексе есть URL, которые не должны там находиться, это не всегда ошибка sitemap. Иногда причина в том, что страница доступна по прямой ссылке, а в sitemap она просто помогает поисковику быстрее её найти.

Типичные симптомы

  • в Search Console растет число URL с пометкой Просканировано, но не проиндексировано;
  • в индексе появляются страницы вложений с тонким контентом;
  • в sitemap есть архивы, которые вы не используете;
  • в выдаче видны служебные URL, хотя на сайте они нигде не нужны;
  • после установки SEO-плагина sitemap стал включать лишние типы записей.

Если у вас открыт только один лишний тип URL, лучше отключать его на уровне генерации sitemap, а не надеяться на noindex в мета-теге. Для служебных страниц это надежнее и чище.

Что именно нужно закрывать от sitemap

Не стоит вырезать всё подряд. В sitemap должны оставаться только те URL, которые вы реально хотите видеть в поиске. Обычно это записи, страницы, нужные рубрики и, если есть смысл, отдельные кастомные типы записей.

ВариантЧто делаетКогда использовать
Плагин SEOУправляет индексированием и sitemap через интерфейсЕсли нужен быстрый контроль без кода
Код в теме или mu-pluginТочечно исключает типы записей и таксономии из sitemapЕсли нужен предсказуемый результат и минимум зависимостей
Комбинированный подходПлагин для общих настроек, код для исключенийЕсли сайт уже живет на SEO-плагине, но нужны точечные правки

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

В WordPress core sitemap можно фильтровать без сторонних плагинов. Для этого удобнее использовать wp_sitemaps_post_types и wp_sitemaps_taxonomies. Так вы убираете лишние типы записей и таксономии еще до генерации XML.

1. Исключаем ненужные типы записей

<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
    // Убираем вложения из sitemap
    unset( $post_types['attachment'] );

    // Если есть служебный CPT, тоже исключаем его
    unset( $post_types['landing_test'] );

    return $post_types;
} );

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

2. Убираем лишние таксономии

<?php
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
    // Пример: закрываем служебную таксономию
    unset( $taxonomies['post_tag'] );

    // Если у вас есть внутренние рубрики для фильтров или тестов
    unset( $taxonomies['internal_group'] );

    return $taxonomies;
} );

Здесь важно не путать sitemap и индексацию вообще. Если таксономия должна оставаться на сайте, но не должна попадать в XML, этот способ подходит лучше всего.

3. Закрываем страницы вложений от индексации

Для медиа-страниц лучше не только убрать их из sitemap, но и сделать редирект на сам файл или родительскую запись. Это снижает шанс появления тонких страниц в индексе.

<?php
add_action( 'template_redirect', function() {
    if ( is_attachment() ) {
        $attachment_id = get_queried_object_id();
        $parent_id = wp_get_post_parent_id( $attachment_id );

        if ( $parent_id ) {
            wp_safe_redirect( get_permalink( $parent_id ), 301 );
            exit;
        }

        $file = wp_get_attachment_url( $attachment_id );
        if ( $file ) {
            wp_safe_redirect( $file, 301 );
            exit;
        }
    }
} );

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

Если используете SEO-плагин

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

Но есть нюанс: не все плагины одинаково ведут себя с кастомными типами записей. После обновления плагина или изменения настроек стоит заново проверить XML, а не полагаться на старую конфигурацию.

Что проверить в настройках

  • включен ли XML sitemap вообще;
  • не попали ли в sitemap архивы автора и даты;
  • не экспортируются ли вложения;
  • не добавлены ли служебные CPT;
  • не дублируются ли URL через разные источники sitemap.

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

Как проверить, что решение сработало

Проверка нужна не только в браузере. Сначала откройте XML sitemap и убедитесь, что лишних URL там больше нет. Потом проверьте ответ сервера на конкретный URL, который вы исключали.

  1. Откройте /wp-sitemap.xml и связанные карты.
  2. Найдите исключенный тип записи или таксономию.
  3. Проверьте, что URL больше не присутствует в XML.
  4. Откройте исключенную страницу напрямую и посмотрите, есть ли редирект или корректный noindex.
  5. В Search Console отправьте повторную проверку после переобхода.

Если используете командную строку, можно быстро проверить заголовки ответа:

curl -I https://example.com/wp-sitemap.xml
curl -I https://example.com/sample-attachment/

Для sitemap важен именно факт отсутствия лишнего URL в XML. Если он всё еще там, значит фильтр не сработал или подключен слишком поздно.

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

Удаляют URL из sitemap, но не закрывают саму страницу

Это частая недоработка. Если URL доступен по прямой ссылке и на него ведут внутренние ссылки, поисковик может продолжить его обход. Для вложений и служебных страниц лучше сочетать исключение из sitemap с редиректом или noindex.

Ставят noindex, но URL остается в sitemap

Так делать можно, но это не лучший вариант для служебных страниц. Поисковик сначала видит URL в карте сайта, потом получает сигнал не индексировать. Для мусорных страниц лучше убрать их из sitemap совсем.

Ломают sitemap из-за неверного ключа массива

В фильтрах WordPress нужно использовать реальные ключи типов записей и таксономий. Если вы удаляете несуществующий ключ, ошибка не появится, но и результата не будет. Перед правкой посмотрите, как именно зарегистрирован CPT или taxonomy.

Вносят изменения в тему, а потом теряют их при обновлении

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

Безопасность и производительность

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

С точки зрения безопасности не стоит закрывать служебные URL только через robots.txt, если они реально не нужны в индексе. Robots.txt не является механизмом защиты, он лишь подсказывает поисковику, что не надо обходить страницу. Для приватных разделов нужен нормальный контроль доступа.

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

В итоге рабочая схема простая: лишнее убираем из XML sitemap, ненужные страницы закрываем редиректом или noindex, а результат проверяем не только визуально, но и через ответ сервера и Search Console.

×
до 3225₽

Продавай темы и плагины WordPress!

Лови с каждой продажи

Начать ⋙