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

Для улучшения индексации сайта поисковыми системами очень важно иметь актуальную карту сайта (sitemap.xml). Многие используют готовые плагины, такие как Yoast SEO или All in One SEO, но иногда их избыточность или особенности настройки не подходят. В этой статье мы разберём, как самостоятельно создать автоматический sitemap в WordPress с помощью кода, который будет динамически обновляться при добавлении новых записей, страниц и других типов контента.

Зачем нужен sitemap и какие требования к нему

Sitemap — это XML-файл, который содержит ссылки на все важные страницы сайта с дополнительной информацией: дата последнего обновления, частота изменения и приоритет для поисковиков. Поисковые системы, такие как Google и Яндекс, используют sitemap для более быстрого и полного индексирования сайта.

Стандарт sitemap описан в официальной документации. Важно, чтобы файл был доступен по адресу /sitemap.xml и обновлялся автоматически.

Реализуемая нами карта сайта будет поддерживать:

  • Посты (post)
  • Страницы (page)
  • Кастомные типы записей (если нужно)
  • Отображение даты последнего обновления

Создание sitemap.xml через add_rewrite_endpoint

Чтобы сделать sitemap доступным по адресу /sitemap.xml без плагинов, используем механизм rewrite endpoints WordPress. Это позволяет обрабатывать запросы к определённому URL и выводить свой контент.

Добавим следующий код в файл functions.php вашей темы или в отдельный плагин:

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

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

add_action('template_redirect', 'wplog_sitemap_template');
function wplog_sitemap_template() {
    if (get_query_var('sitemap') != 1) {
        return;
    }
    header('Content-Type: application/xml; charset=utf-8');
    echo wplog_generate_sitemap_xml();
    exit();
}

Объяснение:

  • С помощью add_rewrite_rule мы создаём правило, чтобы запросы к /sitemap.xml перенаправлялись на внутренний запрос index.php?sitemap=1.
  • В query_vars добавляем параметр sitemap, чтобы WordPress его распознавал.
  • При срабатывании этого параметра через template_redirect выводим содержимое карты сайта и завершаем выполнение.

После добавления этого кода нужно обновить правила перезаписи, зайдя в админке WordPress в раздел Настройки > Постоянные ссылки и просто сохранив настройки.

Генерация XML-карты сайта с динамическими данными

Создадим функцию wplog_generate_sitemap_xml(), которая соберёт все нужные URL и выведет их в формате XML.

function wplog_generate_sitemap_xml() {
    $posts_per_page = 1000; // количество ссылок за один запрос
    $post_types = ['post', 'page']; // типы записей для sitemap

    $xml  = '<?xml version="1.0" encoding="UTF-8"?>';
    $xml .= "\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n";

    foreach ($post_types as $post_type) {
        $paged = 1;
        do {
            $query = new WP_Query([
                'post_type' => $post_type,
                'post_status' => 'publish',
                'posts_per_page' => $posts_per_page,
                'paged' => $paged
            ]);

            if (!$query->have_posts()) {
                break;
            }

            while ($query->have_posts()) {
                $query->the_post();
                $post_url = get_permalink();
                $post_modified = get_post_modified_time('c');

                $xml .= "<url>\n";
                $xml .= " <loc>" . esc_url($post_url) . "</loc>\n";
                $xml .= " <lastmod>" . esc_html($post_modified) . "</lastmod>\n";
                $xml .= " <changefreq>weekly</changefreq>\n";
                $xml .= " <priority>0.8</priority>\n";
                $xml .= "</url>\n";
            }
            wp_reset_postdata();

            $paged++;
        } while ($query->max_num_pages >= $paged);
    }

    $xml .= '</urlset>';
    return $xml;
}

Что здесь происходит:

  • Мы подгружаем посты и страницы пакетами по 1000 штук, чтобы избежать проблем с памятью.
  • Для каждого поста формируем элемент <url> с обязательными тегами <loc> (URL), <lastmod> (дата изменения), <changefreq> и <priority>.
  • Используем стандартные значения для частоты обновления и приоритета — их можно адаптировать под свои нужды.

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

Если на вашем сайте используются кастомные типы записей, например «products» или «portfolio», их легко добавить в массив $post_types в функции генерации sitemap. Пример:

$post_types = ['post', 'page', 'product', 'portfolio'];

Для таксономий (категории, метки или кастомные таксономии) можно сделать отдельный блок в sitemap или расширить текущий код. Рассмотрим пример добавления категорий:

function wplog_add_categories_to_sitemap() {
    $categories = get_categories(['hide_empty' => true]);
    $xml = '';
    foreach ($categories as $category) {
        $category_link = get_category_link($category->term_id);
        $xml .= "<url>\n";
        $xml .= " <loc>" . esc_url($category_link) . "</loc>\n";
        $xml .= " <changefreq>weekly</changefreq>\n";
        $xml .= " <priority>0.6</priority>\n";
        $xml .= "</url>\n";
    }
    return $xml;
}

И добавить вызов этой функции внутрь wplog_generate_sitemap_xml():

$xml .= wplog_add_categories_to_sitemap();

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

Генерация sitemap на больших сайтах может занимать время и нагрузить сервер. Чтобы этого избежать, рекомендуется кешировать результат. Можно использовать Transients API:

function wplog_generate_sitemap_xml() {
    $cache_key = 'wplog_sitemap_xml_cache';
    $cached = get_transient($cache_key);
    if ($cached !== false) {
        return $cached;
    }

    // Генерация sitemap как раньше
    $xml = '...'; // код генерации

    // Сохраняем в кеш на 12 часов
    set_transient($cache_key, $xml, 12 * HOUR_IN_SECONDS);

    return $xml;
}

Такой подход позволит отдавать sitemap быстро, обновляя его два раза в сутки.

Пример использования плагинов WPShop для SEO и sitemap

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

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

Как избежать замедлений WordPress при большом количестве записей
11.02.2026
Как автоматически изменять meta description в WordPress для улучшения SEO
17.04.2026
Как создать автоматические отчёты в WordPress с помощью WPExpert Review
07.01.2026
Как установить ограничение на число категорий в WordPress
18.02.2026
Как автоматически удалять неиспользуемые медиафайлы в WordPress
04.01.2026