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

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

Почему стоит сделать sitemap вручную через код

Многие пользователи автоматически устанавливают плагины вроде Google XML Sitemaps или Yoast SEO, которые генерируют sitemap. Однако у таких решений есть свои минусы:

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

Если вы хотите иметь лёгкое, быстрое и понятное решение, написанное под себя, создание sitemap через код — отличный вариант.

Основные требования к sitemap.xml

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

  • Правильная XML-структура с корневым тегом <urlset>.
  • Каждый URL обёрнут в тег <url> и содержит <loc>, <lastmod>, <changefreq> и <priority> (необязательно).
  • Файл должен быть доступен по адресу https://example.com/sitemap.xml.

Как создать sitemap.xml в WordPress с помощью кода

Для начала создадим PHP-функцию, которая будет выводить sitemap в правильном формате. Сделаем так, чтобы по запросу к /sitemap.xml WordPress отдавал сгенерированный файл.

Шаг 1. Добавляем rewrite правило для sitemap.xml

Добавим новое правило в файл functions.php вашей темы или в отдельный плагин:

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

Это правило направит запрос к sitemap.xml на специальный параметр запроса sitemap=1.

Шаг 2. Регистрируем новый query var

Чтобы WordPress понимал параметр sitemap, регистрируем его:

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

Шаг 3. Обрабатываем запрос и выводим sitemap

Теперь ловим запрос с sitemap=1 и выводим XML:

function wpmy_sitemap_template() {
    if (get_query_var('sitemap') == 1) {
        header('Content-Type: application/xml; charset=' . get_bloginfo('charset'), true);
        echo '<?xml version="1.0" encoding="' . get_bloginfo('charset') . '" ?>';
        echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';

        // Добавляем главную страницу
        echo '<url>';
        echo '<loc>' . esc_url(home_url('/')) . '</loc>';
        echo '<lastmod>' . get_the_modified_date('c') . '</lastmod>';
        echo '<changefreq>daily</changefreq>';
        echo '<priority>1.0</priority>';
        echo '</url>';

        // Добавляем страницы
        $pages = get_pages();
        foreach ($pages as $page) {
            echo '<url>';
            echo '<loc>' . get_permalink($page->ID) . '</loc>';
            echo '<lastmod>' . get_post_modified_time('c', true, $page->ID) . '</lastmod>';
            echo '<changefreq>weekly</changefreq>';
            echo '<priority>0.8</priority>';
            echo '</url>';
        }

        // Добавляем записи блога
        $posts = get_posts(array('numberposts' => -1, 'post_status' => 'publish'));
        foreach ($posts as $post) {
            echo '<url>';
            echo '<loc>' . get_permalink($post->ID) . '</loc>';
            echo '<lastmod>' . get_post_modified_time('c', true, $post->ID) . '</lastmod>';
            echo '<changefreq>monthly</changefreq>';
            echo '<priority>0.6</priority>';
            echo '</url>';
        }

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

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

Дополнительные настройки и расширения sitemap

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

Если нужно исключить из sitemap определённые страницы, можно добавить проверку в циклах. Например, исключить страницу с ID 42:

if ($page->ID == 42) continue;

Или добавить условие по шаблону URL.

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

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

$custom_posts = get_posts(array(
    'post_type' => 'product', // пример
    'numberposts' => -1,
    'post_status' => 'publish'
));
foreach ($custom_posts as $post) {
    // выводим URL как выше
}

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

При большом количестве страниц стоит реализовать кэширование результата в файл или объектный кэш, чтобы не генерировать sitemap при каждом запросе. Например, использовать Transients API WordPress для хранения XML на 12 часов.

Проверка работы и обновление правил

После добавления кода нужно обновить правила перезаписи URL (rewrite rules). Это можно сделать в админке WordPress в разделе Настройки > Постоянные ссылки — просто нажмите «Сохранить изменения» без изменений.

Далее откройте в браузере https://ваш-сайт.ru/sitemap.xml и проверьте, что выводится корректный XML sitemap.

Пример использования плагина Clearfy Pro для SEO оптимизации sitemap

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

Но если вы хотите лёгкое и кастомное решение без плагинов, описанный выше код отлично справится с задачей.

Итоги

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

При необходимости можно комбинировать это решение с плагинами, например, Clearfy Pro, для расширенной SEO-оптимизации.

Как отключить XML-RPC в WordPress для защиты сайта
10.03.2026
Автоматическое удаление отсутствующих товаров в WooCommerce
10.05.2026
WooCommerce: правильное отображение вариаций товаров — практическое руководство
17.05.2026
Как удалить вредоносные плагины в WordPress: пошаговое руководство
13.11.2025
Как установить файл для отладки (debug.log) в WordPress и использовать его для поиска ошибок
18.02.2026