Автоматический sitemap — важный инструмент для SEO, позволяющий поисковым системам быстро индексировать все страницы сайта. Особенно актуальна задача создания sitemap для сайтов с многоязычностью, где необходимо корректно указывать разные языковые версии страниц. В этой статье подробно рассмотрим, как с помощью WordPress создать динамический sitemap с поддержкой нескольких языков и примерами кода, а также обзор полезных плагинов для этой задачи.
Зачем нужен sitemap с поддержкой многоязычности в WordPress
Поисковые системы, такие как Google, учитывают версии страниц на разных языках, чтобы показывать пользователям релевантный контент. Если сайт на WordPress использует плагины для мультиязычности (Polylang, WPML, TranslatePress и т.д.), обычный sitemap часто не учитывает все языковые версии. Это может привести к неполной индексации и снижению видимости в поиске.
Поэтому важно создавать sitemap, который автоматически обновляется при добавлении новых страниц и содержит ссылки на все языковые версии каждой страницы с правильными атрибутами hreflang.
Рассмотрим два варианта решения: использование популярных плагинов и создание собственного решения на PHP.
Использование плагинов для генерации sitemap с многоязычностью
Плагин Rank Math SEO
Rank Math — мощный SEO-плагин с функцией автоматической генерации sitemap. Он поддерживает интеграцию с WPML и Polylang, автоматически добавляя языковые версии страниц в sitemap с правильными hreflang.
Чтобы активировать sitemap в Rank Math и включить поддержку многоязычности:
- Установите и активируйте Rank Math (https://wpshop.ru/plugin/rank-math/?utm_source=wpto.ru&utm_medium=article&utm_campaign=kak-sozdat-avtomaticheskiy-sitemap-wordpress-s-podderzhkoy-mnogoyazychnosti).
- В настройках Rank Math перейдите в раздел Sitemap и включите генерацию.
- Убедитесь, что интеграция с вашим мультиязычным плагином активна.
Rank Math автоматически обновит sitemap при изменении контента.
Плагин Google XML Sitemaps + Polylang
Google XML Sitemaps — классический плагин для sitemap, но по умолчанию не поддерживает многоязычность. Однако с Polylang можно с помощью дополнительного кода расширить функционал.
Пример кода для добавления hreflang в sitemap Google XML Sitemaps:
add_filter('sm_build_urlset', 'wpto_add_hreflang_to_sitemap', 10, 2);
function wpto_add_hreflang_to_sitemap($urlset, $args) {
if (!function_exists('pll_get_post_language')) return $urlset;
foreach ($urlset as &$url) {
$post_id = url_to_postid($url['loc']);
if ($post_id) {
$languages = pll_get_post_translations($post_id);
$hreflangs = '';
foreach ($languages as $lang => $trans_id) {
$trans_url = get_permalink($trans_id);
$hreflangs .= "<xhtml:link rel=\"alternate\" hreflang=\"$lang\" href=\"$trans_url\" />";
}
$url['xhtml:link'] = $hreflangs;
}
}
return $urlset;
}
Этот код добавляет в sitemap ссылки на альтернативные языковые версии через атрибуты hreflang.
Создание собственного динамического sitemap с многоязычностью на PHP
Если вы хотите гибко контролировать sitemap и не использовать плагины, можно создать свой PHP-скрипт, который будет генерировать sitemap с учетом языков, например, для Polylang.
Пример функции для генерации sitemap XML с поддержкой hreflang:
function wpto_generate_multilang_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 'xmlns:xhtml="http://www.w3.org/1999/xhtml">';
$posts = get_posts(array('post_type' => 'post', 'post_status' => 'publish', 'numberposts' => -1));
foreach ($posts as $post) {
$post_id = $post->ID;
$url = get_permalink($post_id);
echo '<url>';
echo '<loc>' . esc_url($url) . '</loc>';
if (function_exists('pll_get_post_translations')) {
$translations = pll_get_post_translations($post_id);
foreach ($translations as $lang => $trans_id) {
$trans_url = get_permalink($trans_id);
echo '<xhtml:link rel="alternate" hreflang="' . esc_attr($lang) . '" href="' . esc_url($trans_url) . '" />';
}
}
echo '</url>';
}
echo '</urlset>';
}
Этот код можно подключить через отдельный endpoint WordPress или выполнять в шаблоне sitemap. Он перебирает все посты, получает языковые версии и добавляет ссылки с hreflang.
Для страниц, таксономий и других типов записей код нужно расширить аналогично.
Практические советы по интеграции и оптимизации sitemap
При работе с многоязычными sitemap обратите внимание на следующие моменты:
- Кэширование: Генерация sitemap может быть ресурсоемкой, особенно на больших сайтах. Используйте кэширование результата (например, transient API или объектный кэш).
- Обновление: Обеспечьте автоматическое обновление sitemap при публикации или обновлении контента. В плагинах это обычно реализовано автоматически.
- Проверка валидности: Используйте инструменты Google Search Console для проверки sitemap и отлова ошибок.
- Поддержка всех типов контента: Не забудьте добавить в sitemap страницы, записи, кастомные типы постов и таксономии, если они важны для индексации.
- Указание canonical URL: В sitemap должны быть указаны канонические версии страниц, чтобы избежать дублей.
Заключение
Автоматический sitemap с поддержкой многоязычности — обязательный элемент SEO-оптимизации современных WordPress-сайтов. Используя плагины Rank Math или расширяя Google XML Sitemaps, вы быстро получите рабочее решение без сложного кода. Если же нужна максимальная кастомизация, можно создать собственный генератор sitemap на PHP с поддержкой hreflang, как показано выше.
Для удобства управления SEO и мультиязычностью рекомендуем обратить внимание на комплексные решения, такие как Rank Math (https://wpshop.ru/plugin/rank-math/?utm_source=wpto.ru&utm_medium=article&utm_campaign=kak-sozdat-avtomaticheskiy-sitemap-wordpress-s-podderzhkoy-mnogoyazychnosti) и Polylang.