Действуй как technical SEO. Сайт: {{site_size}} URL. Языки: {{languages}}. Контент: {{content_types}}. Стек: {{framework}}.
Sitemap — не «список всех URL», а сигнал для краулера: «вот что важно, вот когда менялось, вот связи между языками». Сделанный «как попало» sitemap может навредить.
Принцип 1 — Что включать (и что НЕ)
Включать
- Canonical URL (без параметров, без trailing slash если так на сайте)
- Только indexable страницы (без noindex, без блокировки в robots.txt)
- Только страницы со статус 200
- Только страницы с реальным контентом (не тонкие)
НЕ включать
- Параметрические URL (?ref=, ?utm_, ?page=2 если есть canonical на page 1)
- Страницы поиска, фильтры, корзины
- 404 / 301-цепочки
- Дубликаты под разными slug
- Pagination 2+ (вместо этого rel=next / prev)
Принцип 2 — Структура 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"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>https://example.com/article/foo</loc>
<lastmod>2026-05-10T12:00:00+00:00</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/article/foo"/>
<xhtml:link rel="alternate" hreflang="ru-RU" href="https://example.com/ru/article/foo"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/article/foo"/>
<image:image>
<image:loc>https://example.com/img/foo.jpg</image:loc>
</image:image>
</url>
</urlset>
Принцип 3 — Priority / lastmod / changefreq (без иллюзий)
Priority
- Google и Bing давно игнорируют значение в большинстве случаев
- Но: разница между приоритетами помогает в твоих внутренних процессах
- Рекомендация: 1.0 home, 0.8 категории, 0.6 артикль, 0.4 архив
- Не делать все 1.0 — теряется сигнал
Lastmod
- Это работает. Google использует для приоритизации повторного краула
- Должно быть честным: если страница не менялась — не лгать
- Формат W3C Datetime:
2026-05-10T12:00:00+00:00 - Не обновлять lastmod если изменилось только template (хедер сайта)
Changefreq
- Игнорируется большинством краулеров
- Оставить можно (хуже не будет), но не вкладывать энергию
Принцип 4 — Разделение крупных сайтов
Лимиты
- Один sitemap: ≤ 50 000 URL ИЛИ ≤ 50 MB несжатый
- Если больше — sitemap index + несколько sitemap-файлов
Стратегия разбиения
- По типу контента: sitemap-articles.xml, sitemap-products.xml, sitemap-videos.xml
- По свежести: sitemap-recent.xml (последние 30 дней), sitemap-archive.xml
- По языку: sitemap-en.xml, sitemap-ru.xml (только если hreflang не cross-link)
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-articles.xml</loc>
<lastmod>2026-05-17</lastmod>
</sitemap>
<sitemap>
<loc>https://example.com/sitemap-products.xml</loc>
<lastmod>2026-05-17</lastmod>
</sitemap>
</sitemapindex>
Принцип 5 — hreflang правильно
Правила
- Каждая страница ссылается на ВСЕ свои языковые версии (включая себя)
- Обязательно x-default (страница по умолчанию для незнакомого языка)
- Симметричные связи: если A→B, то и B→A
- Коды по ISO 639-1 (язык) + опционально ISO 3166-1 (регион):
en,en-GB,pt-BR
Где размещать
- Опция 1: в sitemap через xhtml:link (рекомендуется при многих URL)
- Опция 2: в <head> через link rel="alternate" (для малых сайтов)
- НЕ дублируй в обоих местах — выбери одно
Типовые ошибки
- ❌ Использовать
en-ukвместоen-GB(uk — это украинский!) - ❌ Несимметричные ссылки — Google игнорирует целую группу
- ❌ Забыть x-default — пользователи без матчинга получают «случайный» язык
Принцип 6 — robots.txt и discovery
# robots.txt
User-agent: *
Allow: /
Sitemap: https://example.com/sitemap.xml
Sitemap: https://example.com/sitemap-images.xml
Также:
- Сабмит в Google Search Console и Bing Webmaster Tools
- Сабмит при крупных изменениях через Search Console API
Принцип 7 — Image / Video sitemap
Image
- Отдельный sitemap или image:image внутри url
- loc обязателен; caption, title, license — опциональны но полезны
Video
- Отдельный sitemap (video:video schema)
- Включает thumbnail_loc, title, description, content_loc или player_loc
Шаг 8 — Генерация ({{framework}})
Если Next.js — app/sitemap.ts с типизированным экспортом, динамическая генерация. Если статика — генерация на build. Если очень большой сайт — генератор в фоне с CDN-кешем.
Шаг 9 — Мониторинг
- Search Console → Sitemaps: количество submitted vs indexed
- Логи бота: какие страницы крутятся / какие игнорируются
- Регулярная проверка валидности через sitemap.org validator
Anti-patterns
- ❌ Sitemap «kitchen sink» — все URL подряд, включая фильтры и параметры
- ❌ Priority 1.0 на всё — сигнал теряется
- ❌ Lastmod = «всегда вчерашняя дата» (Google понимает, теряет доверие)
- ❌ Sitemap > 50MB / 50K URL без разделения — Google отрежет
- ❌ hreflang только в head на одной части страниц — несогласованность
- ❌ x-default отсутствует — пользователи получают рандомный язык
- ❌ Sitemap не обновляется автоматически — деплои не отражены
- ❌ Sitemap в robots.txt не указан — Google найдёт, Bing может не сразу
- ❌ Sitemap для страниц с noindex — конфликт сигналов
- ❌ Игнорировать image / video sitemap при медиа-богатом сайте
Похожие промты
site / audit
Технический SEO-аудит
Crawl, индексация, мета-теги, sitemap, robots, schema.org и Core Web Vitals в одном отчёте.
seotechnicalaudit
Открыть
Средний30-60 мин
site / seo
Мета-теги и schema.org для страницы
Полный набор метаданных для страницы: title, description, OG, Twitter, JSON-LD.
seometaschema
Открыть
Начальный15-30 мин
site / seo
Проверить контент на каннибализацию ключей
Найти страницы, которые конкурируют друг с другом за одни и те же запросы.
seocontentcannibalization
Открыть
Продвинутый30-60 мин