XML-сайтмап: как создать, проверить и отправить
Как собрать сайтмап из финальных канонических URL, проверить его записи и использовать вместе с внутренней перелинковкой и robots.txt.
XML-сайтмап — машиночитаемый список URL. Он помогает поисковикам находить страницы, которые вы считаете главными. Сайтмап дополняет внутреннюю перелинковку, но не гарантирует индексацию. В него входят только финальные канонические URL, которые соответствуют политике индексации сайта.
Протокол sitemaps.org появился в 2005 году: первым его внедрил Google, а Яндекс поддержал через год. Сегодня стандарт поддерживают все крупные поисковые системы.
Что такое XML-сайтмап и зачем он нужен
Поисковый бот находит страницы двумя способами: переходя по внутренним ссылкам и читая сайтмап. Сканирование по ссылкам хорошо работает для страниц, на которые ссылаются много раз. Но страницы без ссылок, свежие материалы и разделы со слабой внутренней перелинковкой бот может пропустить или найти с опозданием. Здесь и помогает сайтмап.
Ускоряет сканирование
Бот получает список URL напрямую и не проходит внутренние ссылки от страницы к странице.
Сообщает об обновлениях
Атрибут lastmod сообщает поисковику, что страница изменилась и её нужно сканировать повторно.
Работает с многоязычными сайтами
Через xhtml:link можно объявить связи hreflang прямо в сайтмапе, без дублирования тегов в HTML.
Базовая структура файла
Минимальный валидный сайтмап — XML-файл с объявлением кодировки, корневым элементом urlset и элементами url внутри. У каждого url должен быть хотя бы один обязательный атрибут — loc.
<?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: & превращается в &, < — в <. Один файл сайтмапа ограничен 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 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). Оба подхода работают. Разбивка по локали удобна, если нужно отдельно следить за индексацией каждого языка.
Сайтмап для изображений
Изображения могут появляться в Google Images и приносить дополнительный трафик. Чтобы помочь боту их найти и понять, добавьте расширение image в обычный urlset. Каждая запись url может содержать до 1 000 изображений.
<?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 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 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>Локализация: hreflang в сайтмапе
Если сайт существует на нескольких языках или для нескольких регионов, соответствующие страницы нужно связать через hreflang. Сделать это можно тремя способами: тегами link rel в HTML, HTTP-заголовками Link или прямо в сайтмапе. Для крупных сайтов сайтмап удобнее всего: шаблоны страниц при этом не меняются.
В сайтмапе hreflang объявляется через пространство имён xhtml. Каждая страница должна быть записана как url, и в каждой записи нужно перечислить все языковые версии, включая саму страницу.
<?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 указывает страницу по умолчанию: её показывают пользователям, которые не подходят ни под одну явную языковую настройку. Обычно это основная языковая версия сайта.
| Код hreflang | Применение |
|---|---|
| ru | Русский язык, любой регион |
| en | Английский язык, любой регион |
| en-US | Английский язык, регион США |
| ru-RU | Русский язык, регион Россия |
| x-default | Страница по умолчанию для неопределённого языка или региона |
Robots.txt: достаточно одной строки
Чтобы поисковик нашёл сайтмап, добавьте одну директиву Sitemap в robots.txt. Если используете Sitemap Index, укажите его. Поисковик найдёт все дочерние файлы через индекс сам.
User-agent: *
Disallow: /admin/
Disallow: /api/
Allow: /
Sitemap: https://example.com/sitemap.xmlЕсли у вас несколько корневых индексных файлов (например, отдельные для ru и en), можно указать несколько директив Sitemap:
Sitemap: https://example.com/sitemap/index-ru.xml
Sitemap: https://example.com/sitemap/index-en.xmlДокументация 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?
Влияет ли priority на позиции в выдаче?
Как часто нужно обновлять сайтмап?
Сколько сайтмапов можно указать в robots.txt?
Check it with SpiderHead
Free and local: run the audit on your own machine.



