wp-lessons.ru wordpress WP-Lessons

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

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

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

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

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

Основные требования к Sitemap XML

Для корректной работы Sitemap должен соответствовать стандарту Sitemap Protocol. В нем указываются URL страниц сайта, дата последнего обновления, приоритет и частота изменения. Минимально необходимо указать URL и дату изменения.

Обязательно соблюдение правильной кодировки (UTF-8) и структуры XML. Наше решение будет генерировать валидный XML, который можно проверить через инструменты Google Search Console и Яндекс.Вебмастер.

Создание функции генерации Sitemap в WordPress

Для начала создадим функцию wp_lessons_generate_sitemap, которая будет формировать XML-контент карты сайта с учетом стандартных и кастомных типов записей.

function wp_lessons_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">';

    // Получаем страницы и посты
    $args = [
        'post_type' => ['post', 'page'],
        'post_status' => 'publish',
        'posts_per_page' => -1
    ];
    $query = new WP_Query($args);

    while ($query->have_posts()) {
        $query->the_post();
        $url = get_permalink();
        $modified = get_the_modified_date('c');

        echo '<url>';
        echo '<loc>' . esc_url($url) . '</loc>';
        echo '<lastmod>' . esc_html($modified) . '</lastmod>';
        echo '<changefreq>weekly</changefreq>';
        echo '<priority>0.8</priority>';
        echo '</url>';
    }
    wp_reset_postdata();

    echo '</urlset>';
    exit;
}

Эта функция выводит список всех опубликованных записей и страниц с датой последнего изменения и базовыми значениями changefreq и priority.

Регистрация rewrite правила и endpoint для Sitemap

Для удобного доступа к карте сайта создадим endpoint /sitemap.xml с помощью rewrite правил. Добавим в functions.php следующий код:

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

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

function wp_lessons_template_redirect_sitemap() {
    if (get_query_var('sitemap') == 1) {
        wp_lessons_generate_sitemap();
    }
}
add_action('template_redirect', 'wp_lessons_template_redirect_sitemap');

После добавления этого кода необходимо обновить настройки пермалинков (Настройки - Постоянные ссылки) для активации правила.

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

Если на сайте используются кастомные типы записей, например, product или portfolio, их тоже стоит добавить в Sitemap. Для этого расширим аргументы запроса:

$args = [
    'post_type' => ['post', 'page', 'product', 'portfolio'],
    'post_status' => 'publish',
    'posts_per_page' => -1
];

Также можно добавить таксономии, например категории или теги, чтобы они тоже индексировались:

$taxonomies = ['category', 'post_tag'];
foreach ($taxonomies as $taxonomy) {
    $terms = get_terms(['taxonomy' => $taxonomy, 'hide_empty' => true]);
    if (!empty($terms) && !is_wp_error($terms)) {
        foreach ($terms as $term) {
            $url = get_term_link($term);
            echo '<url>';
            echo '<loc>' . esc_url($url) . '</loc>';
            echo '<changefreq>weekly</changefreq>';
            echo '<priority>0.6</priority>';
            echo '</url>';
        }
    }
}
<

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

Генерация Sitemap на больших сайтах может занимать много времени. Чтобы избежать нагрузки, стоит добавить кеширование результата с помощью Transients API:

function wp_lessons_generate_sitemap() {
    header('Content-Type: application/xml; charset=utf-8');

    $cached = get_transient('wp_lessons_sitemap_cache');
    if ($cached) {
        echo $cached;
        exit;
    }

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

    echo '</urlset>';

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

    echo $output;
    exit;
}

Так Sitemap будет генерироваться не чаще одного раза в 12 часов, что значительно снизит нагрузку.

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

Для пользователей WPSHOP, например с темой Reboot или плагинами типа Clearfy Pro, можно расширить Sitemap дополнительными URL, например, страницами настроек или пользовательскими разделами. Для этого добавьте соответствующие URL вручную в XML или расширьте функцию выборки.

Проверка Sitemap и рекомендации

После реализации Sitemap обязательно проверьте его работоспособность через:

  • Google Search Console — раздел «Sitemaps»;
  • Яндекс.Вебмастер — раздел «Индексирование»;
  • валидаторы XML, например xml-sitemaps.com.

Обратите внимание на правильное отображение всех URL и отсутствие ошибок. При необходимости корректируйте функцию генерации.

×

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

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

пишет статьи

готовит SEO

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

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