XML Sitemap — это важный элемент SEO, который помогает поисковым системам лучше индексировать ваш сайт на WordPress. Многие используют плагины, такие как Yoast SEO или Google XML Sitemaps, но иногда хочется обойтись без них, чтобы снизить нагрузку, избежать конфликтов или просто изучить внутренние механизмы WordPress. В этой статье мы подробно разберём, как создать автоматическую генерацию XML Sitemap средствами WordPress без использования плагинов.
Что такое XML Sitemap и зачем он нужен
XML Sitemap — это файл, который содержит список URL вашего сайта с дополнительной информацией: дата последнего обновления, частота изменений и приоритетность страниц. Поисковые системы, такие как Google и Яндекс, используют этот файл для эффективного обхода вашего сайта и своевременного обновления индекса.
Без sitemap поисковики могут не сразу находить новые или обновлённые страницы, особенно если структура сайта сложная или внутренние ссылки плохо организованы.
Почему стоит создавать sitemap без плагинов
- Легковесность: Не нужно устанавливать дополнительные плагины, что уменьшает нагрузку на сервер.
- Контроль: Вы сами управляете логикой генерации sitemap и можете адаптировать её под свои нужды.
- Безопасность: Меньше стороннего кода — меньше потенциальных уязвимостей.
Как создать простейший XML Sitemap вручную
Создадим PHP-файл, который будет генерировать sitemap динамически на основе записей WordPress. Для этого добавим в файл functions.php вашей темы следующий код:
function wpmagazin_generate_sitemap() {
// Устанавливаем заголовок для XML
header('Content-Type: application/xml; charset=utf-8');
// Начинаем вывод XML
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
// Получаем все опубликованные посты
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1
];
$posts = get_posts($args);
foreach ($posts as $post) {
$url = get_permalink($post->ID);
$modified = get_the_modified_time('c', $post->ID);
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>';
}
// Аналогично можно добавить страницы и другие типы записей
echo '</urlset>';
exit;
}
// Регистрируем endpoint для sitemap
add_action('init', function() {
add_rewrite_rule('^sitemap\.xml$', 'index.php?sitemap=1', 'top');
});
// Добавляем query var
add_filter('query_vars', function($vars) {
$vars[] = 'sitemap';
return $vars;
});
// Обрабатываем запрос sitemap
add_action('template_redirect', function() {
if (get_query_var('sitemap') == 1) {
wpmagazin_generate_sitemap();
}
});
Этот код создаёт точку входа для sitemap по адресу /sitemap.xml. При обращении к ней генерируется XML с URL всех опубликованных постов.
Добавление страниц и других типов записей в sitemap
Чтобы добавить страницы, таксономии или пользовательские типы записей, расширьте функцию wpmagazin_generate_sitemap() аналогичным образом:
// Добавляем страницы
$args_pages = [
'post_type' => 'page',
'post_status' => 'publish',
'posts_per_page' => -1
];
$pages = get_posts($args_pages);
foreach ($pages as $page) {
$url = get_permalink($page->ID);
$modified = get_the_modified_time('c', $page->ID);
echo '<url>';
echo '<loc>' . esc_url($url) . '</loc>';
echo '<lastmod>' . esc_html($modified) . '</lastmod>';
echo '<changefreq>monthly</changefreq>';
echo '<priority>0.6</priority>';
echo '</url>';
}
Так можно добавить и любые другие кастомные типы записей, например, товары, события или обзоры.
Обновление правил перезаписи (Permalinks)
После добавления правила перезаписи обязательно обновите настройки постоянных ссылок в админке WordPress: Настройки → Постоянные ссылки. Просто нажмите «Сохранить», чтобы сбросить правила.
Преимущества собственного sitemap перед плагинами
Вы можете реализовать в sitemap именно тот функционал, который нужен вашему сайту, не перегружая систему лишними возможностями. Например, исключать из индексации приватные записи, добавлять кастомные поля или особенности частоты обновления.
Если нужно добавить поддержку мультиязычности или кэширование, это также легко реализовать в собственном коде.
Советы по улучшению собственного sitemap
- Используйте кэширование результата, чтобы не генерировать sitemap на каждый запрос.
- Добавляйте поддержку разных типов данных: страницы, записи, категории.
- Обрабатывайте исключения, чтобы не показывать ненужные URL.
- Проверяйте sitemap через Google Search Console и Яндекс.Вебмастер.
Пример кэширования sitemap с Transients API
Чтобы снизить нагрузку, можно сохранять сгенерированный XML в кэш на час или сутки:
function wpmagazin_generate_sitemap_cached() {
$sitemap = get_transient('wpmagazin_sitemap');
if ($sitemap === false) {
ob_start();
// Здесь код генерации sitemap как выше
wpmagazin_generate_sitemap_content(); // Вынесите логику в отдельную функцию
$sitemap = ob_get_clean();
set_transient('wpmagazin_sitemap', $sitemap, 12 * HOUR_IN_SECONDS);
}
header('Content-Type: application/xml; charset=utf-8');
echo $sitemap;
exit;
}
Разделите логику генерации в функцию wpmagazin_generate_sitemap_content(), чтобы код был более структурированным и удобным для поддержки.
Заключение
Создание собственного XML Sitemap в WordPress без плагинов — это отличный способ получить полный контроль над SEO важным элементом вашего сайта. Такой подход позволяет легко адаптировать логику под уникальные задачи, минимизировать зависимости и повысить производительность. Используйте приведённые примеры и расширяйте их под свои потребности, чтобы сделать ваш сайт максимально удобным для поисковых систем.
Если вы хотите дополнительно оптимизировать работу сайта, рекомендуем обратить внимание на Clearfy Pro — мощный инструмент для улучшения производительности и безопасности WordPress.