Sitemap — важный элемент для SEO, который помогает поисковым системам быстрее индексировать страницы сайта. Хотя существует множество плагинов для генерации sitemap, иногда полезно сделать это самостоятельно, чтобы иметь полный контроль над содержимым и структурой. В этой статье подробно разберём, как сделать автоматический sitemap в WordPress с помощью PHP-кода, без установки сторонних плагинов.
Почему стоит сделать sitemap вручную через код
Многие пользователи автоматически устанавливают плагины вроде Google XML Sitemaps или Yoast SEO, которые генерируют sitemap. Однако у таких решений есть свои минусы:
- Избыточные функции, которые могут замедлять сайт.
- Меньшая гибкость в настройке содержимого sitemap.
- Зависимость от стороннего плагина и его обновлений.
Если вы хотите иметь лёгкое, быстрое и понятное решение, написанное под себя, создание sitemap через код — отличный вариант.
Основные требования к sitemap.xml
Sitemap — это XML-файл, который содержит URL-адреса страниц вашего сайта и дополнительную информацию, например частоту обновления и приоритет. Важно соблюдать стандарты:
- Правильная XML-структура с корневым тегом <urlset>.
- Каждый URL обёрнут в тег <url> и содержит <loc>, <lastmod>, <changefreq> и <priority> (необязательно).
- Файл должен быть доступен по адресу
https://example.com/sitemap.xml.
Как создать sitemap.xml в WordPress с помощью кода
Для начала создадим PHP-функцию, которая будет выводить sitemap в правильном формате. Сделаем так, чтобы по запросу к /sitemap.xml WordPress отдавал сгенерированный файл.
Шаг 1. Добавляем rewrite правило для sitemap.xml
Добавим новое правило в файл functions.php вашей темы или в отдельный плагин:
function wpmy_add_sitemap_rewrite_rule() {
add_rewrite_rule('^sitemap\.xml$', 'index.php?sitemap=1', 'top');
}
add_action('init', 'wpmy_add_sitemap_rewrite_rule');Это правило направит запрос к sitemap.xml на специальный параметр запроса sitemap=1.
Шаг 2. Регистрируем новый query var
Чтобы WordPress понимал параметр sitemap, регистрируем его:
function wpmy_sitemap_query_vars($vars) {
$vars[] = 'sitemap';
return $vars;
}
add_filter('query_vars', 'wpmy_sitemap_query_vars');Шаг 3. Обрабатываем запрос и выводим sitemap
Теперь ловим запрос с sitemap=1 и выводим XML:
function wpmy_sitemap_template() {
if (get_query_var('sitemap') == 1) {
header('Content-Type: application/xml; charset=' . get_bloginfo('charset'), true);
echo '<?xml version="1.0" encoding="' . get_bloginfo('charset') . '" ?>';
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
// Добавляем главную страницу
echo '<url>';
echo '<loc>' . esc_url(home_url('/')) . '</loc>';
echo '<lastmod>' . get_the_modified_date('c') . '</lastmod>';
echo '<changefreq>daily</changefreq>';
echo '<priority>1.0</priority>';
echo '</url>';
// Добавляем страницы
$pages = get_pages();
foreach ($pages as $page) {
echo '<url>';
echo '<loc>' . get_permalink($page->ID) . '</loc>';
echo '<lastmod>' . get_post_modified_time('c', true, $page->ID) . '</lastmod>';
echo '<changefreq>weekly</changefreq>';
echo '<priority>0.8</priority>';
echo '</url>';
}
// Добавляем записи блога
$posts = get_posts(array('numberposts' => -1, 'post_status' => 'publish'));
foreach ($posts as $post) {
echo '<url>';
echo '<loc>' . get_permalink($post->ID) . '</loc>';
echo '<lastmod>' . get_post_modified_time('c', true, $post->ID) . '</lastmod>';
echo '<changefreq>monthly</changefreq>';
echo '<priority>0.6</priority>';
echo '</url>';
}
echo '</urlset>';
exit;
}
}
add_action('template_redirect', 'wpmy_sitemap_template');В этом коде мы добавляем в sitemap главную страницу, все страницы и все записи блога с разным приоритетом и частотой обновления.
Дополнительные настройки и расширения sitemap
Фильтрация и исключение страниц
Если нужно исключить из sitemap определённые страницы, можно добавить проверку в циклах. Например, исключить страницу с ID 42:
if ($page->ID == 42) continue;Или добавить условие по шаблону URL.
Добавление пользовательских типов записей
Если на сайте используются кастомные типы записей, добавьте их в sitemap аналогично:
$custom_posts = get_posts(array(
'post_type' => 'product', // пример
'numberposts' => -1,
'post_status' => 'publish'
));
foreach ($custom_posts as $post) {
// выводим URL как выше
}Кэширование sitemap
При большом количестве страниц стоит реализовать кэширование результата в файл или объектный кэш, чтобы не генерировать sitemap при каждом запросе. Например, использовать Transients API WordPress для хранения XML на 12 часов.
Проверка работы и обновление правил
После добавления кода нужно обновить правила перезаписи URL (rewrite rules). Это можно сделать в админке WordPress в разделе Настройки > Постоянные ссылки — просто нажмите «Сохранить изменения» без изменений.
Далее откройте в браузере https://ваш-сайт.ru/sitemap.xml и проверьте, что выводится корректный XML sitemap.
Пример использования плагина Clearfy Pro для SEO оптимизации sitemap
Если вы хотите дополнительно оптимизировать sitemap и SEO, обратите внимание на плагин Clearfy Pro. Он позволяет гибко управлять sitemap, отключать не нужные типы контента и улучшать индексацию сайта.
Но если вы хотите лёгкое и кастомное решение без плагинов, описанный выше код отлично справится с задачей.
Итоги
Создание sitemap вручную через код в WordPress — отличный способ оптимизировать сайт для поисковиков, избежать лишних плагинов и лучше контролировать содержимое. В статье приведён полный рабочий пример, который можно адаптировать под свои нужды, добавлять кастомные типы записей и реализовывать кэширование.
При необходимости можно комбинировать это решение с плагинами, например, Clearfy Pro, для расширенной SEO-оптимизации.