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

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

Что такое sitemap и зачем он нужен в WordPress

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

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

Создание sitemap вручную: базовый пример генератора

Давайте создадим функцию wpma_generate_sitemap, которая сформирует XML-карту сайта с основными страницами, записями и категориями.

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

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

    // Получаем все опубликованные записи
    $posts = get_posts(array(
        'numberposts' => -1,
        'post_type' => 'post',
        'post_status' => 'publish'
    ));

    foreach ($posts as $post) {
        echo '<url>';
        echo '<loc>' . get_permalink($post) . '</loc>';
        echo '<priority>0.8</priority>';
        echo '<changefreq>weekly</changefreq>';
        echo '</url>';
    }

    // Добавляем страницы
    $pages = get_pages(array('post_status' => 'publish'));
    foreach ($pages as $page) {
        echo '<url>';
        echo '<loc>' . get_permalink($page) . '</loc>';
        echo '<priority>0.7</priority>';
        echo '<changefreq>monthly</changefreq>';
        echo '</url>';
    }

    echo '</urlset>';
    exit;
}

Эту функцию можно привязать к отдельному URL, например, через rewrite rules или страницу шаблона. Далее разберём, как это сделать.

Как вывести sitemap по адресу /sitemap.xml через rewrite rules

Чтобы sitemap был доступен по удобному адресу, например, https://ваш-сайт.ru/sitemap.xml, добавим правило в .htaccess или лучше используем WordPress rewrite API.

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

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

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

function wpma_sitemap_template() {
    if (get_query_var('sitemap')) {
        wpma_generate_sitemap();
    }
}
add_action('template_redirect', 'wpma_sitemap_template');

После добавления этого кода необходимо обновить правила пермалинков в админке: Настройки → Постоянные ссылки → Сохранить изменения. Это активирует новое правило.

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

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

Например, для кастомного типа записей product и таксономии product_cat:

// Добавляем кастомный тип записей
$custom_posts = get_posts(array(
    'numberposts' => -1,
    'post_type' => 'product',
    'post_status' => 'publish'
));
foreach ($custom_posts as $cpost) {
    echo '<url>';
    echo '<loc>' . get_permalink($cpost) . '</loc>';
    echo '<priority>0.9</priority>';
    echo '<changefreq>weekly</changefreq>';
    echo '</url>';
}

// Добавляем термины таксономии
$terms = get_terms(array(
    'taxonomy' => 'product_cat',
    'hide_empty' => true
));
foreach ($terms as $term) {
    echo '<url>';
    echo '<loc>' . get_term_link($term) . '</loc>';
    echo '<priority>0.6</priority>';
    echo '<changefreq>monthly</changefreq>';
    echo '</url>';
}

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

Советы по оптимизации и отладке sitemap

При создании собственного sitemap важно:

  • Убедиться, что все ссылки корректны и ведут на существующие страницы.
  • Учитывать ограничения поисковых систем: например, Google рекомендует не более 50 000 URL и не более 50 Мб на sitemap.
  • Добавлять sitemap в Google Search Console и другие инструменты для вебмастеров.
  • Использовать кэширование генерации sitemap, чтобы не нагружать сервер при каждом запросе.

Для кэширования можно использовать transient API WordPress, например:

function wpma_generate_sitemap_cached() {
    $sitemap = get_transient('wpma_sitemap_cache');
    if ($sitemap === false) {
        ob_start();
        wpma_generate_sitemap();
        $sitemap = ob_get_clean();
        set_transient('wpma_sitemap_cache', $sitemap, HOUR_IN_SECONDS);
    }
    echo $sitemap;
    exit;
}

Плагины для автоматизации sitemap и их преимущества

Если вы не хотите писать код самостоятельно, можно использовать готовые решения. На wpshop.ru есть несколько полезных плагинов, которые помогут с созданием и управлением sitemap:

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

Эти плагины облегчают задачу, но зачастую написанный вручную код даёт больший контроль и гибкость.

Удаление неиспользуемых метаданных в WordPress: оптимизация базы данных
02.11.2025
Как использовать WPRemark для автоматизации отзывов в WordPress
10.03.2026
Как отключить Emoji в WordPress для ускорения сайта
12.04.2026
WooCommerce: как исключить определённые товары из поиска и категорий
24.06.2026
Как удалить или скрыть категории из публикаций WordPress
02.02.2026