Как создать sitemap для Drupal сайта

Правильная карта сайта (sitemap.xml) для Drupal сайтов, как создать и обновлять для быстрой индексации.

Правильно настроенная карта сайта — точка входа для поисковых роботов на Drupal-проекте. Без XML Sitemap новые страницы индексируются медленнее, а старые могут оставаться в выдаче после удаления. В Drupal 11 за генерацию карты отвечают специальные модули. Самые востребованные — Simple XML Sitemap и классический XML Sitemap. В этой статье рассмотрим, как создать sitemap Drupal-сайта, настроить исключения, автоматизировать обновление и ускорить попадание страниц в индекс. Если вас интересует общая SEO-оптимизация Drupal, загляните в раздел /cms/drupal/seo-prodvizhenie.

Модули для генерации Sitemap в Drupal

На рынке два основных решения: Simple XML Sitemap и XML Sitemap. Оба распространяются свободно и устанавливаются через Composer. Однако их возможности и подход к поддержке сильно отличаются.

Simple XML Sitemap — модуль, активно развивающийся с 2018 года. По состоянию на 2026 год актуальна ветка 4.x, полностью совместимая с Drupal 10 и 11. Модуль умеет работать с любыми сущностями, поддерживает мультиязычность через hreflang, генерирует варианты для Views и позволяет гибко настраивать приоритеты. Встроенный механизм очередей снижает нагрузку на сервер при генерации больших карт.

XML Sitemap — более старый проект, перенесённый с Drupal 7. Его разработка ведётся нерегулярно. В Drupal 11 модуль устанавливается с ограничениями, а часть функционала остаётся недокументированной. Он подходит для простых сайтов, где нужна только карта для нод и терминов, без дополнительных настроек.

Сравнение ключевых характеристик:

Характеристика Simple XML Sitemap 4.x XML Sitemap 8.x-1.x
Поддержка Drupal 11 Полная Ограниченная (зависит от патчей)
Типы сущностей Ноды, термины, файлы, пользователи, кастомные сущности Только ноды и термины
Мультиязычные карты (hreflang) Автоматически для каждого языка Не реализовано
Гибкая настройка приоритетов Да, через UI и программно Базовый выбор из списка
Поддержка Views Через подмодуль simple_sitemap_views Нет
Очередь и отложенная генерация Да, через Drupal Queue API Нет

Для новых проектов и при редизайне выбирайте Simple XML Sitemap. Он покрывает 99% сценариев, не требует доработок напильником и регулярно получает обновления безопасности. XML Sitemap рассматривайте только в случае наследования старого проекта, который мигрировал с Drupal 7 с сохранением этого модуля.

Установка и настройка Simple XML Sitemap

Установка модуля

Модуль ставится через Composer. Команда для Drupal 11:

composer require 'drupal/simple_sitemap:^4.0'

После загрузки включите модуль через административный интерфейс или Drush:

drush en simple_sitemap

Зависимости модуля — только ядро Drupal. Никаких сторонних библиотек. После активации в меню «Конфигурация» появится раздел «Simple XML Sitemap» (путь /admin/config/search/simplesitemap).

Включение типов контента и таксономий

После установки модуль не добавляет в карту ни одной сущности. Нужно явно указать, какие материалы и категории включать. Перейдите на страницу настроек, вкладка «Entities». Вы увидите таблицу со всеми доступными типами сущностей: Content, Taxonomy, Media, User и другими.

Для каждого типа материала (bundle) доступны настройки:

  • Включить в карту — главный переключатель. Если снять галку, ни одна запись этого типа не попадёт в sitemap.
  • Приоритет — число от 0.0 до 1.0. Влияет на относительную важность страниц, но не гарантирует более высокие позиции. Для главной можно задать 1.0, для рядовых статей — 0.5.
  • Частота обновления — подсказка для робота: always, hourly, daily, weekly, monthly, yearly, never. Для блога уместно weekly, для статичных страниц — monthly.

Пример: для типа «Статья» указываем приоритет 0.7, changefreq daily. Для типа «Страница» — приоритет 0.5, changefreq monthly. Для типа «Новость» — приоритет 0.9, changefreq hourly.

Настройки сохраняются сразу. Модуль запоминает их в конфигурации и применяет при генерации. Если позже понадобится изменить приоритеты для тысяч страниц, это делается через интерфейс за пару кликов.

Таксономии настраиваются аналогично. Для словаря «Теги» часто задают приоритет 0.3 и частоту weekly, потому что страницы тегов редко содержат уникальный контент. Если же словарь используется как разделы каталога (например, «Категории товаров»), приоритет повышают до 0.6.

Кастомные ссылки

Не все URL сайта привязаны к Drupal-сущностям. Посадочные страницы, сгенерированные сторонним скриптом, статичные HTML-файлы в публичной папке, эндпоинты API — всё это можно добавить в sitemap через вкладку «Custom links».

Форма позволяет ввести список URL, по одному на строку. Дополнительно можно задать приоритет и дату последнего изменения. Минус такого подхода — статичность: при изменении посадочной страницы вручную придётся обновлять и список. Для динамических случаев используйте хук.

Программное добавление кастомных ссылок через hook_simple_sitemap_links_alter():

/**
 * Implements hook_simple_sitemap_links_alter().
 */
function mymodule_simple_sitemap_links_alter(array &$links, $sitemap_variant) {
  if ($sitemap_variant === 'default') {
    $links[] = [
      'url' => '/promo/spring-sale',
      'priority' => 0.8,
      'lastmod' => '2026-03-01T09:00:00+00:00',
      'changefreq' => 'weekly',
    ];
  }
}

Этот код добавляет страницу /promo/spring-sale в стандартный вариант карты. Хук работает на этапе сбора ссылок, поэтому изменения вступают в силу при следующей генерации без ручного вмешательства.

Генерация Sitemap для Views-страниц

Представления (Views) создают страницы, которых нет среди нод и терминов: список новостей с фильтрами, фильтр товаров, карта сайта пользователей. Чтобы такие страницы попали в sitemap, нужен подмодуль Simple XML Sitemap Views. Он входит в основной модуль, достаточно включить его в разделе «Extend».

После активации в настройках каждого View появляется секция «Sitemap». Откройте нужное представление, перейдите в раздел «Sitemap» и включите опцию «Создать вариант карты сайта». Укажите приоритет и частоту обновления. Модуль зарегистрирует этот View как отдельный источник ссылок. Затем на странице /admin/config/search/simplesitemap/variants появится новый вариант с именем вашего View.

Вариант нужно активировать — перетащите ползунок «Enabled». Теперь при генерации sitemap модуль выполнит View, соберёт все строки результата и превратит их в URL. Если View содержит пагинацию, по умолчанию в карту попадает только первая страница. Чтобы включить все страницы пагинатора, в настройках варианта отметьте «Include all pages».

Подводный камень: если View отдаёт сотни тысяч результатов, генерация затянется и может упереться в лимиты памяти. Настраивайте разбивку на части (chunk size) во вкладке «Settings» → «Advanced» — максимальное количество ссылок в одном файле sitemap. Для тяжёлых Views также ограничьте число элементов в выдаче через настройки самого представления.

Мультиязычный Sitemap с hreflang

На мультиязычных сайтах с модулем Content Translation каждая нода существует в нескольких вариантах. Simple XML Sitemap автоматически строит записи с тегами hreflang, если выполнены условия:

  • Включён модуль Language.
  • Для каждого языка настроен префикс или домен (admin/config/regional/language/detection).
  • В настройках sitemap во вкладке «Settings» включена опция «Include hreflang links» (включена по умолчанию).

Пример записи в сгенерированном XML:

<url>
  <loc>https://example.com/en/about-us</loc>
  <xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/ueber-uns"/>
  <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/about-us"/>
  <lastmod>2026-01-20</lastmod>
  <changefreq>monthly</changefreq>
  <priority>0.5</priority>
</url>

Если для какого-то языка перевод отсутствует, URL в hreflang не попадёт. Поисковые системы считают такую страницу канонической для указанного языка. Без hreflang возможна путаница: Google может счесть немецкую версию дубликатом английской и не показать её в немецкой выдаче.

Исключение контента из карты сайта

Не все страницы должны индексироваться. Корзина, страницы с результатами поиска, служебные формы — такой контент исключают из sitemap. В Drupal есть два способа.

Метатег noindex

Модуль Metatag позволяет добавить тег robots с директивой noindex к конкретной ноде, типу материала или представлению. Если у страницы проставлен noindex, Simple XML Sitemap по умолчанию исключает её из карты. Это поведение регулируется настройкой «Exclude entities with noindex» во вкладке «Settings». Рекомендуем оставить её включённой — это страхует от случайного попадания технических страниц в индекс.

Для массового исключения, например всех материалов определённого типа, можно задать метатег на уровне bundle. В настройках Metatag для типа материала «Закрытый раздел» пропишите Robots: noindex, nofollow. Тогда все ноды этого типа автоматически исчезнут из sitemap.

Прямое исключение через модуль

Simple XML Sitemap позволяет исключать отдельные сущности без использования Metatag. На вкладке «Entities» в строке нужного bundle нажмите «Настроить исключения». Откроется форма со списком всех ID этого типа. Выберите записи, которые не должны попасть в карту. Способ удобен для точечного управления, но неудобен при большом количестве исключений — тогда прибегают к программному подходу.

Хук hook_simple_sitemap_arbitrary_entity_exclude_alter() позволяет динамически формировать список исключённых ID:

/**
 * Implements hook_simple_sitemap_arbitrary_entity_exclude_alter().
 */
function mymodule_simple_sitemap_arbitrary_entity_exclude_alter(array &$excluded_ids, EntityTypeInterface $entity_type) {
  if ($entity_type->id() === 'node') {
    // Исключаем все ноды типа 'internal'.
    $nids = \Drupal::entityQuery('node')
      ->condition('type', 'internal')
      ->accessCheck(FALSE)
      ->execute();
    $excluded_ids = array_merge($excluded_ids, $nids);
  }
}

Этот код гарантирует, что любые материалы «internal» никогда не окажутся в sitemap, независимо от ручных настроек.

Автоматическое обновление через Cron

После публикации новой статьи sitemap должен обновиться. Simple XML Sitemap не пересоздаёт карту мгновенно при каждом сохранении — это создало бы избыточную нагрузку. Вместо этого модуль ставит задачу в очередь. При следующем запуске cron задача выполняется, и карта перегенерируется.

Стандартный Drupal cron запускается при каждом обращении к сайту, если нет внешнего планировщика. Такой подход ненадёжен: при низкой посещаемости cron может не срабатывать часами. Настройте системный cron:

*/15 * * * * /usr/bin/php /var/www/html/vendor/bin/drush cron

Команда выполняется каждые 15 минут. Для новостного портала интервал можно сократить до 5 минут, для корпоративного сайта — увеличить до часа. Важно: при каждом запуске обрабатывается только одна порция очереди, поэтому генерация очень большого sitemap может растянуться на несколько итераций.

Принудительно перестроить карту можно вручную: на странице настроек есть кнопка «Rebuild sitemap». Или через Drush:

drush simple_sitemap:generate

Параметр --variants позволяет обновить только указанный вариант:

drush simple_sitemap:generate --variants=default,news_view

Для автоматического обновления после правок контента без ожидания cron можно настроить модуль на синхронную регенерацию. Во вкладке «Settings» → «Advanced» включите опцию «Generate sitemap synchronously». Тогда при сохранении материала sitemap будет пересоздан сразу. Этот режим подходит для небольших сайтов до 5 000 URL. На крупных проектах синхронная генерация замедлит сохранение нод и может вызвать тайм-ауты.

Настройка max-links и кэширование

По стандарту Sitemaps.org один файл sitemap не должен содержать больше 50 000 URL или весить более 50 МБ. Simple XML Sitemap автоматически разбивает карту на части, как только количество ссылок превышает лимит. Лимит настраивается: перейдите в «Settings» → «Advanced», поле «Max links per sitemap page». По умолчанию стоит 50 000. Для снижения нагрузки на генератор можно задать меньшее число, например 10 000, тогда модуль создаст больше фрагментов, но каждый будет обрабатываться быстрее.

Результирующие файлы сохраняются в папку sites/default/files/sitemaps/. Индексный файл доступен по адресу https://example.com/sitemap.xml. Он содержит ссылки на sitemap-1.xml, sitemap-2.xml и так далее. При использовании CDN или агрессивного кэширования на уровне сервера возможна ситуация, когда после обновления контента посетители получают старую версию sitemap. Чтобы избежать этого, добавьте исключение для пути /sitemap*.xml в конфигурации Nginx:

location ~* /sitemap.*\.xml$ {
  expires -1;
  add_header Cache-Control "no-cache, must-revalidate";
}

Внутреннее кэширование модуля построено на тегах. При изменении любой ноды сбрасываются соответствующие кэш-теги, и при следующем запросе карта пересобирается. Если вы замечаете, что новые страницы не появляются в sitemap спустя несколько часов после публикации, проверьте статус очереди через модуль Queue UI или выполните drush queue:run simple_sitemap_worker.

Отправка Sitemap в поисковые системы и мониторинг индексации

Сгенерированную карту нужно отправить в Google Search Console и Яндекс.Вебмастер. Процесс стандартный:

  1. Зайдите в Google Search Console, выберите ресурс.
  2. В разделе «Sitemaps» вставьте полный URL индексного файла: https://example.com/sitemap.xml.
  3. Нажмите «Отправить».
  4. Повторите в Яндекс.Вебмастере, вкладка «Файлы Sitemap».

После отправки системы покажут количество обнаруженных URL и ошибки, если файл недоступен или содержит битые ссылки. Периодически проверяйте этот раздел — при смене структуры сайта старые адреса могут оставаться в sitemap и приводить к 404 ошибкам. Модуль автоматически удаляет ссылки на неопубликованные и заблокированные материалы, но если вы вручную добавили кастомные ссылки, следите за их актуальностью.

IndexNow: мгновенное уведомление поисковиков

Стандартный цикл «публикация → ожидание cron → перестроение sitemap → визит робота» может занимать от нескольких часов до нескольких дней. Протокол IndexNow, поддерживаемый Яндексом, Bing, Naver и в экспериментальном режиме Google, решает эту проблему. Вы отправляете HTTP-запрос с перечнем изменённых URL сразу после публикации. Поисковик получает уведомление за секунды и ставит страницу в очередь на переобход.

В Drupal для этого есть модуль IndexNow. Установите его через Composer:

composer require 'drupal/indexnow:^2.0'

После включения модуль при сохранении ноды отправляет POST-запрос с новым URL на конечную точку IndexNow. API-ключ генерируется автоматически или задаётся вручную. Статистику отправок можно видеть в отчётах модуля.

Если проект не позволяет установить дополнительный модуль, или нужно отправить уведомления о большом количестве страниц единовременно (например, после миграции), используйте сервис Index-Now.ru. Он принимает список URL через веб-интерфейс или API и рассылает уведомления в несколько поисковых систем одновременно. Это снижает нагрузку на собственный сервер и даёт детальные отчёты об отправке. При регулярных массовых обновлениях интеграция с Index-Now.ru становится более надёжным решением, чем штатный модуль, который может не справиться с тысячами запросов за короткое время.

Рекомендации по SEO-продвижению Drupal-сайта, включая работу с метатегами и чистотой индекса, собраны в статье /cms/drupal/seo-prodvizhenie. А общие принципы индексации Drupal рассматриваются в материале /cms/drupal.

Часто задаваемые вопросы

Как проверить, что карта сайта генерируется корректно?

Откройте в браузере https://example.com/sitemap.xml. Вы должны увидеть XML-документ со списком ссылок. Для детальной проверки используйте валидаторы, например, инструмент от XML-Sitemaps.com или отчёт в Google Search Console. В консоли сразу видны ошибки парсинга, неработающие URL и предупреждения о неподдерживаемых форматах.

Почему Google не видит мои страницы, хотя они есть в sitemap?

Нахождение страницы в sitemap не гарантирует индексацию. Алгоритмы поисковика оценивают качество, уникальность и внутренние сигналы. Проверьте, не закрыта ли страница метатегом noindex в исходном коде, не заблокирована ли в robots.txt. С помощью инструмента «Проверка URL» в GSC запросите принудительный обход. Если страница исключена из-за низкого качества, улучшите контент и настройте внутреннюю перелинковку.

Можно ли исключить страницы с GET-параметрами, например ?page=1?

Да. Simple XML Sitemap по умолчанию включает только первую страницу пагинации. Для более точного контроля используйте настройки варианта Views: отключите «Include all pages». Если нужно исключить произвольные параметры, напишите кастомный хук, который проверит URL и удалит ссылку из массива. Альтернативный путь — указать канонический URL без параметров через модуль Metatag, тогда дубли не попадут в sitemap.

Как добавить в sitemap изображения и видео?

Модуль Simple XML Sitemap с версии 4.2 поддерживает добавление информации об изображениях из полей типа Image. В настройках типа материала нужно включить опцию «Include images». Для видео используйте подмодуль simple_sitemap_media или кастомный генератор ссылок с расширенными тегами. Видеоинформация добавляется согласно спецификации Google Video Sitemap.

Как ускорить индексацию после массовой публикации материалов?

Запустите принудительную перегенерацию sitemap через drush, затем отправьте уведомление через IndexNow с перечнем новых URL. Если страниц больше тысячи, разбейте их на пакеты по 500 и отправляйте последовательно. Убедитесь, что сервер выдерживает нагрузку: временно отключите тяжёлые cron-задачи, чтобы освободить ресурсы для обхода поисковыми роботами. После завершения кампании проконтролируйте отчёты в панелях вебмастеров.