discourse-indexnow — notificación automática a Bing y Yandex tras crear o editar un tema

:information_source: Descripción general Envía automáticamente las URL de los temas públicos después de crearlos, editarlos o eliminarlos al protocolo IndexNow, permitiendo que motores de búsqueda compatibles como Bing y Yandex detecten o retiren tu contenido en minutos, en lugar de esperar a que los rastreadores lo encuentren gradualmente.
:hammer_and_wrench: Repositorio github.com/imlotso/discourse-indexnow
:open_book: Guía de instalación Cómo instalar plugins en Discourse

Características

  • Envío automático cuando se publica un tema nuevo; reenvío automático cuando se edita el primer mensaje o cambian las propiedades principales del tema.
  • Envío al responder: Se envía automáticamente la URL de la página correspondiente al generar una nueva respuesta (por ejemplo, ?page=3), con un tiempo de enfriamiento por URL para evitar envíos frecuentes.
  • Cuando se elimina un tema, se envía su URL automáticamente, ayudando a los motores de búsqueda a detectar más rápido el 404/410 y acelerando la retirada del contenido.
  • Al habilitar Content Localization y el parámetro locale para rastreadores, se envían también las URLs localizadas de los temas, utilizando el parámetro locale configurado en Discourse, sin valores fijos.
  • Combina la URL principal y las URLs localizadas existentes en una sola solicitud por lotes de IndexNow urlList, en lugar de enviarlas individualmente.
  • Completar publicaciones antiguas: Filtra temas por categoría y rango de fechas, muestra una vista previa de los resultados y luego envía todos los lotes de una vez; reutiliza el mismo motor de envío por lotes, dividiendo automáticamente si se supera el límite de 10 000 URL por solicitud del protocolo. Los lotes aún en proceso (por ejemplo, si se seleccionó un rango demasiado amplio) pueden cancelarse directamente desde la pestaña Registros.
  • Envío manual: Pega una URL por línea para enviar enlaces específicos bajo demanda; los enlaces externos y los temas que no cumplan los criterios se filtran automáticamente.
  • Limitación inteligente y gestión de cuota: Límites horarios/diarios basados en una ventana deslizante (Sliding window). Ante respuestas 429 de IndexNow, se aplica retroceso automático (priorizando el encabezado Retry-After). El panel de administración muestra una barra de progreso de cuota y un contador regresivo para la recuperación de la cuota.
  • Permite excluir categorías y etiquetas específicas, añadiendo una capa adicional de reglas de exclusión más allá del filtrado automático de privacidad.
  • Soporta el rotado de claves (con confirmación secundaria para evitar errores); al generar una nueva clave, la anterior queda invalidada inmediatamente.
  • Verificación integrada en el panel de administración de la accesibilidad pública de /<key>.txt.
  • Cuando un tema se mueve de categoría, cambia su visibilidad o se actualizan sus etiquetas, se reenvía o se excluye de forma asíncrona; las operaciones masivas no bloquean la página.
  • Los registros incluyen ID del lote, locale, motivo del envío (creación/edición/eliminación/cambio de categoría/completado manual), tendencia de éxitos/fallos de los últimos 7 días y clasificación de motivos de fallo (limitación / clave errónea / dominio no coincidente / otros).
  • Todos los envíos son asíncronos y comparten la misma lógica de filtrado de privacidad que los envíos automáticos: mensajes privados, categorías restringidas, temas no listados o eliminados, y sitios que requieren inicio de sesión nunca se enviarán.
  • La interfaz de administración está disponible en inglés y chino simplificado.

Pasos de configuración

  1. Instala el plugin según la guía anterior y reconstruye el contenedor.
  2. Abre Admin > Plugins > discourse-indexnow.
  3. En la pestaña Settings, haz clic en Generate key (también puedes ingresar una clave hexadecimal de 32 caracteres ya registrada en otro lugar).
  4. Marca Enable IndexNow submissions.
  5. Confirma que la clave es accesible públicamente:
https://dominio-de-tu-foro/<key>.txt

Debe retornar HTTP 200 con el contenido de la clave misma. El panel de administración realizará automáticamente esta verificación y mostrará un indicador verde/rojo con caché junto a “key.txt accesible”.
6. (Opcional) En la pestaña Logs, usa el panel “Envío de completado”: selecciona categoría y rango de fechas, haz clic en Preview para ver la cantidad de coincidencias y luego en Submit. Si el lote aún está en proceso, puedes cancelarlo en la misma página.
7. (Opcional) Usa el campo de envío manual pegando una URL por línea para enviar enlaces específicos de inmediato, además del flujo automático habitual.

La página de Registros también muestra la barra de progreso de uso de cuota, la gráfica de tendencias de éxitos/fallos de los últimos 7 días y estadísticas de clasificación de motivos de fallo, facilitando identificar rápidamente si los fallos se deben a limitación, clave incorrecta u otras causas.

Configuraciones

Nombre Descripción
indexnow_enabled Interruptor general del plugin. No puede activarse cuando el sitio tiene login_required habilitado; si se activa posteriormente, el plugin se deshabilitará automáticamente.
indexnow_api_key Clave hexadecimal de 32 caracteres utilizada actualmente para la validación de envíos.
indexnow_submit_on_create Envío automático al publicar un tema público nuevo.
indexnow_submit_on_edit Reenvío automático tras editar el primer mensaje o cambiar propiedades del tema.
indexnow_submit_on_reply Envío automático de la URL de la página donde se genera una nueva respuesta.
indexnow_url_cooldown_minutes Tiempo de enfriamiento (minutos) para evitar reenvíos frecuentes de una misma URL.
indexnow_excluded_category_ids Categorías adicionales a excluir; aunque sean públicas, no se enviarán.
indexnow_excluded_tag_names Etiquetas adicionales a excluir; aunque el tema cumpla los criterios de envío, no se enviará.
indexnow_hourly_limit Máximo de URLs a enviar por hora (basado en ventana deslizante).
indexnow_daily_limit Máximo de URLs a enviar por día (basado en ventana deslizante).

Limitaciones conocidas

  • Google actualmente no participa en el protocolo IndexNow.
  • Solo se enviarán URLs localizadas cuando el parámetro locale para rastreadores esté habilitado y el tema cuente efectivamente con contenido localizado correspondiente.
  • Actualmente se soportan ediciones del primer mensaje y cambios en paginación de respuestas, pero la edición individual de mensajes intermedios no desencadena un envío por sí sola.

Este es un plugin desarrollado de forma independiente y no mantenido oficialmente por Discourse. Actualmente funciona en producción en mi propio foro, cuenta con pruebas RSpec y ejecuta CI en cada push/PR. Bienvenidos a reportar problemas y sugerir funcionalidades mediante issues de GitHub o respuestas en este hilo.