Тег lastmod — подсказка поисковику: вот здесь что-то изменилось, стоит
перечитать. Работает она ровно до тех пор, пока ей можно верить. У нас сначала
не работала, потом заработала — а потом мы измерили и нашли, что для половины
блога всё ещё врёт.
Как было
Генератор подставляет текущее время, если ему не сказать иное. В нашем случае это означало: 121 страница из 155 получала дату сборки. После каждого деплоя файл сообщал «изменилось всё».
Признак, который всегда говорит «да», ничем не отличается от признака, который всегда молчит. Настоящая правка в таком потоке теряется.
Как починили
Даты берём из истории изменений — одним проходом по журналу репозитория. Для каждого файла запоминаем дату последнего коммита, а страница получает самую свежую дату среди своих источников: собственной разметки, шаблона и данных.
Отдельное решение — что делать, когда истории нет. При сборке в облаке
репозиторий часто выкачивается обрезанным, и тогда файлы, не тронутые в
последних коммитах, получили бы дату обрезки. Скрипт это проверяет и в таком
случае пишет пустой справочник дат, и lastmod откатывается на дату сборки.
Врать поисковику хуже, чем промолчать.
Проверка: механизм работает
Прочитали свою карту сайта 5 сентября 2026 года:
| Адресов | 223 |
Разных дат lastmod | 18 |
| Самая ранняя | 28 июня 2026 |
| Самая поздняя | 5 сентября 2026 |
Восемнадцать разных дат вместо одной — это и есть разница между «датой сборки» и настоящей историей.
Два дня выделяются: 2 сентября — 80 адресов, 3 сентября — 69. Это не ошибка: в те дни правились общие модули — заголовки и список проверок, — а от них зависят десятки страниц сразу. Список действительно меняется, когда меняется его элемент, поэтому семь записей из двадцати семи берут дату по папке целиком.
И всё-таки половина статей врёт
Дальше сверили каждую статью блога с историей её файла. Результат неприятный:
| Статей | |
|---|---|
| Сопоставлено | 66 |
| Дата совпадает с последней правкой | 35 |
| Расходится | 31 |
Расхождение: медиана 8 дней, максимум 52. Пять статей показывают 28 июня, хотя правились 19 августа.
Причина нашлась в одной строке: статьи блога попадают туда не через
механизм с историей git, а с датой публикации из своей же шапки. То есть
для них lastmod — это «когда написали», а не «когда меняли». Переписали
текст в августе — карта продолжает показывать июнь.
Ошибка зеркальная к исходной. Сначала было «изменилось всё», теперь для самой большой части сайта — «не менялось с публикации». Оба варианта одинаково бесполезны для поисковика и оба выглядят правдоподобно, пока не сверишь с историей.
Мы это завели в работу, а не убрали из статьи: разбор про врущий lastmod
честнее опубликовать вместе с собственным врущим lastmod.
Что проверить у себя
- Сравните даты между собой. Если у всех страниц она одна — это дата сборки, а не изменения.
- Сверьте несколько адресов с историей. Возьмите пять страниц, которые вы точно правили, и посмотрите, что стоит в карте.
- Проверьте, откуда берётся дата для самой большой части сайта. У нас списки и служебные страницы считались правильно, а блог — нет, и именно он занимает две трети файла.
- Не подставляйте дату сборки как запасной вариант молча. Если истории
нет, честнее не писать
lastmodвовсе.
Проверить свою карту можно нашей проверкой: она читает файл, считает адреса и показывает, что не так. А про то, как объявить её в robots.txt, и про остальные директивы — в разборе нашего файла.
