Перейти к содержимому
SEO/Опубликовано 5 сентября 2026 г./5 мин

lastmod в карте сайта: как он врёт и как мы это чинили

Дата изменения в sitemap.xml обычно равна дате сборки — тогда карта сообщает «изменилось всё». Мы взяли даты из истории git и проверили результат: 31 статья из 66 всё равно показывает не ту дату. Разбор с замером.

lastmod в карте сайта: как он врёт и как мы это чинили
С
Команда NEXFORCE
SEO-эксперт NEXFORCE

Тег lastmod — подсказка поисковику: вот здесь что-то изменилось, стоит перечитать. Работает она ровно до тех пор, пока ей можно верить. У нас сначала не работала, потом заработала — а потом мы измерили и нашли, что для половины блога всё ещё врёт.

Как было

Генератор подставляет текущее время, если ему не сказать иное. В нашем случае это означало: 121 страница из 155 получала дату сборки. После каждого деплоя файл сообщал «изменилось всё».

Признак, который всегда говорит «да», ничем не отличается от признака, который всегда молчит. Настоящая правка в таком потоке теряется.

Как починили

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

Отдельное решение — что делать, когда истории нет. При сборке в облаке репозиторий часто выкачивается обрезанным, и тогда файлы, не тронутые в последних коммитах, получили бы дату обрезки. Скрипт это проверяет и в таком случае пишет пустой справочник дат, и lastmod откатывается на дату сборки. Врать поисковику хуже, чем промолчать.

Проверка: механизм работает

Прочитали свою карту сайта 5 сентября 2026 года:

Адресов223
Разных дат lastmod18
Самая ранняя28 июня 2026
Самая поздняя5 сентября 2026

Восемнадцать разных дат вместо одной — это и есть разница между «датой сборки» и настоящей историей.

Два дня выделяются: 2 сентября — 80 адресов, 3 сентября — 69. Это не ошибка: в те дни правились общие модули — заголовки и список проверок, — а от них зависят десятки страниц сразу. Список действительно меняется, когда меняется его элемент, поэтому семь записей из двадцати семи берут дату по папке целиком.

И всё-таки половина статей врёт

Дальше сверили каждую статью блога с историей её файла. Результат неприятный:

Статей
Сопоставлено66
Дата совпадает с последней правкой35
Расходится31

Расхождение: медиана 8 дней, максимум 52. Пять статей показывают 28 июня, хотя правились 19 августа.

Причина нашлась в одной строке: статьи блога попадают туда не через механизм с историей git, а с датой публикации из своей же шапки. То есть для них lastmod — это «когда написали», а не «когда меняли». Переписали текст в августе — карта продолжает показывать июнь.

Ошибка зеркальная к исходной. Сначала было «изменилось всё», теперь для самой большой части сайта — «не менялось с публикации». Оба варианта одинаково бесполезны для поисковика и оба выглядят правдоподобно, пока не сверишь с историей.

Мы это завели в работу, а не убрали из статьи: разбор про врущий lastmod честнее опубликовать вместе с собственным врущим lastmod.

Что проверить у себя

  • Сравните даты между собой. Если у всех страниц она одна — это дата сборки, а не изменения.
  • Сверьте несколько адресов с историей. Возьмите пять страниц, которые вы точно правили, и посмотрите, что стоит в карте.
  • Проверьте, откуда берётся дата для самой большой части сайта. У нас списки и служебные страницы считались правильно, а блог — нет, и именно он занимает две трети файла.
  • Не подставляйте дату сборки как запасной вариант молча. Если истории нет, честнее не писать lastmod вовсе.

Проверить свою карту можно нашей проверкой: она читает файл, считает адреса и показывает, что не так. А про то, как объявить её в robots.txt, и про остальные директивы — в разборе нашего файла.

Вопросы и ответы

FAQ по теме

Что такое lastmod в карте сайта?+
Дата последнего изменения страницы. Поисковик использует её как подсказку, что стоит перечитать. Подсказка работает, только если ей можно верить: если после каждой сборки дата обновляется у всех страниц, признак перестаёт что-либо значить.
Почему lastmod часто равен дате сборки?+
Потому что генератор карты по умолчанию подставляет текущее время. У нас так было у 121 страницы из 155 — то есть после каждого деплоя карта сообщала «изменилось всё».
Откуда брать настоящую дату?+
Из истории изменений. Мы собираем её одним проходом по git: для каждого файла берётся дата последнего коммита, и страница получает самую свежую дату среди своих источников.
Что делать, если истории нет?+
Ничего не выдумывать. В мелком клоне история обрывается, и файлы получили бы дату обрезки. Наш скрипт в этом случае пишет пустую карту дат, и lastmod откатывается на дату сборки — прежнее поведение, зато без вранья.