Автоматический 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 для комментариев.