Как создать автоматический sitemap в WordPress без плагинов

Sitemap — важный элемент для SEO-продвижения сайта на WordPress. Он помогает поисковым системам быстро и эффективно индексировать все страницы сайта. Обычно для генерации sitemap используют плагины, например, Yoast SEO или Google XML Sitemaps. Но что делать, если вы хотите избежать лишних плагинов, уменьшить нагрузку или реализовать sitemap самостоятельно? В этой статье мы рассмотрим, как создать автоматический sitemap.xml на WordPress без плагинов, используя собственный код.

Почему стоит создавать sitemap без плагина

Плагины для sitemap бывают удобными, но они могут:

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

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

Основные принципы работы sitemap в WordPress

Sitemap — это XML-файл, который содержит список URL сайта с дополнительными атрибутами для поисковых систем: дата последнего обновления, приоритет, частота изменений. Стандартный формат sitemap описан на сайте sitemaps.org.

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

Для реализации простого автоматического sitemap без плагинов мы будем использовать отдельный endpoint (напрямую обрабатывать запрос к /sitemap.xml через хук).

Создаем endpoint для sitemap.xml в WordPress

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

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

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

function wpsource_sitemap_template() {
    if (get_query_var('sitemap')) {
        header('Content-Type: application/xml; charset=' . get_bloginfo('charset'), true);
        echo wpsource_generate_sitemap_xml();
        exit;
    }
}
add_action('template_redirect', 'wpsource_sitemap_template');

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

  • Регистрируем правило перезаписи для адреса /sitemap.xml, чтобы WordPress понимал, что нужно обработать этот запрос.
  • Добавляем новый query var sitemap для распознавания запроса.
  • На этапе template_redirect проверяем наличие этого параметра и выводим sitemap с правильным заголовком.

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

Функция генерации XML sitemap

Теперь создадим функцию wpsource_generate_sitemap_xml(), которая будет собирать все нужные URL и формировать XML в формате sitemap.

function wpsource_generate_sitemap_xml() {
    $posts_for_sitemap = get_posts([
        'numberposts' => -1,
        'post_type'   => ['post', 'page'],
        'post_status' => 'publish',
        'orderby'     => 'modified',
        'order'       => 'DESC',
    ]);

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

    foreach ($posts_for_sitemap as $post) {
        setup_postdata($post);
        $permalink = get_permalink($post);
        $lastmod = get_post_modified_time('c', false, $post);

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

    wp_reset_postdata();

    $xml .= "\n</urlset>";

    return $xml;
}

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

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

Если на сайте есть кастомные типы записей (например, 'product', 'portfolio'), их тоже стоит включить в sitemap.

Для этого измените параметр post_type в функции get_posts:

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

$posts_for_sitemap = get_posts([
    'numberposts' => -1,
    'post_type'   => $post_types,
    'post_status' => 'publish',
    'orderby'     => 'modified',
    'order'       => 'DESC',
]);

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

$categories = get_categories(['hide_empty' => true]);

foreach ($categories as $category) {
    $xml .= "\n  <url>";
    $xml .= "\n    <loc>" . esc_url(get_category_link($category->term_id)) . "</loc>";
    $xml .= "\n    <changefreq>weekly</changefreq>";
    $xml .= "\n    <priority>0.6</priority>";
    $xml .= "\n  </url>";
}

Добавьте этот код перед закрывающим тегом .

Кэширование sitemap для ускорения и снижения нагрузки

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

Простейший способ — сохранять файл sitemap.xml в папке uploads и обновлять его раз в сутки или при изменении контента.

Пример использования transient API для кэширования:

function wpsource_generate_sitemap_xml_cached() {
    $cache_key = 'wpsource_sitemap_xml';
    $xml = get_transient($cache_key);

    if (false === $xml) {
        $xml = wpsource_generate_sitemap_xml();
        // Кэшируем на 24 часа
        set_transient($cache_key, $xml, DAY_IN_SECONDS);
    }

    return $xml;
}

И замените вызов в wpsource_sitemap_template() на вызов wpsource_generate_sitemap_xml_cached().

Тестируем и проверяем sitemap

После реализации зайдите на https://ваш-сайт.ru/sitemap.xml и убедитесь, что файл корректно отображается, валиден и содержит все нужные URL.

Для проверки валидности можно использовать онлайн-сервисы, например, валидатор sitemap.

Также добавьте URL sitemap в Google Search Console для улучшения индексации.

Альтернативные решения и плагины для сравнения

Если вам все же нужен плагин, но легкий и минималистичный, обратите внимание на:

  • Google XML Sitemaps — классика, простой и надежный плагин для генерации sitemap.
  • Rank Math SEO — современный SEO-пакет с удобным sitemap-модулем.
  • WP Sitemap Page — плагин для создания HTML-карты сайта, иногда полезен в дополнение к XML.

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

Итог

Создание собственного автоматического sitemap в WordPress — задача вполне решаемая, если использовать правильный подход. Мы рассмотрели, как добавить endpoint для sitemap.xml, сформировать XML с нужными URL, расширить список типов записей, кэшировать результаты и протестировать готовый файл.

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

Как отложить загрузку скриптов в WordPress без плагинов
07.01.2026
Отсрочка загрузки картинок (Lazy Load) в WordPress с поддержкой WooCommerce
25.12.2025
Как удалить автоматические ревизии в WordPress для ускорения сайта
19.03.2026
Как удалить или изменить регистрацию пользователей в WordPress с примером кода
07.03.2026
Как использовать WP-Cron для автоматизации задач в WordPress: практические примеры
25.04.2026