Discourse-indexnow: notifica istantaneamente Bing e Yandex alla creazione o modifica dei topic

:information_source: Riepilogo Invia automaticamente gli URL dei topic pubblici alla creazione, modifica, eliminazione e in risposta alle risposte al protocollo IndexNow, consentendo a Bing, Yandex e altri motori di ricerca compatibili di scoprire o rimuovere il tuo contenuto in pochi minuti senza attendere i crawler.
:hammer_and_wrench: Repository github.com/imlotso/discourse-indexnow
:open_book: Guida all’installazione Come installare i plugin in Discourse

È disponibile anche un articolo in lingua cinese con ulteriori informazioni sul mio forum: sitetalk.net/t/topic/642

Funzionalità

  • Invio automatico dei nuovi topic pubblici; riesecuzione dell’invio quando cambia il primo post o gli attributi critici del topic.
  • Invio in risposta: invia automaticamente l’URL paginato (es. ?page=3) quando vengono pubblicate nuove risposte, con un tempo di raffreddamento configurabile per URL per prevenire lo spam.
  • Invio automatico degli URL dei topic all’eliminazione per aiutare i motori di ricerca a rilevare i codici 404/410 e rimuovere rapidamente l’indicizzazione.
  • Raggruppamento automatico degli URL dei topic localizzati quando Content Localization e i parametri di query della locale del crawler sono attivi. Utilizza il parametro di locale effettivamente configurato, non valori hardcoded.
  • Raggruppa gli URL canonici e localizzati in singole richieste batch urlList di IndexNow invece di inviarli uno per uno.
  • Riempimento storico: filtro per categoria e intervallo di date, anteprima del numero di corrispondenze e invio in blocco. Spezzettamento automatico per i batch che superano il limite di protocollo di 10.000. I job attivi possono essere annullati dalla scheda Log.
  • Invio manuale: invia URL personalizzati su richiesta, riga per riga; i link esterni o non idonei vengono filtrati automaticamente.
  • Limitazione intelligente della frequenza: applica limiti orari e giornalieri utilizzando un algoritmo a finestra scorrevole di fine grana. Si disattiva automaticamente in caso di 429 (rispettando Retry-After). L’interfaccia di amministrazione presenta Barre di Quota visive che mostrano l’utilizzo attuale e l’ora esatta in cui la capacità verrà liberata.
  • Esclude categorie specifiche e tag come regole a livello di business oltre ai filtri di privacy automatizzati.
  • Rotazione delle chiavi con una finestra di dialogo di conferma per sovrascrittura accidentale; le chiavi precedenti vengono invalidate immediatamente.
  • Verifica da parte dell’amministratore dell’accessibilità pubblica di /<key>.txt.
  • Spostamenti di topic, modifiche alla visibilità delle categorie e aggiornamenti dei tag attivano la riesecuzione asincrona o l’esclusione tramite fan-out in job di background per evitare il blocco dell’interfaccia utente.
  • Voci di log dettagliate con ID batch, locale, motivi dell’attivazione, grafici di tendenza di successo/fallimento a 7 giorni e motivi di fallimento categorizzati (Limitato dalla frequenza, Errore chiave, Disallineamento dominio).
  • Invii completamente asincroni che rispettano i confini della privacy: messaggi privati, categorie ristrette, topic non elencati/eliminati e siti che richiedono l’accesso non vengono mai inviati.
  • Disponibile in inglese e cinese semplificato.

Passaggi di configurazione

  1. Installa il plugin seguendo la guida sopra e ricostruisci il tuo contenitore.
  2. Vai su Amministrazione > Plugin > discourse-indexnow.
  3. Sotto Impostazioni, fai clic su Genera chiave (oppure incolla una chiave esadecimale esistente da 32 caratteri).
  4. Spunta Abilita invii IndexNow.
  5. Verifica l’accessibilità pubblica della chiave:
https://your-forum-domain.com/<key>.txt

Dovrebbe restituire HTTP 200 con la stringa della chiave. Il pannello di amministrazione mostra anche un indicatore verde/rosso in cache.
6. (Facoltativo) Nella scheda Log, usa il pannello “Backfill”: seleziona i criteri, fai clic su Anteprima, quindi su Invia.
7. (Facoltativo) Usa la casella di invio manuale per inviare singoli URL al di fuori del flusso automatizzato.

La pagina Log presenta anche barre di utilizzo della quota, un grafico di tendenza a 7 giorni e metriche di suddivisione dei fallimenti per diagnosticare facilmente i problemi di invio.

Impostazioni di configurazione

Impostazione Descrizione
indexnow_enabled Interruttore principale. Disattivato automaticamente se login_required è abilitato.
indexnow_api_key La chiave esadecimale da 32 caratteri per la verifica dell’invio.
indexnow_submit_on_create Invio automatico quando viene creato un nuovo topic pubblico.
indexnow_submit_on_edit Reinvio automatico quando cambia il primo post o gli attributi del topic.
indexnow_submit_on_reply Invio automatico dell’URL paginato specifico quando vengono pubblicate nuove risposte.
indexnow_url_cooldown_minutes Periodo di raffreddamento per URL (in minuti) per prevenire invii duplicati.
indexnow_excluded_category_ids Categorie da escludere anche se pubbliche.
indexnow_excluded_tag_names Tag da escludere anche se la categoria del topic è idonea.
indexnow_hourly_limit Numero massimo di URL da inviare per ora (finestra scorrevole).
indexnow_daily_limit Numero massimo di URL da inviare al giorno (finestra scorrevole).

Limitazioni note

  • Google non partecipa attualmente al protocollo IndexNow.
  • Gli URL localizzati vengono inviati solo quando i parametri di locale del crawler sono attivi e esiste contenuto localizzato.
  • Attualmente, le modifiche al primo post e la paginazione delle nuove risposte sono supportate, ma le modifiche alle risposte intermedie non attivano invii indipendenti.

Questo è un plugin indipendente e non ufficiale — non mantenuto dal team Discourse. È in produzione sul mio forum, ha una copertura di test RSpec con CI su ogni push/PR, e apprezzerei qualsiasi segnalazione di bug o richiesta di funzionalità tramite le issue GitHub o le risposte qui.

7 Mi Piace

Grazie per questo! Stavo letteralmente dicendo: devo creare il mio plugin per Indexnow? E boom! L’ho trovato!

Puoi dirmi se indexnow_submit_on_edit invia una richiesta di indicizzazione Indexnow per tutte le re-renderizzazioni che modificano il contenuto?

No — viene attivato solo per modifiche effettive tramite il normale flusso di PostRevisor e solo per il primo post (OP) dell’argomento. Le risposte non-OP e i rebake avviati dal sistema (cron per la correzione delle immagini, rebake in blocco da parte degli amministratori, ecc.) non innescano un nuovo invio, poiché non passano dall’evento a cui questo plugin si aggancia.

Uso il plugin da una settimana e si è rivelato ottimo. Funziona esattamente come mi serve, anche se ho riscontrato alcuni bug che causavano il fallimento immediato del plugin subito dopo l’installazione.

In particolare, ho trovato collisioni di rotte con altri plugin che utilizzano gli stessi endpoint. C’era anche un problema con il rate limiting: le sottoposizioni potevano raggiungere il limite, attendere alcuni minuti e poi raggiungerlo di nuovo. Inoltre, il foglio di stile del pannello di amministrazione veniva iniettato nelle aree pubbliche e le classi CSS non erano prefissate correttamente per il plugin.

Ho anche aggiunto una funzionalità che desideravo molto: la possibilità di inviare una notifica quando c’è una risposta a un argomento. Questa notificazione è associata a un numero di pagina specifico in modo da non elaborare l’intero argomento. Per gli argomenti con centinaia di risposte, viene inviata solo l’ultima pagina, il che aiuta il crawler a trovare la risposta e aggiornare l’argomento molto più rapidamente.

2 Mi Piace

Fuso.

Grazie per aver dedicato del tempo a un’analisi così approfondita della codebase. La logica di bucketing per la finestra scorrevole e il batching dei job in background sono miglioramenti solidi. Anche il trigger di risposta è un ottimo tocco.

Ho aggiornato la documentazione del post principale per coprire le nuove barre di quota e le impostazioni di cooldown che hai aggiunto.

Apprezzo davvero la PR di alta qualità e la descrizione dettagliata. :content:

1 Mi Piace