Как создать автоматический 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.

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

⭐⭐⭐⭐⭐
Как создать автоматический sitemap в WordPress без плагинов
12.04.2026
Автоматическое удаление товаров без остатка со склада WooCommerce
06.08.2026
Как автоматизировать удалённую оптимизацию базы данных WordPress без плагинов
16.03.2026
Автоматическое отключение неактивных способов оплаты WooCommerce
11.05.2026
Как добавить обратный отчет после отправки формы в WordPress
30.12.2025
×

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

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

пишет статьи

готовит SEO

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

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