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

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

Зачем создавать собственный sitemap в WordPress

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

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

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

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

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

Стандарт sitemap описан на сайте sitemaps.org. Следование этому стандарту обязательно для корректного восприятия файла поисковыми системами.

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

Как создать sitemap.xml вручную в WordPress

Рассмотрим простой пример, как сгенерировать sitemap.xml динамически, используя хуки WordPress и собственный PHP-код.

1. Создание rewrite правила для sitemap

Для начала нужно зарегистрировать новый endpoint, чтобы при обращении к URL /sitemap.xml WordPress вызвал наш код.

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

Далее добавим новый query_var, чтобы распознавать параметр:

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

2. Перехват запроса и вывод sitemap

Теперь нужно отследить, когда пользователь обращается к sitemap=1, и вывести XML с заголовками:

function wptips_sitemap_template_redirect() {
    if (get_query_var('sitemap') == 1) {
        header('Content-Type: application/xml; charset=utf-8');
        echo wptips_generate_sitemap_xml();
        exit;
    }
}
add_action('template_redirect', 'wptips_sitemap_template_redirect');

3. Генерация XML карты сайта

Функция wptips_generate_sitemap_xml будет собирать URL и формировать XML-структуру.

function wptips_generate_sitemap_xml() {
    $posts = get_posts(array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'numberposts' => -1
    ));
    
    $xml = '<?xml version="1.0" encoding="UTF-8"?>';
    $xml .= "\n";
    $xml .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';

    foreach ($posts as $post) {
        $permalink = get_permalink($post);
        $lastmod = get_the_modified_date('c', $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>";
    }

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

Расширение sitemap для страниц, категорий и пользовательских типов записей

Чтобы сделать sitemap более полным, можно добавить страницы, категории и таксономии. Для примера добавим страницы и категории:

function wptips_generate_sitemap_xml() {
    $items = array();

    // Посты
    $posts = get_posts(array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'numberposts' => -1
    ));
    foreach ($posts as $post) {
        $items[] = array(
            'loc' => get_permalink($post),
            'lastmod' => get_the_modified_date('c', $post),
            'changefreq' => 'weekly',
            'priority' => '0.8'
        );
    }

    // Страницы
    $pages = get_pages(array('post_status' => 'publish'));
    foreach ($pages as $page) {
        $items[] = array(
            'loc' => get_permalink($page),
            'lastmod' => get_the_modified_date('c', $page),
            'changefreq' => 'monthly',
            'priority' => '0.6'
        );
    }

    // Категории
    $categories = get_categories(array('hide_empty' => true));
    foreach ($categories as $cat) {
        $items[] = array(
            'loc' => get_category_link($cat),
            'lastmod' => date('c'),
            'changefreq' => 'weekly',
            'priority' => '0.5'
        );
    }

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

    foreach ($items as $item) {
        $xml .= "\n<url>";
        $xml .= "\n<loc>" . esc_url($item['loc']) . "</loc>";
        $xml .= "\n<lastmod>" . $item['lastmod'] . "</lastmod>";
        $xml .= "\n<changefreq>" . $item['changefreq'] . "</changefreq>";
        $xml .= "\n<priority>" . $item['priority'] . "</priority>";
        $xml .= "\n</url>";
    }

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

Советы по оптимизации и безопасность sitemap

При создании собственного sitemap важно избегать ошибок, которые могут привести к некорректной индексации сайта.

  • Проверяйте, что все URL валидны и доступны.
  • Регулярно обновляйте дату последней модификации, чтобы поисковики знали о свежем контенте.
  • Используйте кэширование sitemap, если сайт большой, чтобы снизить нагрузку на сервер.
  • Не включайте в sitemap страницы с параметрами, дублирующийся контент или страницы с noindex.

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

function wptips_generate_sitemap_xml() {
    $cached = get_transient('wptips_sitemap_cache');
    if ($cached) {
        return $cached;
    }
    // ... генерация sitemap как ранее ...
    $xml = '...';
    set_transient('wptips_sitemap_cache', $xml, 12 * HOUR_IN_SECONDS);
    return $xml;
}

Использование плагинов для расширенного sitemap

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

Например, Clearfy Pro (подробнее на WPSHOP) позволяет гибко настраивать sitemap, отключать нежелательные страницы, интегрируется с SEO-плагинами.

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

Подведение итогов

Создание собственного sitemap в WordPress с помощью кода — отличный способ получить полный контроль над индексацией вашего сайта, оптимизировать его под нужды SEO и избежать лишних плагинов. В статье мы подробно рассмотрели, как зарегистрировать endpoint, сформировать XML и расширить функционал.

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

Как настроить автоматическую работу с сообщениями в WordPress
21.11.2025
Как создать динамические формы в WordPress с помощью REST API
27.01.2026
Удаление неиспользуемых медиафайлов в WordPress
04.11.2025
Как временно отключить WooCommerce без потери данных
17.02.2026
Как изменить URL адреса страниц в WordPress
10.11.2025