?page= bug, à la fois dans le noyau et dans le plugin sitemap

Il semble qu’il y ait deux ou trois erreurs de décalage de un empilées les unes sur les autres ici…

Dès qu’un sujet comporte 18 messages, le fichier sitemap_recent.xml commence à afficher une URL avec un numéro de page https://forum.example.com/t/slug/123?page=2

Problème 1 : La page 2 n’existe pas tant qu’un sujet n’a pas 20 messages, mais le plan du site affiche ce lien.
Attendu : le plan du site n’affiche pas page=2 tant que le sujet n’a pas 20 messages.

Problème 2 : Lorsqu’un sujet comporte 18 messages, ce lien renvoie une erreur « Cette page n’existe pas ».
Attendu : cela est géré élégamment et l’utilisateur est redirigé vers la fin du sujet.

Problème 3 : Lorsqu’un sujet comporte 19 messages, ce lien renvoie le message « Erreur. Lors de la tentative de chargement. Quelque chose s’est mal passé ».
Attendu : cela est géré élégamment et l’utilisateur est redirigé vers la fin du sujet.

Problème 4 : Lorsqu’un sujet comporte plus de 20 messages, mais que des messages ont été supprimés de sorte que le total des messages visibles est inférieur, le paramètre ?page=2 reste dans le plan du site récent jusqu’à ce qu’un nouveau message soit publié, puis il disparaît.
Attendu : le numéro de page disparaît (ou, pour des pages supérieures, diminue) pour refléter le nombre réel de pages disponibles.

Pire : Ce mauvais lien apparaît également dans Google !
Problème 5 : lorsque ce lien est cliqué, il affiche une erreur à l’utilisateur.
Mais dans Google, apparemment, du contenu dupliqué est créé.

Reproduction sur Meta :

  1. Trouver un sujet avec 17 ou 18 réponses :
    image

  2. Le trouver dans https://meta.discourse.org/sitemap_recent.xml

  3. Suivre le lien

  4. Vérifier Google

6 « J'aime »

Hmm, ce n’est pas bon ! Nous devrions corriger cela et le rétroporter, @zogstrip.

5 « J'aime »

@nbianca peux-tu ajouter ceci à ta liste ?

3 « J'aime »

Le principal problème de calcul des numéros de page se trouvait dans discourse-sitemap :

Le problème de mise en cache a été résolu ici :

J’ai également corrigé le problème de « non trouvé » dans le noyau (mineur), où une réponse 200 était renvoyée lors de la demande de la deuxième page, alors qu’il n’y avait que 20 messages (1 page) :

8 « J'aime »