Sitemap: `lastmod` para sitemaps incorreto

Na sitemap principal, a data lastmod das sitemaps subjacentes está incorreta:

Por exemplo, veja https://meta.discourse.org/sitemap.xml
As datas para sitemap_2.xml a sitemap_5.xml são todas as mesmas ‘2024-03-14T14:02:32Z’ - que é exatamente ‘3 dias atrás’.

<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 técnico:

De alguma forma, 3.days.ago é usado para sitemap_[2-5].xml, pois sitemap.last_posted_topic pode não retornar um valor válido.

Outro ponto: Em last_posted_topic também use bumped_at

Compare com lastmod nas próprias sitemaps de tópicos sitemap_[1-5].xml:

Pseudo-código não testado:

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

Estou preocupado que uma otimização aqui complique enormemente as coisas para um benefício muito pequeno.

Pense bem…

Digamos que existam 6 blocos de metadados. Se um tópico do último bloco for tocado… o bloco inteiro se torna inválido, você tem que remover o tópico de lá e colocá-lo no bloco da frente.

Otimizar aqui é um pouco inútil para um site que tem qualquer tipo de atividade e as datas dentro do bloco nos tópicos reais estão boas.

1 curtida

Não se trata de mover tópicos para diferentes sitemap-chunks. Os tópicos podem permanecer no mesmo sitemap-chunk onde já estão.
(O mapeamento tópico-para-sitemap-chunk é arbitrário de qualquer maneira, pois a instrução select do banco de dados com limit não tem order definido.)

O relatório de bug é sobre que a data lastmod de cada sitemap-chunk deve representar a data lastmod do tópico mais recente que o sitemap-chunk contém.

O caminho para o Google deve ser:

  1. Carregar sitemap.xml
    → Verificar lastmod dos sitemap-chunks e enfileirar sitemap-chunks que precisam de atualização
    (data lastmod é mais recente que a última vez que foi baixado)

  2. Carregar sitemap-chunks enfileirados sitemap_[1-5].xml
    → Verificar lastmod dos URLs dos tópicos e enfileirar URLs dos tópicos que precisam de atualização
    (data lastmod é mais recente que a última vez que foi baixado)

  3. Carregar URLs dos tópicos enfileirados.

Se em sitemap.xml o lastmod dos sitemap-chunks estiver incorreto:
→ O Google não enfileira sitemap-chunks alterados (passo 1)
→ O Google não atualiza sitemap-chunks alterados em tempo hábil (passo 2)
→ O Google não atualiza tópicos alterados em tempo hábil (passo 3)

Atualmente, https://meta.discourse.org/sitemap.xml se parece com isto:

  • https://meta.discourse.org/sitemap_1.xml
    lastmod: 2024-03-19T12:50:09Z
    Todos os tópicos dentro têm data mais antiga ou igual? :github_check:

    • Tópico mais 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
    Todos os tópicos dentro têm data mais antiga ou igual? :x:

    • Tópico mais 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
    Todos os tópicos dentro têm data mais antiga ou igual? :x:

    • Tópico mais 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
    Todos os tópicos dentro têm data mais antiga ou igual? :x:

    • Tópico mais 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
    Todos os tópicos dentro têm data mais antiga ou igual? :x:

    • Tópico mais 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
    Todos os tópicos dentro têm data mais antiga ou igual? :github_check:

    • Tópico mais recente: https://meta.discourse.org/t/daily-summary-1pm-utc/291852
      lastmod: 2024-03-19T13:02:07Z

Novamente, isso não é estritamente verdade… last_mod destina-se a ser a última data em que o sitemap foi modificado, não a data máxima dos tópicos.

Se um tópico saiu da seção do sitemap hoje e a última modificação no bloco foi há uma semana… o bloco mudou hoje. Um tópico saiu dele hoje.

Isso é totalmente verdade.

Portanto, a mesma lógica resulta em:
Se um tópico na seção do sitemap mudou hoje e a última modificação no chunk foi hoje… o chunk mudou hoje [nota: não há 3 dias atrás]. Um tópico nele mudou hoje.

Para o seu e o meu exemplo acima, a implementação atual diz:
sitemap-chunks sitemap_[2-5].xml mudou há 3 dias. Isso está errado. Deveria dizer ‘mudou hoje’.

Aqui está o quadro geral por trás de tudo isso:

sitemap_recent.xml:

  • Inclui apenas todos os tópicos alterados dos últimos 3 dias
  • É renovado a cada 1 hora (tempo de cache interno do Rails de 1 hora)
  • Tem a data lastmod correta em sitemap.xml

sitemap_[1-5].xml:

  • Realmente inclui todos e quaisquer tópicos, e também inclui todos os tópicos alterados dos últimos 3 dias
  • É renovado a cada 24 horas (tempo de cache interno do Rails de 24 horas)
  • sitemap_[2-5].xml têm a data lastmod incorreta de 3.days.ago em sitemap.xml

A data lastmod incorreta para sitemap_[2-5].xml não importa, pois o Google obterá todas as alterações recentes de tópicos através de sitemap_recent.xml em tempo hábil.