Sitemap: `lastmod` errato per le sitemap

Nella sitemap principale, la data lastmod per le sitemap sottostanti è errata:

Ad esempio, vedi https://meta.discourse.org/sitemap.xml
Le date per sitemap_2.xml fino a sitemap_5.xml sono tutte uguali ‘2024-03-14T14:02:32Z’ - che è esattamente ‘3 giorni fa’.

<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>

Problema tecnico:

In qualche modo viene utilizzato 3.days.ago per sitemap_[2-5].xml poiché sitemap.last_posted_topic potrebbe non restituire un valore valido.

Altro punto: in last_posted_topic usa anche bumped_at

Confronta con lastmod nelle sitemap dei topic sitemap_[1-5].xml stesse:

Pseudo-codice non testato:

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

Temo che un’ottimizzazione qui complichi enormemente le cose per un beneficio molto esiguo.

Pensaci bene…

Diciamo che ci sono 6 blocchi su meta. Se viene toccato un argomento dall’ultimo blocco… l’intero blocco diventa non valido, devi rimuovere l’argomento da lì e metterlo nel blocco frontale.

Ottimizzare qui è un po’ inutile per un sito che vede un qualsiasi tipo di attività e le date all’interno del blocco sugli argomenti effettivi vanno bene.

1 Mi Piace

Non si tratta di spostare argomenti in diversi sitemap-chunk. Gli argomenti possono rimanere nello stesso sitemap-chunk in cui si trovano già.
(La mappatura argomento-a-sitemap-chunk è comunque arbitraria poiché l’istruzione select del database con limit non ha order definito.)

Il bug report riguarda il fatto che la data lastmod di ogni sitemap-chunk dovrebbe rappresentare la data lastmod dell’argomento più recente contenuto nello sitemap-chunk.

Il modo per Google dovrebbe essere:

  1. Carica sitemap.xml
    → Controlla lastmod degli sitemap-chunk e accoda gli sitemap-chunk che necessitano di un aggiornamento
    (data lastmod più recente dell’ultima volta scaricata)

  2. Carica gli sitemap-chunk accodati sitemap_[1-5].xml
    → Controlla lastmod degli URL degli argomenti e accoda gli URL degli argomenti che necessitano di un aggiornamento
    (data lastmod più recente dell’ultima volta scaricata)

  3. Carica gli URL degli argomenti accodati.

Se in sitemap.xml il lastmod degli sitemap-chunk è errato:
→ Google non accoda gli sitemap-chunk modificati (passaggio 1)
→ Google non aggiorna gli sitemap-chunk modificati in modo tempestivo (passaggio 2)
→ Google non aggiorna gli argomenti modificati in modo tempestivo (passaggio 3)

Attualmente https://meta.discourse.org/sitemap.xml appare così:

  • https://meta.discourse.org/sitemap_1.xml
    lastmod: 2024-03-19T12:50:09Z
    Tutti gli argomenti all’interno hanno una data più vecchia o uguale? :github_check:

    • Argomento più recente: 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
    Tutti gli argomenti all’interno hanno una data più vecchia o uguale? :x:

    • Argomento più recente: 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
    Tutti gli argomenti all’interno hanno una data più vecchia o uguale? :x:

    • Argomento più recente: 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
    Tutti gli argomenti all’interno hanno una data più vecchia o uguale? :x:

    • Argomento più recente: 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
    Tutti gli argomenti all’interno hanno una data più vecchia o uguale? :x:

    • Argomento più recente: 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
    Tutti gli argomenti all’interno hanno una data più vecchia o uguale? :github_check:

    • Argomento più recente: https://meta.discourse.org/t/daily-summary-1pm-utc/291852
      lastmod: 2024-03-19T13:02:07Z

Di nuovo, questo non è strettamente vero… last_mod è inteso come l’ultima data in cui la sitemap è stata modificata, non la data massima degli argomenti.

Se un argomento è stato rimosso dalla sezione della sitemap oggi e l’ultima modifica nel chunk risale a una settimana fa… il chunk è cambiato oggi. Un argomento è stato rimosso da esso oggi.

Questo è assolutamente vero.

Quindi la stessa identica logica porta a:
Se un argomento nella sezione della sitemap è cambiato oggi e l’ultima modifica nel blocco è di oggi… il blocco è cambiato oggi [nota: non 3 giorni fa]. Un argomento al suo interno è cambiato oggi.

Per il tuo e il mio esempio qui sopra, l’implementazione attuale dice:
i blocchi della sitemap sitemap_[2-5].xml sono cambiati 3 giorni fa. Questo è sbagliato. Dovrebbe dire ‘cambiati oggi’.

Ecco il quadro generale dietro tutto questo:

sitemap_recent.xml:

  • Include solo tutti gli argomenti modificati negli ultimi 3 giorni
  • Viene rinnovato ogni ora (tempo di cache interno di Rails di 1 ora)
  • Ha una data lastmod corretta in sitemap.xml

sitemap_[1-5].xml:

  • Include veramente tutti gli argomenti, e include anche tutti gli argomenti modificati negli ultimi 3 giorni
  • Viene rinnovato ogni 24 ore (tempo di cache interno di Rails di 24 ore)
  • sitemap_[2-5].xml ha una data lastmod errata di 3.days.ago in sitemap.xml

La data lastmod errata per sitemap_[2-5].xml non ha importanza, poiché Google otterrà tutte le modifiche recenti degli argomenti tramite sitemap_recent.xml in modo tempestivo.