Discourse-indexnow – Sofortige Benachrichtigung von Bing & Yandex bei Erstellung oder Bearbeitung von Themen

:information_source: Zusammenfassung Sendet öffentliche Themen-URLs automatisch bei Erstellung, Bearbeitung, Löschung und Antworten an das IndexNow-Protokoll, damit Bing, Yandex und andere kompatible Suchmaschinen Ihren Inhalt in Minuten entdecken oder aus ihren Indizes entfernen können, ohne auf Crawler warten zu müssen.
:hammer_and_wrench: Repository github.com/imlotso/discourse-indexnow
:open_book: Installationsanleitung So installieren Sie Plugins in Discourse

Eine chinesischsprachige Abhandlung mit weiteren Hintergrundinformationen ist auch auf meinem Forum verfügbar: sitetalk.net/t/topic/642

Funktionen

  • Sendet neue öffentliche Themen automatisch; sendet erneut, wenn der erste Beitrag oder wichtige Themenattribute geändert werden.
  • Senden bei Antwort: Sendet die paginierte URL (z. B. ?page=3) automatisch, wenn neue Antworten gepostet werden, mit einer konfigurierbaren Abklingzeit pro URL, um Spam zu verhindern.
  • Sendet Themen-URLs automatisch bei Löschung, um Suchmaschinen zu helfen, 404/410-Fehler zu erkennen und Inhalte schnell aus dem Index zu entfernen.
  • Sendet lokalisierte Themen-URLs automatisch in Batches, wenn Content Localization und Crawler-Locale-Query-Parameter aktiv sind. Verwendet den tatsächlich konfigurierten Locale-Parameter, nicht hartkodiert.
  • Bündelt kanonische und lokalisierte URLs in einzelne IndexNow-urlList-Batch-Anfragen, anstatt sie einzeln zu senden.
  • Historische Nachlieferung: Filtern nach Kategorie und Datumsbereich, Vorschau der Trefferanzahlen und Massenversand. Automatische Aufteilung für Batches, die das Protokoll-Limit von 10.000 überschreiten. Aktive Jobs können über den Reiter „Logs“ abgebrochen werden.
  • Manueller Versand: Senden Sie benutzerdefinierte URLs nach Bedarf Zeile für Zeile; externe oder nicht berechtigte Links werden automatisch herausgefiltert.
  • Intelligentes Rate Limiting: Wendet stündliche und tägliche Limits mit einem fein abgestuften Sliding-Window-Algorithmus an. Weicht automatisch bei 429 aus (unter Beachtung von Retry-After). Die Admin-UI bietet visuelle Quota Bars, die den aktuellen Verbrauch und die exakte Zeit bis zur Freigabe der Kapazität anzeigen.
  • Schließt bestimmte Kategorien und Tags als Geschäftslogik-Regeln zusätzlich zu automatisierten Datenschutzfiltern aus.
  • Schlüsselrotation mit einem Bestätigungsdialog für versehentliches Überschreiben; frühere Schlüssel werden sofort ungültig gemacht.
  • Admin-Verifizierung für die öffentliche Zugänglichkeit von /<key>.txt.
  • Themenverschiebungen, Änderungen der Kategorie-Sichtbarkeit und Tag-Updates lösen asynchrone Neusendungen oder Ausschlüsse in Hintergrundjobs aus, um UI-Blockaden zu verhindern.
  • Umfangreiche Log-Einträge mit Batch-IDs, Locale, Auslösergründen, 7-Tage-Erfolgs/Fehlschlag-Trenddiagrammen und kategorisierten Fehlerschritten (Rate Limited, Key Error, Domain Mismatch).
  • Vollständig asynchrone Übermittlungen unter Einhaltung von Datenschutzgrenzen: PN, eingeschränkte Kategorien, nicht gelistete/gelöschte Themen und Login-pflichtige Seiten werden nie übermittelt.
  • Verfügbar auf Englisch und Vereinfachtem Chinesisch.

Einrichtungsschritte

  1. Installieren Sie das Plugin gemäß der obigen Anleitung und bauen Sie Ihren Container neu.
  2. Gehen Sie zu Admin > Plugins > discourse-indexnow.
  3. Klicken Sie unter Einstellungen auf Schlüssel generieren (oder fügen Sie einen vorhandenen 32-stelligen Hex-Schlüssel ein).
  4. Aktivieren Sie IndexNow-Übermittlungen aktivieren.
  5. Verifizieren Sie die öffentliche Zugänglichkeit des Schlüssels:
https://your-forum-domain.com/<key>.txt

Sollte HTTP 200 mit der Schlüsselzeichenfolge zurückgeben. Das Admin-Panel zeigt auch einen zwischengespeicherten grünen/roten Indikator an.
6. (Optional) Verwenden Sie im Reiter Logs das Panel „Backfill“: Wählen Sie Kriterien, klicken Sie auf Vorschau, dann auf Senden.
7. (Optional) Verwenden Sie das manuelle Sendefeld, um einzelne URLs außerhalb des automatisierten Flusses zu senden.

Die Log-Seite bietet auch Quota-Nutzungsleisten, ein 7-Tage-Trenddiagramm und Fehlerschritt-Metriken, um Übermittlungsprobleme leicht zu diagnostizieren.

Konfigurationseinstellungen

Einstellung Beschreibung
indexnow_enabled Hauptschalter. Wird automatisch deaktiviert, wenn login_required aktiviert ist.
indexnow_api_key Der 32-stellige Hex-Schlüssel zur Verifizierung der Übermittlung.
indexnow_submit_on_create Automatisch senden, wenn ein neues öffentliches Thema erstellt wird.
indexnow_submit_on_edit Automatisch erneut senden, wenn der erste Beitrag oder Themenattribute geändert werden.
indexnow_submit_on_reply Automatisch die spezifische paginierte URL senden, wenn neue Antworten gepostet werden.
indexnow_url_cooldown_minutes Abklingzeit pro URL (in Minuten), um doppelte Übermittlungen zu verhindern.
indexnow_excluded_category_ids Kategorien, die ausgeschlossen werden sollen, auch wenn sie öffentlich sind.
indexnow_excluded_tag_names Tags, die ausgeschlossen werden sollen, auch wenn die Themenkategorie berechtigt ist.
indexnow_hourly_limit Maximale Anzahl der pro Stunde zu sendenden URLs (Sliding Window).
indexnow_daily_limit Maximale Anzahl der pro Tag zu sendenden URLs (Sliding Window).

Bekannte Einschränkungen

  • Google nimmt derzeit nicht am IndexNow-Protokoll teil.
  • Lokalisierte URLs werden nur übermittelt, wenn Crawler-Locale-Parameter aktiv sind und lokalisierte Inhalte vorhanden sind.
  • Derzeit werden Bearbeitungen des ersten Beitrags und die Paginierung neuer Antworten unterstützt, aber Bearbeitungen von Zwischenantworten lösen keine eigenständigen Übermittlungen aus.

Dies ist ein unabhängiges, inoffizielles Plugin – nicht vom Discourse-Team gewartet. Es läuft produktiv auf meinem eigenen Forum, hat RSpec-Testabdeckung mit CI bei jedem Push/PR, und ich würde mich über Bug-Reports oder Funktionswünsche über GitHub-Issues oder Antworten hier freuen.

7 „Gefällt mir“

Danke dafür! Ich wollte gerade gerade sagen, muss ich mir nicht selbst ein Indexnow-Plugin bauen? Und schwupps! Gefunden!

Kannst du mir sagen, ob indexnow_submit_on_edit bei allen Rebakes, die den Inhalt ändern, eine Indexnow-Übermittlung auslöst?

Nein — es wird nur bei echten Bearbeitungen über den normalen PostRevisor-Flow ausgelöst und nur für den ersten Beitrag (OP) eines Themas. Antworten anderer Nutzer und systemausgelöste Neuberechnungen (z. B. Cron-Jobs zur Bildkorrektur, Massen-Neuberechnung durch Admins usw.) lösen keine erneute Einreichung aus, da diese nicht über das Ereignis laufen, an das sich dieses Plugin andockt.

Ich verwone das Plugin seit einer Woche und bin damit sehr zufrieden. Es funktioniert genau so, wie ich es brauche, allerdings bin ich auf einige Bugs gestoßen, die dazu führten, dass das Plugin unmittelbar nach der Installation fehlschlug.

Konkret habe ich Routenkonflikte mit anderen Plugins festgestellt, die dieselben Endpunkte nutzen. Außerdem gab es ein Problem mit dem Rate-Limiting: Einreichungen konnten das Limit erreichen, nach einigen Minuten erneut versuchen und es dann wieder ausschöpfen. Zudem wurde das Stylesheet des Admin-Bereichs in öffentliche Bereiche injiziert, und die CSS-Klassen waren nicht korrekt mit dem Plugin-Präfix versehen.

Außerdem habe ich eine Funktion hinzugefügt, die ich mir sehr gewünscht hatte: die Möglichkeit, eine Einreichung vorzunehmen, wenn auf ein Thema geantwortet wurde. Diese Einreichung ist auf eine bestimmte Seitennummer bezogen, damit nicht das gesamte Thema verarbeitet werden muss. Bei Themen mit hunderten von Antworten wird nur die letzte Seite eingereicht, was dem Crawler hilft, die Antwort schneller zu finden und das Thema entsprechend zu aktualisieren.

2 „Gefällt mir“

Merged.

Danke, dass du dir die Zeit genommen hast, dich so tief in den Code einzuarbeiten. Die Bucketing-Logik für das Sliding Window und das Batching der Hintergrundjobs sind solide Verbesserungen. Auch der Reply-Trigger ist ein nettes Detail.

Ich habe die Doku des Hauptposts aktualisiert, um die neuen Quota-Balken und Cooldown-Einstellungen abzudecken, die du hinzugefügt hast.

Ich schätze die hochwertige PR und die detaillierte Beschreibung sehr. :content:

1 „Gefällt mir“