Обе карты отвечают на один вопрос — какие страницы есть на сайте, — но читают их разные существа. Отсюда и разница: одна карта живёт по обычному адресу и выглядит как страница, вторая лежит файлом в корне и человеку не показывается.

Две карты и чем они отличаются

Карта для людей и карта для роботов
Что сравниваем Страница карты Файл sitemap.xml
Кто читает Посетитель Поисковый робот
Где лежит Обычный адрес, ссылка в подвале Корень сайта, ссылка из robots.txt
Что внутри Разделы с заголовками и ссылками Адреса и дата последнего изменения
Зачем Найти нужное, когда меню не помогло Показать роботу все страницы сразу

Страница карты: вложенные списки

Структура сайта — это дерево, а дерево в разметке записывается вложенными списками. Никаких хитростей: заголовок раздела, под ним список страниц, внутри при необходимости ещё один список.

Кусок карты сайта
<nav class="sitemap" aria-label="Карта сайта">
  <h2 class="sitemap__title">Этапы</h2>
  <ul class="sitemap__list">
    <li>
      <a href="/etapy/vybor-instrumentov/">Выбор инструментов</a>
      <ul class="sitemap__sublist">
        <li><a href="/etapy/vybor-instrumentov/chto-takoe-cms/">Что такое CMS</a></li>
        <li><a href="/etapy/vybor-instrumentov/shablony/">Шаблоны</a></li>
      </ul>
    </li>
  </ul>
</nav>

Вложенный список кладётся внутрь пункта, а не рядом с ним: подстраница принадлежит разделу, и разметка должна это показывать. Тогда программа чтения экрана объявит «список из пяти пунктов, вложенный», и человек поймёт устройство сайта, не видя отступов.

Файл sitemap.xml: адреса и даты

Это список адресов в формате XML. Робот берёт его целиком и узнаёт обо всех страницах сразу, не переходя по ссылкам. Особенно это помогает новому сайту, на который ещё никто не ссылается.

sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://eazy-logic.ru/</loc>
    <lastmod>2026-09-13</lastmod>
  </url>
  <url>
    <loc>https://eazy-logic.ru/manualy/karta-sayta/</loc>
    <lastmod>2026-09-13</lastmod>
  </url>
</urlset>

Адрес обязан быть полным — со схемой и доменом. Относительный путь робот не примет. Дату ставьте настоящую: если у всех страниц она сегодняшняя и меняется каждый день, робот перестанет ей верить и будет обходить сайт по своему усмотрению.

Про приоритет и частоту

Теги priority и changefreq входят в стандарт, но поисковики давно объявили, что не учитывают их. Ставить не вредно, пользы тоже нет. Обязательный тег один — loc.

Найти файл робот должен сам, поэтому в robots.txt добавляется строка со ссылкой на него.

Строка в robots.txt
Sitemap: https://eazy-logic.ru/sitemap.xml

Что попросить у нейросети

Оба файла легко собрать из одного источника — списка страниц. Руками их не пишут: на третьей новой странице карта начнёт врать.

Мой запрос

У меня статический сайт. Список страниц лежит в файле pages.json: массив объектов с полями адреса, типа страницы и названия, вложенность видна по адресу.

Напиши скрипт на Python, который собирает из этого списка два файла: sitemap.xml по стандарту sitemaps.org с полными адресами и настоящей датой последнего изменения файла страницы, и кусок разметки карты сайта вложенными списками, сгруппированный по разделам.

Страницы, которых ещё нет на диске, в карты не включать. Домен вынеси в одну переменную наверху. Комментарии по-русски.

Ответ нейросети

Про дату. Берите время изменения самого файла страницы и переводите в формат «год-месяц-день». Так дата всегда настоящая и обновляется сама при правке страницы — отдельного поля в списке заводить не нужно.

Про экранирование. В XML амперсанд в адресе обязан быть записан как &amp;. Если адреса с параметрами вообще возможны, прогоняйте их через штатную функцию экранирования, а не собирайте строку руками.

Про закрывающий слэш. Адрес в карте должен совпадать с настоящим адресом страницы буква в букву, включая слэш в конце. Разные написания одного адреса робот считает разными страницами.

Обе карты в Evolution CMS

После переезда на CMS ни один из файлов писать не придётся. Страницу карты собирает DocLister — тот же сниппет, что рисует меню, только по всему дереву, а не по одному разделу. Файл sitemap.xml отдаёт DLSitemap из того же семейства: он ставится на пустой ресурс с типом содержимого XML, и адрес этого ресурса указывается в robots.txt.

Одно место в нём стоит поправить сразу: в своей поставке DLSitemap пишет в каждую строку priority и changefreq — те самые подсказки, которые поисковики не читают. Свой шаблон строки в параметре &tpl оставляет только адрес и дату.

Выгода та же, что и везде: страница, созданная в админке, попадает в обе карты сама. Ничего не забудется, потому что забывать нечего.

Частые ошибки

Чем чаще всего ломают карты
Ошибка Чем плохо Как правильно
Относительные адреса в sitemap.xml Робот файл не примет Полный адрес со схемой и доменом
Карты написаны руками Расходятся с сайтом через месяц Сборка из общего списка страниц
В карте закрытые от индексации страницы Робот получает противоречивые указания В карте только то, что должно быть в поиске
Дата обновляется каждый день у всех Робот перестаёт верить датам Время изменения самого файла
Ссылки на карту нет нигде Страницу не находят люди, файл не находит робот Ссылка в подвале и строка в robots.txt

Что должно получиться

  • Страница карты открывается из подвала и показывает все разделы
  • Вложенность на странице передана вложенными списками
  • Файл sitemap.xml лежит в корне и открывается в браузере без ошибок
  • В robots.txt есть строка со ссылкой на файл
  • Обе карты собираются скриптом, а не правятся руками