Как создать автоматический Sitemap в WordPress с помощью кода

Sitemap — это важный элемент SEO, который помогает поисковым системам лучше индексировать ваш сайт. В WordPress существует множество плагинов для создания sitemap, но иногда хочется обойтись без лишних расширений и реализовать это самостоятельно с помощью кода. В этой статье мы подробно разберём, как создать динамический sitemap.xml, который будет автоматически обновляться при публикации новых записей, страниц или других типов контента.

Почему стоит создать свой sitemap вручную? Ключевые преимущества

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

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

Этот подход идеально подходит для разработчиков и опытных пользователей WordPress, которым нужны точные настройки и минимальный набор инструментов.

Создание динамического sitemap.xml: пошаговая инструкция

1. Регистрация rewrite правила и создание endpoint для sitemap

Для начала нам нужно зарегистрировать пользовательский endpoint, который будет отвечать за отображение sitemap. В functions.php вашей темы или в кастомном плагине добавьте следующий код:

function wpcourse_add_sitemap_endpoint() {
  add_rewrite_rule('^sitemap\.xml$', 'index.php?sitemap=1', 'top');
}
add_action('init', 'wpcourse_add_sitemap_endpoint');

function wpcourse_add_query_var( $vars ) {
  $vars[] = 'sitemap';
  return $vars;
}
add_filter('query_vars', 'wpcourse_add_query_var');

Этот код регистрирует правило, чтобы при обращении к сайту по адресу https://ваш-сайт.ru/sitemap.xml срабатывал параметр sitemap=1.

2. Обработка запроса и вывод XML-карты сайта

Теперь нужно поймать этот запрос и вывести sitemap в формате XML. Добавим в functions.php следующий код:

function wpcourse_sitemap_template() {
  global $wp_query;
  if (get_query_var('sitemap') == 1) {
    header('Content-Type: application/xml; charset=utf-8');
    echo '<?xml version="1.0" encoding="UTF-8"?>\n';
    echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n';

    $args = array(
      'post_type' => array('post', 'page'),
      'post_status' => 'publish',
      'posts_per_page' => -1,
    );
    $query = new WP_Query($args);

    while ($query->have_posts()) : $query->the_post();
      $post_url = get_permalink();
      $post_modified = get_the_modified_time('c');
      echo "<url>\n";
      echo "<loc>" . esc_url($post_url) . "</loc>\n";
      echo "<lastmod>" . esc_html($post_modified) . "</lastmod>\n";
      echo "<changefreq>weekly</changefreq>\n";
      echo "<priority>0.8</priority>\n";
      echo "</url>\n";
    endwhile;
    wp_reset_postdata();

    echo '</urlset>';
    exit;
  }
}
add_action('template_redirect', 'wpcourse_sitemap_template');

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

Добавление пользовательских типов записей и таксономий в sitemap

Часто на сайте есть кастомные типы записей (CPT) и таксономии. Чтобы включить их в sitemap, измените параметр post_type в аргументах WP_Query:

$args = array(
  'post_type' => array('post', 'page', 'product', 'portfolio'), // добавьте свои CPT
  'post_status' => 'publish',
  'posts_per_page' => -1,
);

Для таксономий можно сделать отдельный цикл, который выведет ссылки на все термины. Например:

$terms = get_terms(array(
  'taxonomy' => 'category',
  'hide_empty' => true,
));
foreach ($terms as $term) {
  $term_link = get_term_link($term);
  echo "<url>\n";
  echo "<loc>" . esc_url($term_link) . "</loc>\n";
  echo "<changefreq>weekly</changefreq>\n";
  echo "<priority>0.6</priority>\n";
  echo "</url>\n";
}

Добавьте этот код внутри вашей функции вывода sitemap перед закрывающим тегом </urlset>.

Оптимизация и кеширование sitemap для производительности

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

Пример кэширования в файл:

function wpcourse_generate_sitemap_cache() {
  $sitemap_file = ABSPATH . 'sitemap.xml';
  ob_start();
  // Вызов функции генерации sitemap, например, wpcourse_sitemap_template(), но без выхода
  // Вместо exit используйте return и вывод сохраните в буфер
  // Здесь можно вынести код генерации sitemap в отдельную функцию, возвращающую строку
  $sitemap_xml = wpcourse_build_sitemap_xml();
  file_put_contents($sitemap_file, $sitemap_xml);
  ob_end_clean();
}

// Запускайте эту функцию через WP-Cron раз в сутки
add_action('wpcourse_daily_sitemap_update', 'wpcourse_generate_sitemap_cache');

// При обращении к sitemap отдавайте файл
function wpcourse_serve_sitemap_cache() {
  if (preg_match('/sitemap\.xml$/', $_SERVER['REQUEST_URI'])) {
    if (file_exists(ABSPATH . 'sitemap.xml')) {
      header('Content-Type: application/xml; charset=utf-8');
      readfile(ABSPATH . 'sitemap.xml');
      exit;
    }
  }
}
add_action('template_redirect', 'wpcourse_serve_sitemap_cache');

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

Полезные плагины для расширенного управления sitemap

Если вы хотите расширить функционал без написания кода, обратите внимание на проверенные плагины:

  • Clearfy Pro — мощный инструмент для оптимизации сайта, включая управление sitemap и SEO.
  • WPRemark — плагин для расширенной SEO-аналитики и генерации sitemap.

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

Заключение: советы и рекомендации по поддержке sitemap

Создание sitemap вручную — отличный способ получить гибкий и лёгкий инструмент для SEO. Но не забывайте:

  • Регулярно проверяйте sitemap на валидность через Google Search Console.
  • Обновляйте sitemap при изменении структуры сайта или добавлении новых типов контента.
  • Используйте кеширование, чтобы снизить нагрузку на сервер.
  • Если сайт большой — разбивайте sitemap на несколько файлов и создавайте индекс sitemap.

Следуя этим рекомендациям, вы обеспечите стабильную и эффективную работу вашего sitemap, помогая поисковым системам лучше понимать и индексировать ваш контент.

Как удалить неиспользуемые таксономии в WordPress
03.01.2026
Автоматическое изменение статуса заказа в WooCommerce по срокам оплаты
27.05.2026
Как изменить URL страницы регистрации WordPress без плагинов
07.12.2025
Автоматическое удаление неоплаченных заказов в WooCommerce
24.05.2026
Как использовать REST API для создания нестандартных запросов в WordPress
06.03.2026

Хотите научиться создавать сайты и зарабатывать на этом от 30 000 рублей в месяц?

Записаться на курс сейчас