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

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

Почему стоит создавать sitemap без плагинов

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

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

Создаем простой sitemap.xml с помощью кастомного кода

Давайте рассмотрим, как можно создать sitemap.xml в корне сайта на WordPress с помощью добавления собственного обработчика запроса и генерации XML динамически.

Шаг 1. Добавляем rewrite правило и обработчик запроса

Для начала в functions.php вашей темы (например, в дочерней теме Hueman) добавим функцию, которая будет обрабатывать запрос к /sitemap.xml:

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

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

function hueman_sitemap_template_redirect() {
    if (get_query_var('hueman_sitemap')) {
        hueman_generate_sitemap_xml();
        exit;
    }
}
add_action('template_redirect', 'hueman_sitemap_template_redirect');

Этот код добавляет правило, чтобы при обращении к /sitemap.xml WordPress запускал нашу функцию генерации sitemap.

Шаг 2. Генерация sitemap.xml

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

function hueman_generate_sitemap_xml() {
    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,
    );
    $query = new WP_Query($args);

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $post_url = get_permalink();
            $post_date = get_the_modified_date('c');

            echo "<url>\n";
            echo "  <loc>" . esc_url($post_url) . "</loc>\n";
            echo "  <lastmod>" . esc_html($post_date) . "</lastmod>\n";
            echo "  <changefreq>weekly</changefreq>\n";
            echo "  <priority>0.8</priority>\n";
            echo "</url>\n";
        }
        wp_reset_postdata();
    }

    echo '</urlset>';
}

Здесь мы выводим все посты и страницы в формате XML, который понимают поисковики. Можно расширить логику, добавив другие типы записей или таксономии.

Дополнительные настройки sitemap: таксономии и пользовательские посты

Для полноты картины полезно добавить в sitemap рубрики, метки и пользовательские типы записей, если они есть на вашем сайте. Это обеспечит поисковым системам более полное индексирование.

В коде функции генерации можно добавить так:

$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) {
            $term_link = get_term_link($term);
            if (!is_wp_error($term_link)) {
                echo "<url>\n";
                echo "  <loc>" . esc_url($term_link) . "</loc>\n";
                echo "  <changefreq>weekly</changefreq>\n";
                echo "  <priority>0.6</priority>\n";
                echo "</url>\n";
            }
        }
    }
}

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

Как обновить правила перезаписи и проверить работу sitemap

После добавления rewrite правила необходимо обновить постоянные ссылки в настройках WordPress. Для этого зайдите в Настройки > Постоянные ссылки и просто нажмите кнопку «Сохранить изменения» без изменения настроек. Это сбросит и обновит rewrite правила.

Теперь перейдите по адресу https://ваш-сайт.ru/sitemap.xml и убедитесь, что выводится корректный XML с ссылками на ваши посты и страницы.

Интеграция с плагинами и SEO сервисами

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

Для уведомления поисковых систем о вашем sitemap можно добавить ссылку в файл robots.txt:

User-agent: *
Disallow:
Sitemap: https://ваш-сайт.ru/sitemap.xml

Это повысит шансы на своевременное и полное индексирование страниц.

Расширение: кэширование sitemap для ускорения генерации

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

Пример с transient:

function hueman_generate_sitemap_xml() {
    $cached = get_transient('hueman_sitemap_xml');
    if ($cached) {
        header('Content-Type: application/xml; charset=utf-8');
        echo $cached;
        return;
    }

    ob_start();
    echo '<?xml version="1.0" encoding="UTF-8"?>\n';
    echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n';
    
    // Здесь ваш код по выборке и выводу ссылок
    
    echo '</urlset>';

    $output = ob_get_clean();
    set_transient('hueman_sitemap_xml', $output, 12 * HOUR_IN_SECONDS);

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

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

Итоговые рекомендации

  • Используйте собственный sitemap, если хотите точный контроль и минимальный вес сайта.
  • Обязательно обновляйте rewrite правила и проверяйте sitemap после изменений.
  • Добавляйте в sitemap все важные типы записей и таксономии.
  • Рассмотрите кэширование для больших сайтов.
  • Информируйте поисковики через robots.txt и Google Search Console.

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

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

⭐⭐⭐⭐⭐
Как создать динамические таблицы в WordPress с помощью шорткодов
20.11.2025
Как создать динамические поля в WordPress для расширения форм
09.01.2026
Как создать собственный виджет в WordPress: подробное руководство
13.11.2025
Как создать динамические меню в WordPress без плагинов: подробное руководство
23.12.2025
Как создать автоматический sitemap в WordPress без плагинов
30.12.2025
×
-20%
Рождественский
апгрейд начинается *
Воспользоваться скидкой сейчас
* на темы и плагины WordPress