Sitemap: サイトマップの `lastmod` が間違っている

メインサイトマップのサブサイトマップの lastmod 日付が間違っています。

例: https://meta.discourse.org/sitemap.xml を参照してください。
sitemap_2.xml から sitemap_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.last_posted_topic が有効な値を返さない可能性があるため、sitemap_[2-5].xml3.days.ago が使用されているようです。

もう一点: last_posted_topic でも bumped_at を使用してください。

トピックサイトマップ sitemap_[1-5].xmllastmod と比較してください。

テストされていない疑似コード:

    def last_posted_topic
      [sitemap_topics.maximum(:bumped_at), sitemap_topics.maximum(:updated_at)].max
    end

ほとんど利益がないのに、この最適化が非常に複雑になると心配しています。

よく考えてみてください…

メタに6つのチャンクがあるとします。最後のチャンクのトピックに触れると…チャンク全体が無効になり、トピックをそこから削除して最初のチャンクに入れる必要があります。

ある程度の活動があるサイトにとって、ここで最適化することはほとんど無意味であり、実際のトピックのチャンク内の日付は問題ありません。

「いいね!」 1

トピックを異なるサイトマップチャンクに移動することではありません。トピックは、すでに存在しているのと同じサイトマップチャンク内に留まることができます。
(トピックとサイトマップチャンクのマッピングは、limit を持つ dbselect ステートメントに order が定義されていないため、いずれにしても任意です。)

バグレポートは、各サイトマップチャンクの lastmod 日付が、サイトマップチャンクに含まれる最新トピックの lastmod 日付を表すべきであるということです。

Google の手順は次のようになります。

  1. sitemap.xml を読み込みます。
    → サイトマップチャンクの lastmod を確認し、更新が必要なサイトマップチャンクをキューに入れます。
    lastmod 日付が前回ダウンロード時より新しい場合)

  2. キューに入れられたサイトマップチャンク sitemap_[1-5].xml を読み込みます。
    → トピック URL の lastmod を確認し、更新が必要なトピック 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 は、トピックの最大日付ではなく、サイトマップが最後に変更された日付を意味します。

トピックが今日サイトマップセクションから除外され、チャンクの最終変更日が1週間前である場合…チャンクは今日変更されました。トピックが今日除外されました。

これは完全に正しいです。

したがって、全く同じロジックが以下のような結果になります。
もしトピックがサイトマップセクション内で今日変更され、チャンクの最終更新が今日だった場合…チャンクは今日変更されました [注意: 3日前ではない]。トピックが今日変更されました。

上記あなたの例と私の例では、現在の実装は次のように述べています。
sitemap-chunks sitemap_[2-5].xml は3日前に変更されました。これは間違いです。「今日変更されました」と言うべきです。

これらすべてを支える大きな構図は以下の通りです。

sitemap_recent.xml:

  • 過去3日間の変更されたトピックのみを含みます
  • 1時間ごとに更新されます(内部Railsキャッシュ時間1時間)
  • sitemap.xml に正しい lastmod 日付が含まれます

sitemap_[1-5].xml:

  • すべてのトピックを実際に含み、過去3日間の変更されたトピックもすべて含みます
  • 24時間ごとに更新されます(内部Railsキャッシュ時間24時間)
  • sitemap_[2-5].xmlsitemap.xml3.days.ago の間違った lastmod 日付が含まれています

sitemap_[2-5].xml の間違った lastmod 日付は問題ありません。Google は sitemap_recent.xml を通じて、すべての最近のトピックの変更を適時に取得するためです。