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

Полный разбор XML-сайтмапа: обязательные и необязательные атрибуты, sitemap index, специализированные карты для изображений, видео и новостей, hreflang для локализованных сайтов, правило одной строки в robots.txt — со ссылками на документацию Google и Яндекса.
XML-сайтмап — это файл, который вы отдаёте поисковому роботу вместо того, чтобы он сам обходил весь сайт в поисках страниц. Вы прямо говорите: «вот список 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 может содержать до 1000 изображений.
<?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 Video поиске и в расширенных сниппетах с превью видео. Namespace — 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/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 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>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>Локализация: hreflang в сайтмапе
Если сайт существует на нескольких языках или для нескольких регионов, нужно связать соответствующие страницы через hreflang. Сделать это можно тремя способами: через тег link rel в HTML, через HTTP-заголовок Link или прямо в сайтмапе. Сайтмап — наиболее удобный вариант для крупных сайтов, потому что не требует изменений в шаблонах страниц.
В сайтмапе hreflang объявляется через namespace 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">
<!-- Русская версия -->
<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 указывает страницу по умолчанию — ту, которую показывают пользователям, не подходящим ни под одну из явных языковых настроек. Как правило, это основной язык сайта.
| Код 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 по 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 не попадают в сайтмап