Создание sitemap — важный шаг для улучшения индексации сайта поисковыми системами. Многие используют популярные плагины, такие как Yoast SEO или Google XML Sitemaps, но иногда хочется сделать всё своими руками, чтобы контролировать процесс и оптимизировать под свои задачи. В этой статье мы подробно разберём, как создать автоматический sitemap в WordPress с помощью PHP-кода, без использования плагинов.
Что такое sitemap и зачем он нужен в WordPress
Sitemap (карта сайта) — это файл в формате XML, который содержит ссылки на все важные страницы вашего сайта. Поисковые роботы используют sitemap для более эффективного обхода и индексации страниц, что помогает улучшить видимость сайта в выдаче.
В WordPress sitemap можно создавать автоматически с помощью плагинов, но в некоторых случаях, например, при тонкой кастомизации, лучше написать собственный генератор. Это полезно, если вы хотите исключить определённые типы записей, добавить кастомные URL или настроить приоритеты и частоту обновления страниц.
Создание sitemap вручную: базовый пример генератора
Давайте создадим функцию wpma_generate_sitemap, которая сформирует XML-карту сайта с основными страницами, записями и категориями.
function wpma_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">';
// Добавляем главную страницу
echo '<url>';
echo '<loc>' . esc_url(home_url('/')) . '</loc>';
echo '<priority>1.0</priority>';
echo '<changefreq>daily</changefreq>';
echo '</url>';
// Получаем все опубликованные записи
$posts = get_posts(array(
'numberposts' => -1,
'post_type' => 'post',
'post_status' => 'publish'
));
foreach ($posts as $post) {
echo '<url>';
echo '<loc>' . get_permalink($post) . '</loc>';
echo '<priority>0.8</priority>';
echo '<changefreq>weekly</changefreq>';
echo '</url>';
}
// Добавляем страницы
$pages = get_pages(array('post_status' => 'publish'));
foreach ($pages as $page) {
echo '<url>';
echo '<loc>' . get_permalink($page) . '</loc>';
echo '<priority>0.7</priority>';
echo '<changefreq>monthly</changefreq>';
echo '</url>';
}
echo '</urlset>';
exit;
}Эту функцию можно привязать к отдельному URL, например, через rewrite rules или страницу шаблона. Далее разберём, как это сделать.
Как вывести sitemap по адресу /sitemap.xml через rewrite rules
Чтобы sitemap был доступен по удобному адресу, например, https://ваш-сайт.ru/sitemap.xml, добавим правило в .htaccess или лучше используем WordPress rewrite API.
Добавим следующий код в файл functions.php вашей темы или в плагин:
function wpma_sitemap_rewrite_rule() {
add_rewrite_rule('^sitemap\.xml$', 'index.php?sitemap=1', 'top');
}
add_action('init', 'wpma_sitemap_rewrite_rule');
function wpma_add_query_vars($vars) {
$vars[] = 'sitemap';
return $vars;
}
add_filter('query_vars', 'wpma_add_query_vars');
function wpma_sitemap_template() {
if (get_query_var('sitemap')) {
wpma_generate_sitemap();
}
}
add_action('template_redirect', 'wpma_sitemap_template');После добавления этого кода необходимо обновить правила пермалинков в админке: Настройки → Постоянные ссылки → Сохранить изменения. Это активирует новое правило.
Расширение sitemap: добавление кастомных типов записей и таксономий
В примере выше добавлены только посты и страницы. Если у вас есть кастомные типы записей или таксономии, их тоже можно включить в sitemap.
Например, для кастомного типа записей product и таксономии product_cat:
// Добавляем кастомный тип записей
$custom_posts = get_posts(array(
'numberposts' => -1,
'post_type' => 'product',
'post_status' => 'publish'
));
foreach ($custom_posts as $cpost) {
echo '<url>';
echo '<loc>' . get_permalink($cpost) . '</loc>';
echo '<priority>0.9</priority>';
echo '<changefreq>weekly</changefreq>';
echo '</url>';
}
// Добавляем термины таксономии
$terms = get_terms(array(
'taxonomy' => 'product_cat',
'hide_empty' => true
));
foreach ($terms as $term) {
echo '<url>';
echo '<loc>' . get_term_link($term) . '</loc>';
echo '<priority>0.6</priority>';
echo '<changefreq>monthly</changefreq>';
echo '</url>';
}Таким образом можно гибко формировать sitemap под любые нужды сайта.
Советы по оптимизации и отладке sitemap
При создании собственного sitemap важно:
- Убедиться, что все ссылки корректны и ведут на существующие страницы.
- Учитывать ограничения поисковых систем: например, Google рекомендует не более 50 000 URL и не более 50 Мб на sitemap.
- Добавлять sitemap в Google Search Console и другие инструменты для вебмастеров.
- Использовать кэширование генерации sitemap, чтобы не нагружать сервер при каждом запросе.
Для кэширования можно использовать transient API WordPress, например:
function wpma_generate_sitemap_cached() {
$sitemap = get_transient('wpma_sitemap_cache');
if ($sitemap === false) {
ob_start();
wpma_generate_sitemap();
$sitemap = ob_get_clean();
set_transient('wpma_sitemap_cache', $sitemap, HOUR_IN_SECONDS);
}
echo $sitemap;
exit;
}Плагины для автоматизации sitemap и их преимущества
Если вы не хотите писать код самостоятельно, можно использовать готовые решения. На wpshop.ru есть несколько полезных плагинов, которые помогут с созданием и управлением sitemap:
- Clearfy Pro — плагин для оптимизации сайта, который умеет создавать sitemap с расширенными настройками.
- WPCommunity — если у вас сайт с большим количеством участников, плагин умеет автоматически генерировать sitemap для профилей и контента.
Эти плагины облегчают задачу, но зачастую написанный вручную код даёт больший контроль и гибкость.