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

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

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

Хотя в WordPress существует множество плагинов для генерации sitemap (например, Google XML Sitemaps, Yoast SEO), иногда их использование нежелательно из-за:

  • Излишней нагрузки на сайт.
  • Ограниченной кастомизации.
  • Проблем совместимости с другими плагинами или темой.

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

Как работает стандартный Sitemap.xml и что он должен содержать

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

<url>
  <loc>https://example.com/page1/</loc>
  <lastmod>2024-06-10</lastmod>
  <changefreq>weekly</changefreq>
  <priority>0.8</priority>
</url>

Чтобы поисковые системы корректно воспринимали sitemap, он должен строго соответствовать XML-стандарту.

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

1. Создаём отдельный шаблон для sitemap

Для начала создадим файл sitemap.xml.php в корне темы (например, wp-content/themes/your-theme/). В этом файле мы будем генерировать XML динамически.

В начале файла указываем заголовок для отдачи XML:

<?php
header('Content-Type: application/xml; charset=utf-8');
?>

2. Выводим стандартную XML-шапку

Далее добавляем стандартное объявление XML и открывающий тег <urlset> с нужными namespace:

<?php
header('Content-Type: application/xml; charset=utf-8');
?>
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

3. Получаем список страниц и записей

Используем WP_Query для выборки всех опубликованных страниц и записей, которые мы хотим включить в sitemap:

<?php
$args = [
    'post_type' => ['post', 'page'],
    'post_status' => 'publish',
    'posts_per_page' => -1,
];
$query = new WP_Query($args);

if ($query->have_posts()) :
    while ($query->have_posts()) : $query->the_post();
        $loc = get_permalink();
        $lastmod = get_the_modified_date('Y-m-d');
        ?>
        <url>
            <loc><?php echo esc_url($loc); ?></loc>
            <lastmod><?php echo $lastmod; ?></lastmod>
            <changefreq>weekly</changefreq>
            <priority>0.7</priority>
        </url>
        <?php
    endwhile;
    wp_reset_postdata();
endif;
?>

4. Закрываем тег urlset

В конце файла закрываем тег </urlset>:

</urlset>

5. Роутинг sitemap.xml на наш шаблон

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

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

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

function wpcource_sitemap_template() {
    if (get_query_var('sitemap')) {
        include get_template_directory() . '/sitemap.xml.php';
        exit;
    }
}
add_action('template_redirect', 'wpcource_sitemap_template');

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

Дополнительные возможности и оптимизации для sitemap

Фильтрация и исключение страниц

В реальных проектах далеко не все страницы должны попадать в sitemap. Можно добавить фильтр по ID, меткам, категориям или по пользовательским полям. Например, исключим страницы с определённым ID:

$exclude_ids = [12, 34];
$args = [
    'post_type' => ['post', 'page'],
    'post_status' => 'publish',
    'posts_per_page' => -1,
    'post__not_in' => $exclude_ids,
];

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

Если у вас есть кастомные типы записей, например, портфолио или товары, их тоже можно добавить в sitemap, указав в параметре post_type массив с нужными типами.

Кэширование sitemap

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

$sitemap = get_transient('wpcource_sitemap_cache');
if (!$sitemap) {
    ob_start();
    // Генерируем весь sitemap как показано выше
    $sitemap = ob_get_clean();
    set_transient('wpcource_sitemap_cache', $sitemap, 12 * HOUR_IN_SECONDS);
}
echo $sitemap;
exit;

Проверка sitemap и интеграция с Google Search Console

После создания sitemap.xml важно проверить его валидность. Для этого используйте сервисы:

Регулярное обновление sitemap и его корректное отображение ускоряют индексацию новых страниц и улучшает SEO сайта.

Выводы и рекомендации

Создание собственного sitemap.xml без плагинов — практичный и гибкий способ управления структурой сайта в глазах поисковиков. Вы получаете полный контроль, возможность кастомизации и минимальную нагрузку на сайт. Если хотите автоматизировать этот процесс и расширить функционал, можете посмотреть плагины вроде Clearfy Pro, который оптимизирует SEO-настройки и умеет работать с sitemap.

WooCommerce: автоматическое изменение статуса заказа при оплате через платежные системы
28.05.2026
Оптимальные хуки WordPress для улучшения производительности сайта
29.11.2025
WooCommerce: автоматическое изменение статуса заказа при возврате товара
10.06.2026
Удаление неиспользуемых CSS и JS в WordPress для ускорения загрузки
26.01.2026
Как удалить кэш и очистить базу данных WordPress для ускорения сайта
15.11.2025

Обучение разработке на WordPress, как создавать темы, плагины. Подробнее об обучении.