Обсудить задачу

Поиск

Начните вводить запрос: ищем по статьям, кейсам и услугам.

навигация Esc закрыть

Как построить правильный sitemap для крупного сайта

Sitemap для крупного сайта перестаёт справляться с задачей, когда число URL превышает 50 000 или файл становится больше 50 МБ - это жёсткий лимит протокола sitemaps.org, а не рекомендация. Решение - sitemap index: файл-указатель, который ссылается на несколько дочерних sitemap-файлов, каждый в пределах лимита.

В проектах Exceltic.dev мы регулярно видим один и тот же сценарий: сайт с каталогом на 80 000-150 000 товарных страниц или блогом на несколько сотен статей продолжает работать с единственным sitemap.xml, оставшимся от раннего этапа разработки. Формально файл валиден, пока не упирается в лимит - но по факту Google Search Console уже давно показывает неполный охват, просто это никто не связывает с sitemap.

Дальше - как устроен sitemap index, как правильно разбивать URL по файлам для мониторинга индексации и какие из атрибутов lastmod, changefreq и priority Google использует на практике, а какие полностью игнорирует.

Рост контентного сайта - каталога, блога на сотни постов или мультистрановых страниц - редко ощущается как отдельное событие. Лимит sitemap превышается незаметно, между двумя обычными спринтами разработки. Проблему обнаруживают не по ошибке сборки, а по тому, что охват в Google Search Console вдруг перестаёт расти вместе с числом опубликованных страниц.

Когда одного sitemap.xml перестаёт хватать

XML sitemap - файл в формате XML со списком URL сайта, который сообщает поисковым системам, какие страницы существуют и когда они обновлялись.

Протокол sitemaps.org задаёт точный лимит: не более 50 000 URL и не более 50 МБ в несжатом виде на один файл. Это ограничение действует, даже если файл отдаётся сжатым через gzip - лимит считается по размеру до сжатия.

На практике лимит по объёму настигает раньше, чем лимит по количеству URL. Если в sitemap записаны длинные URL с параметрами, тегами <image:image> или множеством <lastmod> для hreflang-версий, 50 МБ можно набрать и на 30 000-35 000 записей.

Ситуации, где лимит превышается почти неизбежно:

  • Каталог товаров на маркетплейсе или интернет-магазине от 50 000 SKU.
  • Блог или база знаний, которая копит сотни статей за несколько лет и добавляет к ним теговые и категорийные страницы.
  • Мультистрановой или мультиязычный сайт, где каждая страница дублируется в 3-5 языковых версиях.

Если сайт превысил лимит, а sitemap.xml продолжает перечислять все URL подряд, Google либо обрежет файл на 50 000-й записи, либо целиком откажется его обрабатывать. Часть страниц выпадает из поля зрения краулера без единого сообщения об ошибке в интерфейсе - разве что охват в Search Console перестанет расти.

Что такое sitemap index и как он устроен

Sitemap index - файл, который не содержит сами URL страниц, а перечисляет ссылки на другие sitemap-файлы, каждый из которых укладывается в лимит 50 000 URL и 50 МБ.

Структура простая: корневой файл (обычно sitemap-index.xml или sitemap.xml) содержит список тегов <sitemap>, каждый с адресом дочернего файла и датой его последнего изменения.

Пример структуры sitemap index
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemap-posts.xml</loc>
    <lastmod>2026-08-20</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap-products-1.xml</loc>
    <lastmod>2026-08-25</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap-products-2.xml</loc>
    <lastmod>2026-08-25</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap-pages.xml</loc>
    <lastmod>2026-07-01</lastmod>
  </sitemap>
</sitemapindex>

Протокол sitemaps.org устанавливает тот же лимит и для самого индекса: до 50 000 ссылок на дочерние sitemap-файлы, размер индекса - не более 50 МБ. На практике этого достаточно даже для сайтов с десятками миллионов страниц, поскольку каждая ссылка в индексе - это отдельный файл на 50 000 URL.

Google и другие поисковые системы обходят индекс рекурсивно: сначала читают корневой файл, затем каждый дочерний sitemap как обычный список URL. Для краулера это прозрачно - разница проявляется только в том, как вы мониторите результат.

Как разбивать URL на файлы осмысленно

Самая частая ошибка - механически резать список URL по 50 000 подряд, без учёта типа контента. Технически это соответствует лимиту, но лишает вас главного преимущества sitemap index - раздельного мониторинга индексации по разделам сайта.

Google Search Console показывает статистику индексации для каждого отдельного sitemap-файла. Если разбить URL по типу контента - статьи отдельно, товары отдельно, статические страницы отдельно, - вы сразу видите, какой раздел индексируется хуже.

Пример: у сайта 600 статей в блоге и 120 000 товарных страниц в каталоге. Логичная разбивка:

  • sitemap-posts.xml - все 600 статей, один файл, лимит не выбран.
  • sitemap-products-1.xmlsitemap-products-3.xml - товары по 40 000 URL на файл, с запасом от лимита в 50 000.
  • sitemap-pages.xml - статические страницы (о компании, контакты, лендинги).

При такой структуре в Search Console видно: sitemap-posts.xml - 95% страниц в индексе, sitemap-products-2.xml - 40%. Проблема локализована мгновенно - без этой разбивки пришлось бы вручную сверять тысячи URL из общего списка.

Для мультиязычных сайтов имеет смысл отдельный sitemap-файл на каждую языковую версию каталога или блога - это же разделение упрощает работу с hreflang-разметкой и её проверку.

Пошаговая генерация

Генерация при сборке статического сайта

На статическом или headless-стеке (Astro, Next.js со статическим экспортом) sitemap генерируется как часть сборки, а не вручную. Скрипт на этапе билда проходит по content collections или по данным из CMS, группирует URL по типу контента и пишет отдельные XML-файлы плюс корневой sitemap index.

Готовые интеграции вроде @astrojs/sitemap закрывают базовый случай - один плоский sitemap.xml. Как только сайт вырастает за лимит и нужна разбивка по типам контента, требуется собственный build-скрипт или endpoint, который формирует несколько файлов и индекс над ними.

Автоматическое обновление при добавлении контента

Sitemap не должен обновляться вручную. Каждый деплой - через CI/CD или webhook из headless CMS - должен пересобирать актуальный список URL и перезаписывать файлы.

Ключевой момент: дата в <lastmod> должна браться из реального поля обновления контента (поле updatedAt в CMS или дата git-коммита файла), а не проставляться как текущая дата сборки для каждой страницы при каждом деплое.

Регистрация в Google Search Console и robots.txt

В Google Search Console нужно указать только адрес корневого sitemap index - не каждый дочерний файл по отдельности. Google сам обойдёт все вложенные файлы.

Дополнительно адрес sitemap index стоит указать строкой в robots.txt:

Строка Sitemap в robots.txt
Sitemap: https://example.com/sitemap-index.xml

Это разные механизмы с разными задачами: sitemap.xml сообщает краулеру, какие страницы существуют, а robots.txt и llms.txt управляют тем, каким краулерам вообще разрешено заходить на сайт. Один файл без другого не работает как полноценная стратегия видимости - sitemap без корректного robots.txt может указывать на страницы, которые сам же robots.txt запрещает обходить.

lastmod, changefreq, priority - что из этого Google реально использует

Из трёх необязательных атрибутов sitemap Google по собственному признанию использует по существу только один - и то не всегда.

changefreq (заявленная частота обновления страницы) Google уже несколько лет официально игнорирует. Поле можно оставить в файле для совместимости с другими системами, но на индексацию оно не влияет.

priority (относительный приоритет страницы от 0 до 1) Google также не учитывает при выборе, что и когда индексировать. Приоритет страницы поисковая система определяет по внутренней перелинковке и другим сигналам, а не по значению, которое вы сами себе присвоили.

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

Практический вывод: не тратьте время на настройку changefreq и priority - это балласт, увеличивающий вес файла без пользы. Настройте lastmod только если он берётся из реальной даты изменения контента, а не из даты сборки.

Типичные ошибки

  • Единый sitemap.xml на 80 000+ URL. Формально превышает лимит протокола - часть страниц Google не увидит вовсе.
  • lastmod = дата деплоя для всех страниц. Портит доверие к полю для всего домена, а не только для затронутых страниц.
  • Sitemap index не указан в robots.txt и не добавлен в Search Console. Файлы существуют на сервере, но поисковая система о них не знает.
  • В sitemap попадают страницы с noindex, редиректы, неканонические дубли. Такие URL расходуют краулинговый бюджет и создают противоречивые сигналы для Google.
  • Разбивка по алфавиту или по порядку добавления вместо типа контента. Технически укладывается в лимит, но делает мониторинг индексации по разделам бессмысленным.

Для кого это актуально

Sitemap index нужен не каждому сайту. Лендинг или корпоративный сайт на 20-40 страниц прекрасно обходится одним sitemap.xml - разбивка на несколько файлов только усложнит поддержку без всякой пользы.

Тема актуальна для контентных каталогов (тысячи и десятки тысяч товарных страниц), блогов и баз знаний с сотнями статей, мультистрановых и мультиязычных сайтов. Если на существующем сайте до сих пор один файл sitemap.xml, а объём контента давно перерос разумные рамки, добавить корректную структуру sitemap index на уже работающий сайт - точечная доработка, а не повод для полного пересобирания проекта. Если же вы только планируете новый контентный сайт с расчётом на рост каталога или блога, разумно заложить архитектуру sitemap с самого начала - это часть работ при разработке корпоративного сайта с нуля.

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

Сколько URL можно указать в одном sitemap-файле?

Не более 50 000 URL и не более 50 МБ в несжатом виде - это официальный лимит протокола sitemaps.org, а не рекомендация конкретной поисковой системы. При превышении лимита нужен sitemap index, который ссылается на несколько отдельных файлов, каждый в пределах ограничения.

Можно ли сжимать sitemap в gzip?

Да, sitemap-файл можно отдавать в формате .xml.gz, и это уменьшает объём передаваемых данных. Важно учитывать: лимит 50 МБ считается по размеру файла до сжатия, а не после. Sitemap на 45 МБ в несжатом виде всё ещё должен быть разбит, даже если после gzip он весит 4 МБ.

Нужен ли sitemap index, если на сайте меньше 50 000 страниц?

Формального требования нет - один sitemap.xml укладывается в лимит. Но если сайт смешивает разные типы контента (статьи, товары, статические страницы), разбивка на несколько файлов через sitemap index уже на 5 000-10 000 URL даёт раздельный мониторинг индексации по разделам в Google Search Console, что упрощает диагностику.

Как Google узнаёт о существовании sitemap index?

Двумя способами: через строку Sitemap: в robots.txt, которую краулер читает автоматически, и через ручную отправку адреса в отчёте «Файлы Sitemap» Google Search Console. Оба способа можно использовать одновременно - это не конфликтует.

Влияет ли правильный sitemap на позиции сайта в поиске?

Напрямую нет - sitemap не поднимает страницы в выдаче. Но он влияет на то, находит ли Google вообще ваши страницы и как быстро их индексирует. Без корректного sitemap на крупном сайте часть контента может годами не участвовать в ранжировании просто потому, что краулер о нём не знает.


Если на вашем сайте sitemap давно не пересматривался, а объём контента вырос в разы - опишите задачу команде Exceltic.dev. Разберём текущую структуру и предложим план внедрения sitemap index под ваш объём и тип контента.

Ещё статьи

Все
Связаться удобным способом
WhatsApp Telegram

Прежде чем уйти: оценка задачи бесплатно

Опишите задачу в двух словах, и мы предложим решение, стек и смету со сроками.

Три направления одной командой: разработка программ, веб-разработка и внедрение CRM. Больше 100 проектов, проект ведёт напрямую инженер, на русском и английском.