XML-сайтмап: как создать, проверить и отправить

Как собрать сайтмап из финальных канонических URL, проверить его записи и использовать вместе с внутренней перелинковкой и robots.txt.

XML-сайтмап — машиночитаемый список URL. Он помогает поисковикам находить страницы, которые вы считаете главными. Сайтмап дополняет внутреннюю перелинковку, но не гарантирует индексацию. В него входят только финальные канонические URL, которые соответствуют политике индексации сайта.

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

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

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

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

Ускоряет сканирование

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

Сообщает об обновлениях

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

Работает с многоязычными сайтами

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

Сайтмап особенно полезен для новых сайтов без внешних ссылок, крупных сайтов (тысячи страниц), страниц с богатым медиаконтентом (изображения, видео) и многоязычных сайтов с 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 может содержать до 1 000 изображений.

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/city</loc>
    <image:image>
      <image:loc>https://example.com/images/city-skyline.jpg</image:loc>
      <image:title>City skyline at sunset</image:title>
      <image:caption>Downtown panorama taken from the observation deck, 2025</image:caption>
      <image:geo_location>New York, USA</image:geo_location>
      <image:license>https://creativecommons.org/licenses/by/4.0/</image:license>
    </image:image>
  </url>
</urlset>
Атрибуты тега <url> и допустимые значения:
ТегОбязателенОписание
image:locДаАбсолютный URL изображения. Может находиться на другом домене, например на CDN.
image:titleНетНазвание изображения. Аналог атрибута title у тега img.
image:captionНетПодпись к изображению. Аналог атрибута alt у тега img.
image:geo_locationНетГеографическое местоположение объекта на изображении.
image:licenseНетURL лицензии на изображение.

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

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

Видеосайтмап помогает контенту появляться в поиске Google Video и в расширенных результатах с превью видео. Пространство имён — 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/getting-started</loc>
    <video:video>
      <video:thumbnail_loc>https://example.com/thumbnails/tutorial-1.jpg</video:thumbnail_loc>
      <video:title>Getting started with the product</video:title>
      <video:description>Step-by-step guide for first-time users</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+00: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 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>en</news:language>
      </news:publication>
      <news:publication_date>2026-05-15T09:00:00+00:00</news:publication_date>
      <news:title>Technology breakthrough set to transform the industry</news:title>
    </news:news>
  </url>
</urlset>
Формат News Sitemap не подходит для обычных блогов. Он предназначен только для новостных изданий, одобренных Google News. Использование формата без участия в программе не даёт никакой пользы.

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

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

В сайтмапе hreflang объявляется через пространство имён 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">
  <!-- Russian version -->
  <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>
  <!-- English version -->
  <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 по сайтмапам

Официальная документация Яндекс Вебмастера по сайтмапам

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

Чек-лист

  • Файл в UTF-8, на первой строке объявление <?xml version="1.0" encoding="UTF-8"?>
  • Все URL абсолютные (с протоколом и доменом) и соответствуют реальному каноническому URL
  • 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?
Нет. Страницы с мета-тегом noindex или заголовком X-Robots-Tag: noindex не должны попадать в сайтмап: такое противоречие сбивает поисковики с толку. Включайте только страницы, которые хотите видеть в индексе.
Влияет ли priority на позиции в выдаче?
Нет. Priority — подсказка о приоритете сканирования внутри сайта, а не сигнал ранжирования. Она помогает боту решить, какие страницы посещать чаще, но на позицию в выдаче не влияет.
Как часто нужно обновлять сайтмап?
Каждый раз, когда вы добавляете или удаляете страницы. Для динамичных сайтов (блог, интернет-магазин) лучше генерировать сайтмап автоматически при сборке. Статические сайты обновляют вручную, когда меняется структура.
Сколько сайтмапов можно указать в robots.txt?
Стандарт не ограничивает количество директив Sitemap в robots.txt. Но лучшая практика — один Sitemap Index, из которого Google и Яндекс находят все остальные файлы.

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it