Техническое SEO

XML Sitemap: полное руководство — атрибуты, виды, локализация и robots.txt

Обложка статьи: XML Sitemap — полное руководство

Полный разбор XML-сайтмапа: обязательные и необязательные атрибуты, sitemap index, специализированные карты для изображений, видео и новостей, hreflang для локализованных сайтов, правило одной строки в robots.txt — со ссылками на документацию Google и Яндекса.

XML-сайтмап — это файл, который вы отдаёте поисковому роботу вместо того, чтобы он сам обходил весь сайт в поисках страниц. Вы прямо говорите: «вот список URL, которые я хочу проиндексировать, вот когда они обновлялись». Это не гарантия индексации, но существенно ускоряет её и снижает нагрузку на краулинговый бюджет.

Протокол sitemaps.org появился в 2005 году, Google внедрил его первым, Яндекс поддержал спустя год. Сегодня стандарт поддерживают все крупные поисковые системы без исключения.

Как Googlebot использует sitemap: получает список URL напрямую и обходит страницы без блужданий по внутренним ссылкам.

Что такое XML-сайтмап и зачем он нужен

Поисковый бот обнаруживает страницы двумя способами: переходя по ссылкам внутри сайта и читая сайтмап. Ссылочный обход работает хорошо для крупных страниц, на которые ссылаются часто. Но страницы без входящих ссылок, недавно добавленные материалы или разделы с «тонкой» перелинковкой бот может пропустить или обойти слишком поздно. Именно для этих случаев и нужен сайтмап.

Ускоряет краулинг

Бот получает список URL напрямую и не тратит время на обход внутренних ссылок страница за страницей.

Сигнализирует об обновлениях

Атрибут lastmod сообщает поисковику, что страница изменилась и её нужно перепосетить.

Поддерживает мультиязычность

Через xhtml:link можно объявить hreflang-связи прямо в сайтмапе, без дублирования тегов в HTML.

Сайтмап особенно полезен для: новых сайтов без внешних ссылок; крупных сайтов (тысячи страниц); страниц с rich-media контентом (изображения, видео); мультиязычных сайтов с hreflang.

Базовая структура файла

Минимальный валидный сайтмап — это XML-файл с объявлением кодировки, корневым элементом urlset и набором элементов url. Каждый url содержит как минимум один обязательный атрибут — loc.

XML
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://example.com/</loc>
    <lastmod>2026-05-15</lastmod>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://example.com/about</loc>
    <lastmod>2026-04-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://example.com/blog/article-slug</loc>
    <lastmod>2026-05-10</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.75</priority>
  </url>
</urlset>

Файл должен быть в кодировке UTF-8. Все специальные символы в URL экранируются по правилам XML: & становится &amp;, < становится &lt;. Максимальный объём одного файла — 50 000 URL и не более 50 МБ в несжатом виде.

Атрибуты: loc, lastmod, changefreq, priority

АтрибутОбязателенФорматОписание
locДаАбсолютный URLПолный адрес страницы включая протокол и домен. Максимум 2048 символов.
lastmodНетW3C Datetime (YYYY-MM-DD)Дата последнего изменения. Google учитывает, только если значение стабильно и достоверно.
changefreqНетalways / hourly / daily / weekly / monthly / yearly / neverПодсказка о частоте обновлений. Google использует как сигнал, но не следует строго.
priorityНет0.0 — 1.0Относительная приоритетность URL внутри вашего сайта. Не влияет на ранжирование в выдаче.

loc — единственный обязательный атрибут

URL должен быть абсолютным и соответствовать тому, что отдаёт сервер: если страница доступна по HTTPS, в loc должен быть HTTPS. Если сайт работает с www, в loc должен быть www. Несоответствие между loc и реальным адресом приводит к тому, что Google игнорирует запись.

lastmod — самый ценный необязательный атрибут

Дата должна отражать реальное изменение контента, а не технические правки шаблона или перегенерацию сайтмапа. Если вы меняете lastmod при каждом деплое без изменения содержимого, Google перестаёт доверять этому полю и игнорирует его. Допустимые форматы: 2026-05-15, 2026-05-15T10:30:00+03:00, 2026-05-15T07:30:00Z.

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

changefreq — подсказка, не директива

Значение changefreq не управляет расписанием краулера — это лишь подсказка. Google официально заявляет, что использует его как один из многих сигналов. Яндекс также воспринимает поле информационно. Практика: главная страница — daily, статьи блога — monthly, правовые страницы — yearly.

priority — приоритет внутри сайта

Priority от 0.0 до 1.0 сообщает поисковику, какие страницы вы считаете важнее остальных — относительно самого сайта, а не по сравнению с другими сайтами. Значение 1.0 у всех страниц подряд бессмысленно: поисковик воспринимает это как отсутствие приоритизации. Разумная схема: главная 1.0, хабы разделов 0.85, статьи и товары 0.7–0.75, технические страницы 0.5.

Sitemap Index: когда один файл не справляется

Если страниц больше 50 000 или файл превышает 50 МБ — нужен Sitemap Index. Это XML-файл, который ссылается на дочерние сайтмапы, а не на сами URL. Каждый дочерний файл — обычный urlset, ограниченный 50 000 записей.

XML
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemap/blog.xml</loc>
    <lastmod>2026-05-15T00:00:00Z</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap/products.xml</loc>
    <lastmod>2026-05-14T00:00:00Z</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap/static.xml</loc>
    <lastmod>2026-04-01T00:00:00Z</lastmod>
  </sitemap>
</sitemapindex>

Логика разбивки может быть по типу контента (блог, товары, статические страницы) или по локали (ru.xml, en.xml). Оба подхода валидны. Разбивка по локали удобна, когда нужно отслеживать статус индексации по языкам отдельно.

В robots.txt достаточно указать только корневой Sitemap Index — не нужно перечислять каждый дочерний файл. Поисковик сам обнаружит их через индекс.

Сайтмап для изображений

Изображения могут появляться в Google Images и приносить дополнительный трафик. Чтобы помочь поисковику их найти и понять, добавьте расширение image в обычный urlset. Каждая запись url может содержать до 1000 изображений.

XML
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
  <url>
    <loc>https://example.com/gallery/moscow</loc>
    <image:image>
      <image:loc>https://example.com/images/moscow-skyline.jpg</image:loc>
      <image:title>Панорама Москвы с Воробьёвых гор</image:title>
      <image:caption>Вид на Москва-Сити в закатных лучах, 2025</image:caption>
      <image:geo_location>Москва, Россия</image:geo_location>
      <image:license>https://creativecommons.org/licenses/by/4.0/</image:license>
    </image:image>
  </url>
</urlset>
Атрибуты тега <url> и допустимые значения:
ТегОбязателенОписание
image:locДаАбсолютный URL изображения. Может быть на другом домене.
image:titleНетНазвание изображения. Аналог атрибута title у тега img.
image:captionНетПодпись к изображению. Аналог атрибута alt у тега img.
image:geo_locationНетГеографическая привязка объекта на изображении.
image:licenseНетURL лицензии изображения.

Изображения в сайтмапе не заменяют атрибут alt в HTML — оба инструмента работают в связке. Сайтмап помогает обнаружить изображение, alt описывает его смысл.

Документация Google по image sitemaps.

Сайтмап для видео

Видеосайтмап позволяет появляться в Google Video поиске и в расширенных сниппетах с превью видео. Namespace — video.

XML
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
  <url>
    <loc>https://example.com/tutorials/how-to-start</loc>
    <video:video>
      <video:thumbnail_loc>https://example.com/thumbnails/tutorial-1.jpg</video:thumbnail_loc>
      <video:title>Как начать работу с продуктом</video:title>
      <video:description>Пошаговое руководство по первому запуску</video:description>
      <video:content_loc>https://example.com/videos/tutorial-1.mp4</video:content_loc>
      <video:duration>183</video:duration>
      <video:publication_date>2026-03-10T12:00:00+03:00</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
</urlset>

video:duration указывается в секундах. video:content_loc должен вести к воспроизводимому файлу (mp4, webm), а не к странице-плееру. Для видео на YouTube или Vimeo используйте video:player_loc вместо video:content_loc.

Документация Google по video sitemaps.

Сайтмап для новостей

Google News Sitemap — особый формат для изданий, участвующих в Google News. Он содержит только статьи, опубликованные за последние 48 часов. Старые материалы включать не нужно — они автоматически выпадают из индекса новостей.

XML
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:news="http://www.google.com/schemas/sitemap-news/0.9">
  <url>
    <loc>https://example.com/news/tech-breakthrough-2026</loc>
    <news:news>
      <news:publication>
        <news:name>Example Daily</news:name>
        <news:language>ru</news:language>
      </news:publication>
      <news:publication_date>2026-05-15T09:00:00+03:00</news:publication_date>
      <news:title>Технологический прорыв изменит отрасль</news:title>
    </news:news>
  </url>
</urlset>
News Sitemap не подходит для обычных блогов и статей. Он предназначен исключительно для новостных изданий, одобренных Google News. Использование формата без участия в программе не даёт никаких преимуществ.
Документация Google по news sitemaps.

Локализация: hreflang в сайтмапе

Если сайт существует на нескольких языках или для нескольких регионов, нужно связать соответствующие страницы через hreflang. Сделать это можно тремя способами: через тег link rel в HTML, через HTTP-заголовок Link или прямо в сайтмапе. Сайтмап — наиболее удобный вариант для крупных сайтов, потому что не требует изменений в шаблонах страниц.

В сайтмапе hreflang объявляется через namespace xhtml. Каждая страница должна быть представлена как url-запись, и в каждой из них нужно перечислить все языковые варианты, включая саму себя.

XML
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <!-- Русская версия -->
  <url>
    <loc>https://example.com/blog/seo-guide</loc>
    <xhtml:link rel="alternate" hreflang="ru" href="https://example.com/blog/seo-guide"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/blog/seo-guide"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/blog/seo-guide"/>
  </url>
  <!-- Английская версия -->
  <url>
    <loc>https://example.com/en/blog/seo-guide</loc>
    <xhtml:link rel="alternate" hreflang="ru" href="https://example.com/blog/seo-guide"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/blog/seo-guide"/>
    <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/blog/seo-guide"/>
  </url>
</urlset>

Значение x-default указывает страницу по умолчанию — ту, которую показывают пользователям, не подходящим ни под одну из явных языковых настроек. Как правило, это основной язык сайта.

Правило взаимности: если страница A ссылается на B через hreflang, то страница B обязана ссылаться на A. Одностороннее объявление hreflang Google воспринимает как ошибку и игнорирует.
Код hreflangПрименение
ruРусский язык, любой регион
enАнглийский язык, любой регион
en-USАнглийский язык, регион США
ru-RUРусский язык, регион Россия
x-defaultСтраница по умолчанию для неопределённого языка/региона

Robots.txt: достаточно одной строки

Чтобы поисковик знал, где находится сайтмап, достаточно добавить одну директиву Sitemap в robots.txt. Если у вас Sitemap Index — указывайте его. Поисковик сам найдёт все дочерние файлы через индекс.

TEXT
User-agent: *
Disallow: /admin/
Disallow: /api/
Allow: /

Sitemap: https://example.com/sitemap.xml

Если у вас несколько корневых индексных файлов (например, отдельные для ru и en), можно указать несколько строк Sitemap:

TEXT
Sitemap: https://example.com/sitemap/index-ru.xml
Sitemap: https://example.com/sitemap/index-en.xml
Помимо robots.txt, зарегистрируйте сайтмап в Google Search Console (раздел «Сайтмапы») и в Яндекс Вебмастере (раздел «Индексирование → Файлы Sitemap»). Это ускоряет первичную обработку и даёт статистику об обнаруженных и проиндексированных URL.

Документация Google и Яндекса

Документация Google по Sitemap

Документация Яндекс Вебмастера по Sitemap

Яндекс поддерживает стандарт sitemaps.org и дополнительно — расширение для новостей. Атрибуты changefreq и priority Яндекс читает, но рекомендует сосредоточиться на корректном lastmod — он важнее для переобхода изменённых страниц.

Чеклист

  • Файл в кодировке UTF-8, объявление <?xml version="1.0" encoding="UTF-8"?> на первой строке
  • Все URL абсолютные (с протоколом и доменом), соответствуют реальному canonical
  • HTTPS в loc, если сайт работает по HTTPS
  • lastmod отражает реальную дату изменения контента — не дату сборки
  • Файл не превышает 50 000 URL и 50 МБ несжатого
  • Для крупных сайтов — Sitemap Index с дочерними файлами
  • Для мультиязычных страниц — xhtml:link с hreflang включая x-default
  • Для медиа-контента — соответствующие расширения (image, video, news)
  • В robots.txt указана директива Sitemap с абсолютным URL
  • Сайтмап добавлен в Google Search Console и Яндекс Вебмастер
  • Страницы с noindex не попадают в сайтмап
  • Страницы с canonical на другой URL не попадают в сайтмап

FAQ

Технически нет. Если сайт хорошо перелинкован и все страницы достижимы по ссылкам с главной — бот найдёт их сам. Но сайтмап всегда полезен: он ускоряет краулинг и даёт вам контроль над тем, что попадает в индекс.
Нет. Страницы с мета-тегом noindex или X-Robots-Tag: noindex не должны попадать в сайтмап — это противоречие сбивает поисковик с толку. Включайте только страницы, которые хотите видеть в индексе.
Нет. Priority — это приоритет краулинга внутри вашего сайта, а не сигнал ранжирования. Он помогает боту решить, какие страницы посещать чаще, но не влияет на позицию в поисковой выдаче.
При каждом добавлении или удалении страниц. Для динамичных сайтов (блог, интернет-магазин) оптимально автоматически генерировать сайтмап при сборке. Статические сайты обновляют вручную при изменениях в структуре.
Стандарт не ограничивает количество директив Sitemap в robots.txt. Но лучшая практика — один Sitemap Index, из которого Google и Яндекс находят все остальные файлы.