?page= Bug, sowohl im Core als auch im Sitemap-Plugin

Es scheint, als stünden hier zwei oder drei Off-by-One-Fehler übereinander…

Sobald ein Thema 18 Beiträge hat, beginnt die sitemap_recent.xml, eine URL mit einer Seitenzahl anzuzeigen: https://forum.example.com/t/slug/123?page=2

Problem 1: Seite 2 existiert erst, wenn ein Thema 20 Beiträge hat, aber die Sitemap zeigt diesen Link trotzdem an.
Erwartet: Die Sitemap zeigt page=2 erst an, wenn das Thema 20 Beiträge hat.

Problem 2: Wenn ein Thema 18 Beiträge hat, führt dieser Link zu einem Fehler „Diese Seite existiert nicht".
Erwartet: Dies wird fehlerfrei behandelt und der Benutzer wird ans Ende des Themas weitergeleitet.

Problem 3: Wenn ein Thema 19 Beiträge hat, führt dieser Link zu der Meldung „Fehler. Beim Laden ist etwas schiefgelaufen".
Erwartet: Dies wird fehlerfrei behandelt und der Benutzer wird ans Ende des Themas weitergeleitet.

Problem 4: Wenn ein Thema mehr als 20 Beiträge hat, aber Beiträge gelöscht wurden, sodass die Gesamtzahl der sichtbaren Beiträge geringer ist, bleibt ?page=2 im aktuellen Sitemap erhalten, bis ein neuer Beitrag erstellt wird; dann verschwindet er.
Erwartet: Die Seitenzahl verschwindet (oder wird bei höheren Seitenzahlen reduziert), um der tatsächlichen Anzahl verfügbarer Seiten zu entsprechen.

Schlimmer noch: Dieser fehlerhafte Link wird auch in Google angezeigt!
Problem 5: Wenn auf diesen Link geklickt wird, erhält der Benutzer einen Fehler.
Aber in Google scheint dabei doppelte Inhalte erstellt zu werden.

Reproduktion auf Meta:

  1. Finde ein Thema mit 17 oder 18 Antworten:
    image

  2. Suche es in https://meta.discourse.org/sitemap_recent.xml

  3. Folge dem Link

  4. Prüfe Google

6 „Gefällt mir“

Hmm, das ist nicht gut! Wir sollten das beheben und auf die ältere Version zurückportieren, @zogstrip.

5 „Gefällt mir“

@nbianca kannst du das zu deiner Liste hinzufügen?

3 „Gefällt mir“

Das große Problem beim Berechnen der Seitenzahlen lag in discourse-sitemap:

Das Problem mit dem Caching wurde hier behoben:

Ich habe zudem das „Nicht gefunden“-Problem im Core (geringfügig) behoben, bei dem bei einer Anfrage an die zweite Seite, obwohl nur 20 Beiträge (1 Seite) vorhanden waren, fälschlicherweise mit einem 200er-Statuscode geantwortet wurde:

8 „Gefällt mir“