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

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

Что такое динамическая Sitemap и зачем она нужна

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

WordPress по умолчанию с версии 5.5 генерирует базовую Sitemap по адресу /wp-sitemap.xml, но она может не покрывать все ваши кастомные типы записей, таксономии или иметь ограниченные возможности настройки. Создание собственной Sitemap позволит вам контролировать структуру и содержимое файла.

Подготовка к созданию кастомной Sitemap

Для начала необходимо определиться, какие типы записей и таксономии вы хотите включить в Sitemap. Обычно это посты, страницы и, если есть, кастомные типы записей. Также важно соблюдать требования поисковых систем к формату XML и объему Sitemap (максимум 50 000 URL или 50 Мб).

Рекомендуется создать отдельный шаблон или endpoint, который будет отдавать XML. В этом примере мы создадим rewrite правило и обработчик для URL /custom-sitemap.xml.

Добавление rewrite правила для кастомной Sitemap

Добавим rewrite правило и зарегистрируем endpoint:

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

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

add_action('template_redirect', 'wp_host_custom_sitemap_template');
function wp_host_custom_sitemap_template() {
    if (get_query_var('custom_sitemap')) {
        wp_host_generate_sitemap_xml();
        exit;
    }
}

После добавления этого кода нужно обновить правила пермалинков в админке (Настройки > Постоянные ссылки) для применения rewrite правила.

Генерация XML Sitemap в функции

Теперь создадим функцию wp_host_generate_sitemap_xml(), которая будет формировать XML и выводить его с правильным заголовком:

function wp_host_generate_sitemap_xml() {
    header('Content-Type: application/xml; charset=utf-8');

    $posts = get_posts(array(
        'post_type' => array('post', 'page'),
        'post_status' => 'publish',
        'numberposts' => -1,
    ));

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

    foreach ($posts as $post) {
        $permalink = get_permalink($post);
        $lastmod = get_the_modified_time('c', $post);
        echo "  <url>\n";
        echo "    <loc>" . esc_url($permalink) . "</loc>\n";
        echo "    <lastmod>" . esc_html($lastmod) . "</lastmod>\n";
        echo "    <changefreq>weekly</changefreq>\n";
        echo "    <priority>0.8</priority>\n";
        echo "  </url>\n";
    }

    echo "</urlset>";
}

В этом примере мы включаем в Sitemap все опубликованные записи типа post и page, указываем дату последнего изменения, частоту обновления и приоритет. Чтобы добавить кастомные типы записей, просто допишите их в массив post_type.

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

Часто на сайте есть пользовательские типы записей, например, product или portfolio. Их также стоит включить в Sitemap для полной индексации.

Расширим код функции генерации:

function wp_host_generate_sitemap_xml() {
    header('Content-Type: application/xml; charset=utf-8');

    $post_types = array('post', 'page', 'product', 'portfolio'); // Добавьте свои типы

    $posts = get_posts(array(
        'post_type' => $post_types,
        'post_status' => 'publish',
        'numberposts' => -1,
    ));

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

    foreach ($posts as $post) {
        $permalink = get_permalink($post);
        $lastmod = get_the_modified_time('c', $post);
        echo "  <url>\n";
        echo "    <loc>" . esc_url($permalink) . "</loc>\n";
        echo "    <lastmod>" . esc_html($lastmod) . "</lastmod>\n";
        echo "    <changefreq>weekly</changefreq>\n";
        echo "    <priority>0.8</priority>\n";
        echo "  </url>\n";
    }

    // Добавим категории
    $categories = get_terms(array(
        'taxonomy' => 'category',
        'hide_empty' => true,
    ));

    foreach ($categories as $cat) {
        $link = get_term_link($cat);
        if (!is_wp_error($link)) {
            echo "  <url>\n";
            echo "    <loc>" . esc_url($link) . "</loc>\n";
            echo "    <changefreq>weekly</changefreq>\n";
            echo "    <priority>0.6</priority>\n";
            echo "  </url>\n";
        }
    }

    echo "</urlset>";
}

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

Пример использования плагина Clearfy Pro для настройки Sitemap

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

Преимущества собственного решения и рекомендации

Создание своей Sitemap с помощью кода даёт полный контроль над содержимым, позволяет добавлять кастомные типы записей и таксономии, а также интегрировать специфичные для вашего сайта метаданные. Однако важно помнить:

  • Не забывайте обновлять правила пермалинков при добавлении rewrite правил.
  • Проверяйте корректность XML через валидаторы (например, https://www.xml-sitemaps.com/validate-xml-sitemap.html).
  • Не перегружайте Sitemap слишком большим количеством URL — при необходимости разбивайте её на части.
  • Обновляйте Sitemap при изменении структуры сайта.

Такой подход позволит значительно улучшить индексацию сайта и повысить его SEO-потенциал.

Как решить проблему с не отправкой писем в WordPress через SMTP
20.04.2026
Как создать мультисайт WordPress с поддоменами: подробное руководство
13.01.2026
Как отключить Emoji в WordPress для ускорения сайта
18.03.2026
Использование PHP 8 в WordPress на wp-host.ru: практические советы и примеры
05.12.2025
Как разрешить доступ к WordPress по IP адресу
21.12.2025