Для эффективного SEO и индексации сайта поисковыми системами важным элементом является карта сайта (sitemap). Большинство начинающих и даже опытных пользователей WordPress используют плагины для создания sitemap, такие как Yoast SEO или Google XML Sitemaps. Однако иногда хочется более легкое, гибкое и кастомное решение без лишних плагинов, чтобы минимизировать нагрузку на сайт и получить точный контроль над содержимым sitemap.
Почему стоит создавать sitemap вручную через код
Плагины часто генерируют sitemap, которые содержат все типы записей и таксономий по умолчанию, что не всегда нужно. Если у вас проект с особыми требованиями — например, исключить определённые категории, страницы или пользовательские типы записей, ручное создание sitemap позволит реализовать это максимально точно.
Кроме того, кодовое решение не будет требовать обновлений плагинов, что уменьшит риски конфликтов и уязвимостей. Также это хорошая практика для понимания работы WordPress и REST API.
Создание базового sitemap в WordPress с помощью кода
Давайте рассмотрим пример, как создать простой sitemap.xml, который будет выводить URL всех опубликованных записей и страниц.
Добавьте следующий код в файл functions.php вашей темы или в собственный плагин:
function wpcom_generate_sitemap() {
if ( ! isset( $_GET['wpcom_sitemap'] ) ) {
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">';
// Получаем все опубликованные записи
$posts = get_posts( array(
'post_type' => array( 'post', 'page' ),
'post_status' => 'publish',
'posts_per_page' => -1
) );
foreach ( $posts as $post ) {
$url = get_permalink( $post->ID );
$date = get_the_modified_time( 'c', $post->ID );
echo '<url>';
echo '<loc>' . esc_url( $url ) . '</loc>';
echo '<lastmod>' . esc_html( $date ) . '</lastmod>';
echo '<changefreq>weekly</changefreq>';
echo '<priority>0.8</priority>';
echo '</url>';
}
echo '</urlset>';
exit;
}
add_action( 'init', 'wpcom_generate_sitemap' );Теперь, если вы перейдёте по адресу https://ваш-сайт.ru/?wpcom_sitemap=1, вы увидите XML-карту сайта с URL всех опубликованных постов и страниц.
Как расширить sitemap: добавляем пользовательские типы записей и таксономии
Если на вашем сайте есть кастомные типы записей, например product или portfolio, их тоже можно добавить в sitemap. Для этого в параметре post_type укажите массив нужных типов:
$posts = get_posts( array(
'post_type' => array( 'post', 'page', 'product', 'portfolio' ),
'post_status' => 'publish',
'posts_per_page' => -1
) );Для таксономий (категорий, тегов и пользовательских таксономий) можно добавить отдельный блок URL с архивами. Например, для категорий:
$categories = get_categories( array( 'hide_empty' => false ) );
foreach ( $categories as $category ) {
$url = get_category_link( $category->term_id );
echo '<url>';
echo '<loc>' . esc_url( $url ) . '</loc>';
echo '<changefreq>weekly</changefreq>';
echo '<priority>0.6</priority>';
echo '</url>';
}Оптимизация и кеширование sitemap
Генерация sitemap при каждом запросе может быть ресурсоёмкой, особенно для крупных сайтов. Чтобы избежать нагрузки, стоит реализовать кеширование результата в файл или transient.
Пример с использованием transient API:
function wpcom_get_sitemap_cached() {
$sitemap = get_transient( 'wpcom_sitemap_cache' );
if ( false === $sitemap ) {
ob_start();
// Здесь вставьте код генерации sitemap (без header и exit)
// например, вызов функции wpcom_generate_sitemap_content();
wpcom_generate_sitemap_content();
$sitemap = ob_get_clean();
set_transient( 'wpcom_sitemap_cache', $sitemap, 12 * HOUR_IN_SECONDS );
}
echo $sitemap;
}
function wpcom_generate_sitemap() {
if ( ! isset( $_GET['wpcom_sitemap'] ) ) {
return;
}
header( 'Content-Type: application/xml; charset=utf-8' );
wpcom_get_sitemap_cached();
exit;
}
add_action( 'init', 'wpcom_generate_sitemap' );Такой подход существенно ускорит отдачу sitemap и снизит нагрузку на сервер.
Настройка robots.txt для указания sitemap
Чтобы поисковые системы быстрее нашли вашу карту сайта, добавьте в файл robots.txt строку с URL sitemap:
Sitemap: https://ваш-сайт.ru/?wpcom_sitemap=1Если вы используете кеш или CDN, убедитесь, что sitemap доступен без ошибок.
Альтернативы и плагины для sitemap
Если вы предпочитаете готовые решения, обратите внимание на плагин Clearfy Pro. Он умеет создавать и оптимизировать sitemap, управлять индексацией и поддерживает расширенную настройку.
Для простых сайтов подойдет и встроенный в WordPress sitemap (доступен с версии 5.5), но он не всегда покрывает все кастомные нужды.
Итоговые рекомендации по созданию sitemap через код
- Используйте ручную генерацию sitemap, если нужен точный контроль и минимальное количество плагинов.
- Добавляйте все важные типы записей и таксономии, чтобы поисковые системы увидели полный контент.
- Обязательно настройте кеширование для ускорения отдачи XML.
- Проверьте доступность sitemap в разных браузерах и валидаторах XML.
- Добавьте ссылку на sitemap в robots.txt и Google Search Console.
Используя данный подход, вы сможете создать быстрый, легкий и кастомный sitemap, который поможет улучшить SEO вашего сайта на WordPress без лишних плагинов.