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

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

Зачем нужен sitemap и особенности его создания в WordPress

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

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

Создание sitemap вручную позволяет:

  • Добавлять кастомные типы записей и таксономии;
  • Исключать ненужные страницы из индекса;
  • Оптимизировать структуру для SEO-задач;
  • Автоматически обновлять sitemap при изменении контента.

Создание базового sitemap в WordPress на PHP

Для начала создадим простой скрипт, который будет выводить ссылки на все опубликованные записи и страницы в формате XML. Этот код можно разместить в файле темы functions.php либо оформить как отдельный шаблон.

Пример базового кода для sitemap

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

    // Получаем посты
    $args = array(
        'post_type' => array('post', 'page'),
        'post_status' => 'publish',
        'posts_per_page' => -1
    );
    $posts = get_posts($args);

    foreach ($posts as $post) {
        setup_postdata($post);
        echo '<url>\n';
        echo '<loc>' . esc_url(get_permalink($post->ID)) . '</loc>\n';
        echo '<lastmod>' . get_the_modified_date('c', $post->ID) . '</lastmod>\n';
        echo '<changefreq>weekly</changefreq>\n';
        echo '<priority>0.8</priority>\n';
        echo '</url>\n';
    }

    wp_reset_postdata();
    echo '</urlset>';
    exit;
}

// Регистрируем endpoint для sitemap
add_action('init', function() {
    add_rewrite_rule('^custom-sitemap\.xml$', 'index.php?custom_sitemap=1', 'top');
});

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

add_action('template_redirect', function() {
    if (get_query_var('custom_sitemap')) {
        cyrtolat_generate_sitemap();
    }
});

Этот код создаёт новый URL https://ваш-сайт/custom-sitemap.xml, который выводит xml-карту сайта с постами и страницами.

После добавления кода не забудьте обновить правила перезаписи (Permalinks) в админке WordPress — просто сохраните настройки постоянных ссылок, чтобы правило вступило в силу.

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

В реальном проекте почти всегда используются не только стандартные записи и страницы, но и кастомные типы записей (Custom Post Types, CPT), а также таксономии (например, категории и метки). Их тоже следует включать в sitemap.

Пример кода с CPT и таксономиями

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

    // Типы записей для sitemap
    $post_types = array('post', 'page', 'product', 'news'); // добавьте свои CPT

    foreach ($post_types as $post_type) {
        $posts = get_posts(array(
            'post_type' => $post_type,
            'post_status' => 'publish',
            'posts_per_page' => -1
        ));

        foreach ($posts as $post) {
            setup_postdata($post);
            echo '<url>\n';
            echo '<loc>' . esc_url(get_permalink($post->ID)) . '</loc>\n';
            echo '<lastmod>' . get_the_modified_date('c', $post->ID) . '</lastmod>\n';
            echo '<changefreq>weekly</changefreq>\n';
            echo '<priority>0.7</priority>\n';
            echo '</url>\n';
        }
    }

    wp_reset_postdata();

    // Добавляем таксономии (категории, метки и др.)
    $taxonomies = array('category', 'post_tag'); // добавьте свои таксономии
    foreach ($taxonomies as $taxonomy) {
        $terms = get_terms(array('taxonomy' => $taxonomy, 'hide_empty' => true));
        if (!empty($terms) && !is_wp_error($terms)) {
            foreach ($terms as $term) {
                echo '<url>\n';
                echo '<loc>' . esc_url(get_term_link($term)) . '</loc>\n';
                echo '<changefreq>weekly</changefreq>\n';
                echo '<priority>0.5</priority>\n';
                echo '</url>\n';
            }
        }
    }

    echo '</urlset>';
    exit;
}

В этом примере в sitemap добавляются записи, страницы, кастомные типы post_type 'product' и 'news', а также категории и теги.

Оптимизация и кеширование sitemap

Генерация sitemap динамически при каждом обращении может создавать нагрузку на сервер, особенно на крупных проектах с тысячами записей. Чтобы оптимизировать работу, рекомендуется кешировать сгенерированный XML.

Можно использовать transient API WordPress или записывать sitemap в файл на сервере и обновлять его по расписанию через WP-Cron.

Пример кеширования sitemap с использованием transient API

function cyrtolat_generate_sitemap_with_cache() {
    $cache_key = 'cyrtolat_sitemap_cache';
    $cached_sitemap = get_transient($cache_key);

    if ($cached_sitemap) {
        header('Content-Type: application/xml; charset=utf-8');
        echo $cached_sitemap;
        exit;
    }

    ob_start();
    // Вставьте сюда код генерации sitemap (как в предыдущих примерах)
    // Например, вызов функции cyrtolat_generate_sitemap_content() которая возвращает xml строку

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

    $posts = get_posts(array('post_type' => 'post', 'post_status' => 'publish', 'posts_per_page' => -1));
    foreach ($posts as $post) {
        setup_postdata($post);
        echo '<url>\n';
        echo '<loc>' . esc_url(get_permalink($post->ID)) . '</loc>\n';
        echo '<lastmod>' . get_the_modified_date('c', $post->ID) . '</lastmod>\n';
        echo '<changefreq>weekly</changefreq>\n';
        echo '<priority>0.8</priority>\n';
        echo '</url>\n';
    }

    wp_reset_postdata();

    echo '</urlset>';

    $sitemap_content = ob_get_clean();
    set_transient($cache_key, $sitemap_content, 12 * HOUR_IN_SECONDS); // Кеш на 12 часов

    header('Content-Type: application/xml; charset=utf-8');
    echo $sitemap_content;
    exit;
}

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

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

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

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

Проверка и отправка sitemap в поисковые системы

После создания sitemap важно проверить его валидность. Для этого можно использовать официальные инструменты Google Search Console и Яндекс.Вебмастер. Там же можно отправить ссылку на sitemap для ускорения индексации.

URL sitemap будет выглядеть примерно так: https://ваш-сайт/custom-sitemap.xml. Убедитесь, что этот адрес доступен и корректно отдаёт XML.

В файле robots.txt добавьте строку:

Sitemap: https://ваш-сайт/custom-sitemap.xml

Это дополнительно поможет поисковым ботам найти карту сайта.

Итоги

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

Такой подход идеально подходит для сайтов с нестандартной структурой и высокими требованиями к SEO.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как использовать WP GPT для автоматизации создания контента в WordPress
06.02.2026
Как автоматизировать перевод содержимого WordPress с помощью WPGPT
09.03.2026
Как сделать автоматическую удаленную очистку базы данных WordPress
15.01.2026
Как избежать проблем с оформлением перевода в WordPress: практические советы и примеры
10.12.2025
WooCommerce: автоматическое исключение товаров без остатка из каталога
07.06.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше