Карта сайта: `lastmod` для карт сайта указан неверно

В главном файле карты сайта дата lastmod для вложенных файлов карты сайта указана неверно:

Например, см. https://meta.discourse.org/sitemap.xml
Даты для sitemap_2.xmlsitemap_5.xml одинаковы: ‘2024-03-14T14:02:32Z’, что соответствует точной дате ‘3 дня назад’.

<sitemapindex>
    <sitemap>
        <loc>https://meta.discourse.org/sitemap_recent.xml</loc>
        <lastmod>2024-03-17T14:02:29Z</lastmod>
    </sitemap>
    <sitemap>
        <loc>https://meta.discourse.org/sitemap_1.xml</loc>
        <lastmod>2024-03-17T14:02:29Z</lastmod>
    </sitemap>
    <sitemap>
        <loc>https://meta.discourse.org/sitemap_2.xml</loc>
        <lastmod>2024-03-14T14:02:32Z</lastmod>
    </sitemap>
    <sitemap>
        <loc>https://meta.discourse.org/sitemap_3.xml</loc>
        <lastmod>2024-03-14T14:02:32Z</lastmod>
    </sitemap>
    <sitemap>
        <loc>https://meta.discourse.org/sitemap_4.xml</loc>
        <lastmod>2024-03-14T14:02:32Z</lastmod>
    </sitemap>
    <sitemap>
        <loc>https://meta.discourse.org/sitemap_5.xml</loc>
        <lastmod>2024-03-14T14:02:32Z</lastmod>
    </sitemap>
</sitemapindex>

Техническая проблема:

Как-то так вышло, что для 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 чанков. Если затронута тема из последнего чанка, весь чанк становится невалидным: нужно удалить тему оттуда и переместить её в первый чанк.

Оптимизировать это бессмысленно для сайта с любой активностью, к тому же даты внутри чанка на самих темах вполне корректны.

1 лайк

Речь не идет о перемещении тем в разные части карты сайта. Темы могут оставаться в той же части карты сайта, где они уже находятся.
(Сопоставление темы и части карты сайта в любом случае произвольно, так как в SQL-запросе select с ограничением limit не задан порядок сортировки order.)

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

Ожидаемый процесс для Google должен быть следующим:

  1. Загрузка sitemap.xml
    → Проверка даты lastmod частей карты сайта и добавление в очередь тех частей, которые требуют обновления
    (дата lastmod новее, чем время последней загрузки)

  2. Загрузка частей карты сайта из очереди sitemap_[1-5].xml
    → Проверка даты lastmod URL тем и добавление в очередь тех URL, которые требуют обновления
    (дата lastmod новее, чем время последней загрузки)

  3. Загрузка URL тем из очереди.

Если в sitemap.xml дата lastmod частей карты сайта указана неверно:
→ Google не добавляет измененные части карты сайта в очередь (шаг 1)
→ Google не обновляет измененные части карты сайта своевременно (шаг 2)
→ Google не обновляет измененные темы своевременно (шаг 3)

В настоящее время https://meta.discourse.org/sitemap.xml выглядит следующим образом:

  • https://meta.discourse.org/sitemap_1.xml
    lastmod: 2024-03-19T12:50:09Z
    Все ли темы внутри имеют более раннюю или ту же дату? :github_check:

    • Последняя тема: https://meta.discourse.org/t/creating-a-stickypost-for-forum-threads/299967
      lastmod: 2024-03-19T11:03:38Z
  • https://meta.discourse.org/sitemap_2.xml
    lastmod: 2024-03-16T12:59:17Z
    Все ли темы внутри имеют более раннюю или ту же дату? :x:

    • Последняя тема: https://meta.discourse.org/t/launcher-rebuild-app-error-bootstrap-failed-with-exit-code-125/299538
      lastmod: 2024-03-19T09:17:46Z
  • https://meta.discourse.org/sitemap_3.xml
    lastmod: 2024-03-16T12:59:17Z
    Все ли темы внутри имеют более раннюю или ту же дату? :x:

    • Последняя тема: https://meta.discourse.org/t/configure-direct-delivery-incoming-email-for-self-hosted-sites/49487
      lastmod: 2024-03-18T18:16:26Z
  • https://meta.discourse.org/sitemap_4.xml
    lastmod: 2024-03-16T12:59:17Z
    Все ли темы внутри имеют более раннюю или ту же дату? :x:

    • Последняя тема: https://meta.discourse.org/t/video-thumbnails-issue/263595
      lastmod: 2024-03-19T00:00:20Z
  • https://meta.discourse.org/sitemap_5.xml
    lastmod: 2024-03-16T12:59:17Z
    Все ли темы внутри имеют более раннюю или ту же дату? :x:

    • Последняя тема: https://meta.discourse.org/t/daily-summary-9pm-utc/291850
      lastmod: 2024-03-18T21:14:49Z
  • https://meta.discourse.org/sitemap_recent.xml
    2024-03-19T13:03:41Z
    Все ли темы внутри имеют более раннюю или ту же дату? :github_check:

    • Последняя тема: https://meta.discourse.org/t/daily-summary-1pm-utc/291852
      lastmod: 2024-03-19T13:02:07Z

Опять же, это не совсем верно: last_mod предназначен для обозначения даты последнего изменения карты сайта, а не максимальной даты тем.

Если тема сегодня была исключена из раздела карты сайта, а дата последнего изменения в фрагменте была неделю назад, то сам фрагмент изменился сегодня, поскольку из него была удалена тема.

Это абсолютно верно.

Таким образом, та же самая логика приводит к следующему:
Если тема в разделе карты сайта изменилась сегодня, а последняя модификация в блоке была сегодня… значит, блок изменился сегодня [примечание: не 3 дня назад]. Тема в нём изменилась сегодня.

Для нашего с вами примера выше текущая реализация утверждает:
sitemap-chunks sitemap_[2-5].xml изменились 3 дня назад. Это неверно. Должно быть указано «изменились сегодня».

Вот общая картина всего этого:

sitemap_recent.xml:

  • Включает только все изменённые темы за последние 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.