belun.app Блог
EN

XML-карта сайта: что поисковик читает, а что выбрасывает

Два элемента работают, два лежат мёртвым грузом, а одна ошибка экранирования ломает половину самописных карт. Плюс бесплатный генератор sitemap.xml.

Бумажная карта на столе: планирование структуры сайта перед сборкой XML-карты

У каждого адреса в карте сайта может быть четыре элемента. Два Google читает, два молча выбрасывает. Одно это знание экономит кучу времени в таблицах, но почему-то до сих пор мало кому известно.

Генератор XML-карты сайта берёт список адресов и отдаёт файл, который проходит проверку. Ниже — что там происходит внутри.

Два, которые уходят в мусор

changefreq и priority. Google подтвердил в 2023 году, что не учитывает ни то, ни другое, и с тех пор ничего не поменялось. Причина скучная: все подряд ставили всем страницам priority 1.0, и число перестало что-либо значить. С changefreq та же история — сайты объявляли hourly на страницах, которые никто не трогал с 2019 года.

Bing и Яндекс их по-прежнему читают, поэтому в генераторе эти поля остались, просто необязательными. Если весь ваш трафик из Google, выключите их. Файл станет меньше, и ни один робот этого не заметит.

С priority особенно смешно: его принимают за рычаг ранжирования. Им он не был никогда. В лучшем случае это подсказка о порядке обхода внутри вашего собственного сайта, а не против чужих.

Два, которые имеют значение

loc — ради него всё и затевалось. lastmod Google действительно использует, но с условием: дата должна выглядеть правдоподобно.

Я видел сайт, который каждую ночь пересобирал карту и проставлял сегодняшнее число всем 4000 адресам. Примерно неделю обход рос. Потом Google сообразил, что даты — это шум, и перестал доверять полю вообще. Для того домена, судя по всему, навсегда. Ставьте дату, когда реально менялось содержимое страницы. Поправленный футер и новый год в копирайте не считаются.

Формат — W3C Datetime: 2026-09-20 или 2026-09-20T14:30:00+03:00, если нужно время. Привычное 20.09.2026 парсер отклонит, 20-09-2026 тоже.

Проблема с амперсандом

Вот это встречается в самописных картах чаще всего. Адрес вида:

https://shop.example.com/search?q=boots&sort=price

внутри <loc> должен выглядеть так:

https://shop.example.com/search?q=boots&amp;sort=price

Пропустили — XML считается битым. И не «один адрес не прошёл», а весь файл целиком, все 12 000 адресов, причём Search Console напишет, что карта нечитаемая, и не покажет, на какой строке сломалось. Экранировать нужно &, <, >, " и '. Генератор закрывает все пять.

Вторая по частоте причина — BOM или пустая строка перед <?xml. Некоторые редакторы добавляют его, не спрашивая.

Ограничения и место файла

50 000 адресов или 50 МБ без сжатия, что наступит раньше. Дальше нужны несколько файлов плюс индекс. Вставьте в инструмент список подлиннее — он сам разложит адреса по файлам, пронумерует их и соберёт индекс.

Про место есть правило, о котором забывают: карта может перечислять только адреса на своём уровне и ниже. Положили файл в /blog/sitemap.xml — на /pricing он никак не влияет. Корень сайта, и никаких сюрпризов.

Одну привычку пора бросить: в июне 2023 года Google отключил пинг-эндпоинт для карт. Вызовы google.com/ping?sitemap= в вашем деплой-скрипте теперь не делают ничего. Пропишите карту в robots.txt через генератор robots.txt и один раз отправьте её в Search Console — дальше поисковик перечитывает файл сам.

Чем Яндекс отличается от Google

Почти все русскоязычные инструкции написаны по документации Google, а отправлять карту приходится в два поисковика. Разница есть, и она практическая.

Яндекс называет ровно четыре поддерживаемых элемента: loc, lastmod, changefreq и priority. Всё остальное для него «неизвестный тег» — это буквальная формулировка из справочника ошибок. То есть xhtml:link с языковыми версиями, image:image и video:video, которые Google читает, Яндекс просто отбрасывает. Ломается от этого не весь файл, но и пользы ноль.

Второе отличие важнее. Google принимает в качестве карты не только XML: подойдёт обычный текстовый файл со списком адресов по одному в строке и фиды RSS 2.0 или Atom 1.0. Яндекс прямо указывает, что RSS- и Atom-фиды через Sitemap не передаются. Если нужны оба поисковика, формат один — XML.

Третье — длина адреса. Общий лимит 2048 символов, но Яндекс делит его на две части: до 1024 на домен и до 1024 на путь. Адрес, который Google прочитает, Яндекс может отклонить с ошибкой «Слишком длинный URL».

И приятная деталь про кириллицу: Яндекс распознаёт адреса и в закодированном виде, и как есть. Google ждёт закодированные, так что percent-encoding безопаснее — генератор приводит адреса к нему сам.

Полные таблицы — какие элементы кто читает, лимиты и разбор ошибок Вебмастера — лежат на странице инструмента.

Когда карта не нужна

Сайту на 40 страниц с меню, из которого доступно всё, карта не нужна. Робот и так всё найдёт.

Она начинает окупаться, когда сайт большой, когда на страницы ниоткуда не ссылаются или когда хочется, чтобы отчёт об индексации в Search Console охватывал именно нужные адреса, а не все варианты с параметрами.

Вставьте свои адреса в генератор XML-карты сайта и скачайте файл, который пройдёт проверку с первого раза. Если списка адресов под рукой нет, начните с таблицы где его взять: у большинства CMS карта уже лежит по готовому адресу, и собирать её заново не нужно.

Попробуйте инструмент

Генератор XML-карты сайта →