Иногда после запуска или аудита сайта WordPress обнаруживается странная вещь: в XML-карте есть страницы, которые туда совсем не просились. На одном из проектов мы как раз увидели такую ситуацию. В wp-sitemap.xml WordPress добавил три отдельные карты:
wp-sitemap-taxonomies-solutions_taxa-1.xml
wp-sitemap-taxonomies-projects_taxa-1.xml
wp-sitemap-users-1.xml
Сами разделы сайта при этом нужны. Удалять их не хотелось. Вопрос был только в одном: как убрать эти записи из sitemap?
Почему нельзя просто отредактировать wp-sitemap.xml?
Если открыть: https://ваш-сайт.ru/wp-sitemap.xml, то может показаться, что перед нами обычный XML-файл. Но это не совсем так. В современных версиях WordPress sitemap создаётся самой системой. Поэтому искать wp-sitemap.xml среди файлов сайта и редактировать его вручную бессмысленно. WordPress всё равно сформирует карту заново. Получается, нужно менять не сам XML, а правила, по которым WordPress его собирает.
Откуда вообще берутся эти записи?
У WordPress есть встроенный механизм sitemap. Он появился ещё в версии 5.5, поэтому для базовой XML-карты отдельный SEO-плагин не требуется. WordPress разбивает sitemap на несколько частей. В зависимости от настроек и содержимого сайта туда могут попасть записи, страницы, таксономии и пользователи. Именно поэтому внутри основной карты можно встретить ссылки вроде:
wp-sitemap-posts-post-1.xml
wp-sitemap-taxonomies-...-1.xml
wp-sitemap-users-1.xml
В нашем случае лишними оказались две таксономии и пользователи.
Убираем sitemap пользователей
Для этого у WordPress есть фильтр wp_sitemaps_add_provider. С его помощью можно сказать системе: провайдер sitemap пользователей нам не нужен. Код выглядит так:
add_filter( 'wp_sitemaps_add_provider', function( $provider, $name ) {
if ( 'users' === $name ) {
return false;
}
return $provider;
}, 10, 2 );
На этом с пользователями всё.
Теперь таксономии
Для таксономий используется другой фильтр — wp_sitemaps_taxonomies. Нам нужно убрать из списка две конкретные таксономии:
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
unset( $taxonomies['solutions_taxa'] );
unset( $taxonomies['projects_taxa'] );
return $taxonomies;
} );
Здесь есть следующий важный момент: unset() убирает эти элементы только из массива, который WordPress использует для построения sitemap. Сами таксономии никуда не удаляются. Это именно то, что нам и требовалось.
Готовый вариант
Если нужно повторить такую настройку целиком, можно использовать один сниппет:
add_filter( 'wp_sitemaps_add_provider', function( $provider, $name ) {
if ( 'users' === $name ) {
return false;
}
return $provider;
}, 10, 2 );
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
unset( $taxonomies['solutions_taxa'] );
unset( $taxonomies['projects_taxa'] );
return $taxonomies;
} );
Куда добавить код?
Технически его можно положить в functions.php. Но есть одна проблема: если это файл основной темы, после её обновления изменения могут пропасть. Поэтому для небольшой настройки вроде этой нам удобнее использовать Code Snippets.
В админке WordPress: Плагины → Добавить новый → Code Snippets.
После установки создаём новый сниппет, вставляем код и включаем его для работы на всём сайте. В результате код хранится отдельно от темы.
Проверяем sitemap
Теперь снова открываем: https://ваш-сайт.ru/wp-sitemap.xml. В списке больше не должно быть:
wp-sitemap-taxonomies-solutions_taxa-1.xml
wp-sitemap-taxonomies-projects_taxa-1.xml
wp-sitemap-users-1.xml
При этом сами страницы сайта, записи и таксономии продолжают работать как раньше.
Это важно проверить именно после активации сниппета. Не стоит ориентироваться только на то, что код сохранился в админке.
Нужно ли удалять старые XML-файлы?
Нет. В данном случае мы вообще ничего не удаляем с сервера. До настройки WordPress генерировал определённые части sitemap. После настройки перестаёт их включать.
Если вы проверяете старый URL отдельно, результат может отличаться в зависимости от кеширования и настроек сайта. Поэтому сначала стоит проверить основную карту wp-sitemap.xml.
Если используется кеширование, после изменения настроек его также может потребоваться очистить.
Что в итоге получилось
В этой ситуации задача решается без SEO-плагина и без изменений темы. WordPress продолжает самостоятельно создавать XML sitemap, но мы исключаем из него те разделы, которые нам не нужны. Для этого понадобилось всего два фильтра:
wp_sitemaps_add_provider— чтобы убрать sitemap пользователей;wp_sitemaps_taxonomies— чтобы исключить конкретные таксономии.
А добавить код можно через Code Snippets
Если на вашем сайте стандартный wp-sitemap.xml содержит что-то лишнее, сначала стоит посмотреть, какой именно раздел его туда добавляет. После этого обычно достаточно одного небольшого фильтра, а не очередного большого плагина с десятками настроек.
Оставить заявку