Canonical-Tag wird nach Client-Side-Redirect von Crawler ?page=N auf /t/slug/id/<post_number> nicht zurückgesetzt

Wir beobachten eine große Anzahl von Themen-Permalinks und Paginierungs-URLs, die in Google Search Console in die Kategorie „Gecrawlt – derzeit nicht indexiert“ fallen (ca. 35k URLs auf einem ca. 20 Jahre alten importierten Forum, Discourse-Version v2026.9.0-latest, self-hosted).

Was wir festgestellt haben:

Discourse liefert Crawlern ?page=N-Paginierungslinks für lange Themen (da die eigentliche UI auf unendliches Scrollen basiert). Wenn ein JS-fähiger Client (einschließlich Googles Renderers) eine dieser ?page=N-URLs lädt, gibt Discourse einen Client-Side-Redirect an /t/slug//<post_number> aus.

Reproduktion:

  1. Lade eine Themen-URL kalt, mit jeder Post-Nummer oder ?page=-Suffix:
    GET /t///14 →
    GET /t// → derselbe Canonical
    GET /t///1 → derselbe Canonical
    GET /t//?page=127 → (selbstreferenzierend, NICHT normalisiert)
  2. Lade die Website normal (JS aktiv) und navigiere über Embers Router zu einer URL, die ein Post-Nummer-Suffix enthält (z. B. durch Klick auf einen „Zum ersten ungelesenen Beitrag springen“-Link aus den Vorschlägen). Sobald der SPA-Übergang abgeschlossen ist, ist document.querySelector(‘link[rel=canonical]’).href gleich der aktuellen Post-Nummer-URL – sie verweist nicht zurück auf das Basis-Thema.

Dies widerspricht dem eigenen, von Discourse erklärten Designziel. In diesem Thread von 2015 war @sam ausdrücklich:

▎ Themen: Der Canonical-Link sollte auf das Basis-Thema zeigen, damit individuelle Beitragsseiten nicht als getrennte Suchergebnisse erscheinen.
▎ Kategorie-/Listen-Seiten: Canonical vollständig entfernt, da paginierte Listen laut eigener Google-Leitlinie keine Duplikate sind.

Was wir heute beobachten, widerspricht dem auf zwei Arten:

  1. Ein Thema mit ?page=N (Crawler-Paginierung) enthält die paginierte URL im rohen Server-HTML, anstelle des Basis-Themas – obwohl Themen (im Gegensatz zu Kategorielisten) ausdrücklich immer auf die Basis-URL zusammengeführt werden sollten.
  2. Nach dem Client-Side-Redirect von ?page=N auf /t/slug/id/<post_number> bleibt der Canonical-Link im gerenderten DOM ebenfalls auf dieser Post-Nummer-URL, anstatt auf das Basis-Thema zurückgesetzt zu werden.

Beides sieht nach Regressionen gegenüber dem Designziel von 2015 aus, nicht nach beabsichtigtem aktuellem Verhalten.

Warum dies für das Indexieren wichtig ist: Googles Indexierungssystem wertet den Canonical-Link aus dem gerenderten DOM aus. Jede direkt von Google erreichte URL mit Post-Nummer- oder Seiten-Suffix – über die Funktion „Link zum Beitrag teilen“ (auf unserem Forum stark genutzt über WhatsApp/Discord), über alte externe Backlinks (wir mappen Legacy-vBulletin-?p=-Permalinks auf Post-Nummer-URLs) oder über den Crawler selbst – deklariert ihren eigenen Canonical-Link, anstatt in das Basis-Thema konsolidiert zu werden. In Search Console zeigt sich dies als Tausende nahezu identische URLs, die in „gecrawlt – nicht indexiert“ stecken.

Beispielbetroffene URLs aus unserem GSC-Bericht (alle zuletzt im frühen September 2026 gecrawlt):
/t/tengo-que-pasar-la-itv/21100/10
/t/new-honda-nsx-proyect/4910/69
/t/hacer-tubo-recto-sin-silencioso-del-catalizador-hacia-atras/25579/25
/t/kedada-japo-en-cataluna-2014/28148/75
/t/el-diario-de-patricio-de-la-plana/13286?p

Frage an das Team: Da dies ein >10 Jahre altes Design ist, hat sich seitdem etwas geändert, das den selbstreferenzierenden Canonical-Link auf diesen URLs nun beabsichtigt macht? Oder lohnt es sich, dies als Regression erneut zu prüfen? Gerne stellen wir HAR-Dateien / weitere Reproduktionsbeispiele bereit, falls hilfreich.

1 „Gefällt mir“