В главном файле карты сайта дата lastmod для вложенных файлов карты сайта указана неверно:
Например, см. https://meta.discourse.org/sitemap.xml
Даты для sitemap_2.xml–sitemap_5.xml одинаковы: ‘2024-03-14T14:02:32Z’, что соответствует точной дате ‘3 дня назад’.
Как-то так вышло, что для sitemap_[2-5].xml используется значение 3.days.ago, поскольку метод sitemap.last_posted_topic может не возвращать корректное значение.
Ещё один момент: в last_posted_topic также использовать bumped_at
Сравните с lastmod в самих файлах карт сайта тем sitemap_[1-5].xml:
Нестандартный код для тестирования (псевдокод):
def last_posted_topic
[sitemap_topics.maximum(:bumped_at), sitemap_topics.maximum(:updated_at)].max
end
Я беспокоюсь, что оптимизация здесь неоправданно усложняет всё ради очень малой выгоды.
Подумайте об этом…
Допустим, в метаданных есть 6 чанков. Если затронута тема из последнего чанка, весь чанк становится невалидным: нужно удалить тему оттуда и переместить её в первый чанк.
Оптимизировать это бессмысленно для сайта с любой активностью, к тому же даты внутри чанка на самих темах вполне корректны.
Речь не идет о перемещении тем в разные части карты сайта. Темы могут оставаться в той же части карты сайта, где они уже находятся.
(Сопоставление темы и части карты сайта в любом случае произвольно, так как в SQL-запросе select с ограничением limit не задан порядок сортировки order.)
Суть сообщения об ошибке заключается в том, что дата lastmod каждой части карты сайта должна соответствовать дате lastmod самой последней темы, содержащейся в этой части.
Ожидаемый процесс для Google должен быть следующим:
Загрузка sitemap.xml
→ Проверка даты lastmod частей карты сайта и добавление в очередь тех частей, которые требуют обновления
(дата lastmod новее, чем время последней загрузки)
Загрузка частей карты сайта из очереди sitemap_[1-5].xml
→ Проверка даты lastmod URL тем и добавление в очередь тех URL, которые требуют обновления
(дата lastmod новее, чем время последней загрузки)
Загрузка URL тем из очереди.
Если в sitemap.xml дата lastmod частей карты сайта указана неверно:
→ Google не добавляет измененные части карты сайта в очередь (шаг 1)
→ Google не обновляет измененные части карты сайта своевременно (шаг 2)
→ Google не обновляет измененные темы своевременно (шаг 3)
Опять же, это не совсем верно: last_mod предназначен для обозначения даты последнего изменения карты сайта, а не максимальной даты тем.
Если тема сегодня была исключена из раздела карты сайта, а дата последнего изменения в фрагменте была неделю назад, то сам фрагмент изменился сегодня, поскольку из него была удалена тема.
Таким образом, та же самая логика приводит к следующему:
Если тема в разделе карты сайта изменилась сегодня, а последняя модификация в блоке была сегодня… значит, блок изменился сегодня [примечание: не 3 дня назад]. Тема в нём изменилась сегодня.
Для нашего с вами примера выше текущая реализация утверждает:
sitemap-chunks sitemap_[2-5].xml изменились 3 дня назад. Это неверно. Должно быть указано «изменились сегодня».
Включает только все изменённые темы за последние 3 дня
Обновляется каждые 1 час (внутреннее время кэширования Rails — 1 час)
Содержит корректную дату lastmod в sitemap.xml
sitemap_[1-5].xml:
Действительно включает все темы, а также все изменённые темы за последние 3 дня
Обновляется каждые 24 часа (внутреннее время кэширования Rails — 24 часа)
В sitemap_[2-5].xml указана неверная дата lastmod — 3.days.ago в sitemap.xml
Неверная дата lastmod для sitemap_[2-5].xml не имеет значения, так как Google своевременно получает все недавние изменения тем через sitemap_recent.xml.