Sitemap — одна из важных составляющих SEO-оптимизации сайта. Он помогает поисковым системам быстрее индексировать страницы вашего ресурса. В этой статье мы подробно разберём, как создать автоматический sitemap.xml в WordPress без использования плагинов, используя собственный код. Это позволит вам получить лёгкий, быстрый и гибкий инструмент, который вы сможете адаптировать под свои нужды.
Зачем создавать sitemap без плагинов
Хотя в WordPress существует множество плагинов для генерации sitemap (например, Google XML Sitemaps, Yoast SEO), иногда их использование нежелательно из-за:
- Излишней нагрузки на сайт.
- Ограниченной кастомизации.
- Проблем совместимости с другими плагинами или темой.
Создавая sitemap вручную, вы получаете полный контроль над форматом, содержимым и логикой генерации, что особенно полезно для сложных или уникальных сайтов.
Как работает стандартный Sitemap.xml и что он должен содержать
Sitemap — это XML-файл, который содержит список URL сайта с дополнительной информацией: дата последнего обновления, частота изменения и приоритет для индексации. Пример стандартной записи:
<url>
<loc>https://example.com/page1/</loc>
<lastmod>2024-06-10</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>Чтобы поисковые системы корректно воспринимали sitemap, он должен строго соответствовать XML-стандарту.
Создание динамического sitemap.xml в WordPress: пошаговое руководство
1. Создаём отдельный шаблон для sitemap
Для начала создадим файл sitemap.xml.php в корне темы (например, wp-content/themes/your-theme/). В этом файле мы будем генерировать XML динамически.
В начале файла указываем заголовок для отдачи XML:
<?php
header('Content-Type: application/xml; charset=utf-8');
?>2. Выводим стандартную XML-шапку
Далее добавляем стандартное объявление XML и открывающий тег <urlset> с нужными namespace:
<?php
header('Content-Type: application/xml; charset=utf-8');
?>
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">3. Получаем список страниц и записей
Используем WP_Query для выборки всех опубликованных страниц и записей, которые мы хотим включить в sitemap:
<?php
$args = [
'post_type' => ['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();
$loc = get_permalink();
$lastmod = get_the_modified_date('Y-m-d');
?>
<url>
<loc><?php echo esc_url($loc); ?></loc>
<lastmod><?php echo $lastmod; ?></lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
<?php
endwhile;
wp_reset_postdata();
endif;
?>4. Закрываем тег urlset
В конце файла закрываем тег </urlset>:
</urlset>5. Роутинг sitemap.xml на наш шаблон
Чтобы WordPress понимал, что при запросе /sitemap.xml нужно отдавать наш файл, добавим в functions.php следующий код:
function wpcource_add_sitemap_rewrite() {
add_rewrite_rule('^sitemap\.xml$', 'index.php?sitemap=1', 'top');
}
add_action('init', 'wpcource_add_sitemap_rewrite');
function wpcource_add_sitemap_query_var($vars) {
$vars[] = 'sitemap';
return $vars;
}
add_filter('query_vars', 'wpcource_add_sitemap_query_var');
function wpcource_sitemap_template() {
if (get_query_var('sitemap')) {
include get_template_directory() . '/sitemap.xml.php';
exit;
}
}
add_action('template_redirect', 'wpcource_sitemap_template');После добавления нужно обновить правила перезаписи, зайдя в админку WordPress в Настройки → Постоянные ссылки и просто сохранив настройки.
Дополнительные возможности и оптимизации для sitemap
Фильтрация и исключение страниц
В реальных проектах далеко не все страницы должны попадать в sitemap. Можно добавить фильтр по ID, меткам, категориям или по пользовательским полям. Например, исключим страницы с определённым ID:
$exclude_ids = [12, 34];
$args = [
'post_type' => ['post', 'page'],
'post_status' => 'publish',
'posts_per_page' => -1,
'post__not_in' => $exclude_ids,
];Добавление кастомных типов записей
Если у вас есть кастомные типы записей, например, портфолио или товары, их тоже можно добавить в sitemap, указав в параметре post_type массив с нужными типами.
Кэширование sitemap
Генерация sitemap при каждом запросе может нагружать сервер, особенно на больших сайтах. Рекомендуется добавить кэширование результата, например, с помощью Transients API:
$sitemap = get_transient('wpcource_sitemap_cache');
if (!$sitemap) {
ob_start();
// Генерируем весь sitemap как показано выше
$sitemap = ob_get_clean();
set_transient('wpcource_sitemap_cache', $sitemap, 12 * HOUR_IN_SECONDS);
}
echo $sitemap;
exit;Проверка sitemap и интеграция с Google Search Console
После создания sitemap.xml важно проверить его валидность. Для этого используйте сервисы:
- Google Search Console — добавьте URL своего sitemap и следите за статусом индексации.
- Проверка sitemap на ошибки.
Регулярное обновление sitemap и его корректное отображение ускоряют индексацию новых страниц и улучшает SEO сайта.
Выводы и рекомендации
Создание собственного sitemap.xml без плагинов — практичный и гибкий способ управления структурой сайта в глазах поисковиков. Вы получаете полный контроль, возможность кастомизации и минимальную нагрузку на сайт. Если хотите автоматизировать этот процесс и расширить функционал, можете посмотреть плагины вроде Clearfy Pro, который оптимизирует SEO-настройки и умеет работать с sitemap.