Discourse-indexnow: notifica de inmediato a Bing y Yandex cuando se crean o editan temas

:information_source: Resumen Envía automáticamente las URLs de temas públicos al protocolo IndexNow al crear, editar, eliminar o responder temas, para que Bing, Yandex y otros motores de búsqueda compatibles puedan descubrir o desindexar tu contenido en minutos, sin esperar a los rastreadores.
:hammer_and_wrench: Repositorio github.com/imlotso/discourse-indexnow
:open_book: Guía de instalación Cómo instalar plugins en Discourse

También está disponible una descripción en chino con más antecedentes en mi foro: sitetalk.net/t/topic/642

Funciones

  • Envía automáticamente nuevos temas públicos; vuelve a enviarlos cuando cambia la primera publicación o atributos críticos del tema.
  • Enviar en respuesta: Envía automáticamente la URL paginada (p. ej., ?page=3) cuando se publican nuevas respuestas, con un tiempo de espera configurable por URL para evitar el envío excesivo.
  • Envía automáticamente las URLs de los temas al eliminarlos para ayudar a los motores a detectar 404/410 y desindexarlos rápidamente.
  • Agrupa automáticamente las URLs de temas localizados cuando Content Localization y los parámetros de consulta de idioma del rastreador están activos. Utiliza el parámetro de idioma configurado realmente, no uno codificado.
  • Agrupa las URLs canónicas y localizadas en solicitudes por lotes de urlList de IndexNow en lugar de enviarlas una por una.
  • Relleno histórico: Filtra por categoría y rango de fechas, previsualiza el número de coincidencias y envía en lote. División automática para lotes que excedan el límite de 10.000 del protocolo. Los trabajos activos pueden cancelarse desde la pestaña Registros.
  • Envío manual: Envía URLs personalizadas bajo demanda línea por línea; los enlaces externos o no elegibles se filtran automáticamente.
  • Limitación de tasa inteligente: Aplica límites horarios y diarios utilizando un algoritmo de ventana deslizante de grano fino. Se retrasa automáticamente ante un 429 (respetando Retry-After). La interfaz de administración presenta Barras de Cuota visuales que muestran el uso actual y la hora exacta hasta que se libere capacidad.
  • Excluye categorías específicas y etiquetas como reglas de la capa de negocio además de los filtros de privacidad automatizados.
  • Rotación de claves con un cuadro de diálogo de confirmación de sobrescritura accidental; las claves anteriores se invalidan inmediatamente.
  • Verificación de administrador para la accesibilidad pública de /<key>.txt.
  • Los movimientos de temas, los cambios de visibilidad de categorías y las actualizaciones de etiquetas desencadenan un reenvío o exclusión asíncrona en trabajos de fondo para evitar bloqueos de la interfaz.
  • Entradas de registro detalladas con IDs de lote, idioma, razones de activación, gráficos de tendencia de éxito/fallo de 7 días y razones de fallo categorizadas (Límite de tasa, Error de clave, Desajuste de dominio).
  • Envíos totalmente asíncronos que respetan los límites de privacidad: los mensajes privados, las categorías restringidas, los temas no listados/eliminados y los sitios que requieren inicio de sesión nunca se envían.
  • Disponible en inglés y chino simplificado.

Pasos de configuración

  1. Instala el plugin siguiendo la guía anterior y reconstruye tu contenedor.
  2. Ve a Administración > Plugins > discourse-indexnow.
  3. En Configuración, haz clic en Generar clave (o pega una clave hexadecimal de 32 caracteres existente).
  4. Marca Habilitar envíos de IndexNow.
  5. Verifica la accesibilidad pública de la clave:
https://tu-dominio-foro.com/<key>.txt

Debe devolver HTTP 200 con la cadena de la clave. El panel de administración también muestra un indicador verde/rojo en caché.
6. (Opcional) En la pestaña Registros, usa el panel “Relleno”: selecciona los criterios, haz clic en Previsualizar y luego en Enviar.
7. (Opcional) Usa el cuadro de envío manual para enviar URLs individuales fuera del flujo automatizado.

La página de Registros también presenta barras de uso de cuota, un gráfico de tendencia de 7 días y métricas de desglose de fallos para diagnosticar fácilmente los problemas de envío.

Configuración de ajustes

Ajuste Descripción
indexnow_enabled Interruptor principal. Se deshabilita automáticamente si login_required está habilitado.
indexnow_api_key La clave hexadecimal de 32 caracteres para la verificación del envío.
indexnow_submit_on_create Envío automático cuando se crea un nuevo tema público.
indexnow_submit_on_edit Reenvío automático cuando cambia la primera publicación o los atributos del tema.
indexnow_submit_on_reply Envío automático de la URL paginada específica cuando se publican nuevas respuestas.
indexnow_url_cooldown_minutes Período de espera por URL (en minutos) para evitar envíos duplicados.
indexnow_excluded_category_ids Categorías a excluir aunque sean públicas.
indexnow_excluded_tag_names Etiquetas a excluir aunque la categoría del tema sea elegible.
indexnow_hourly_limit Número máximo de URLs a enviar por hora (ventana deslizante).
indexnow_daily_limit Número máximo de URLs a enviar por día (ventana deslizante).

Limitaciones conocidas

  • Google no participa actualmente en el protocolo IndexNow.
  • Las URLs localizadas solo se envían cuando los parámetros de idioma del rastreador están activos y existe contenido localizado.
  • Actualmente, se admiten las ediciones de la primera publicación y la paginación de nuevas respuestas, pero las ediciones de respuestas intermedias no desencadenan envíos de forma independiente.

Este es un plugin independiente y no oficial; no es mantenido por el equipo de Discourse. Está funcionando en producción en mi propio foro, tiene cobertura de pruebas RSpec con CI en cada empuje/PR, y agradecería cualquier informe de errores o solicitud de función a través de issues de GitHub o respuestas aquí.

7 Me gusta

¡Gracias por esto! Acababa de decir literalmente, ¿necesito crear mi propio plugin de Indexnow? ¡Y boom! ¡Lo encontré!

¿Puedes decirme si indexnow_submit_on_edit emite un envío de Indexnow en TODAS las re-creaciones que cambian el contenido?

No — solo se dispara en ediciones genuinas a través del flujo normal de PostRevisor, y únicamente
para la primera publicación del tema (OP). Las respuestas que no son OP y los rebakes desencadenados por el sistema
(crons de corrección de imágenes, rebake masivo de administradores, etc.) no disparan un nuevo envío, ya que
esos no pasan por el evento en el que este plugin se engancha.

Llevo una semana usando el plugin y ha sido excelente. Funciona exactamente como lo necesito, aunque me encontré con algunos errores que hacían que el plugin fallara inmediatamente tras la instalación.

Específicamente, detecté colisiones de rutas con otros plugins que utilizan los mismos puntos de acceso. También hubo un problema con la limitación de velocidad, donde los envíos podían alcanzar el límite, esperar unos minutos y volver a alcanzarlo. Además, la hoja de estilos del panel de administración se estaba inyectando en las áreas públicas, y las clases CSS no estaban prefijadas correctamente para el plugin.

También añadí una función que realmente quería: la capacidad de enviar cuando hay una respuesta a un tema. Este envío se asocia a un número de página específico para que no procese todo el tema. En temas con cientos de respuestas, solo envía la última página, lo que ayuda al rastreador a encontrar la respuesta y actualizar el tema mucho más rápido.

2 Me gusta

Fusionado.

Gracias por tomarte el tiempo para hacer un análisis tan profundo de la base de código. La lógica de agrupación para la ventana deslizante y el procesamiento por lotes de tareas en segundo plano son mejoras sólidas. El disparador de respuesta también es un gran detalle.

He actualizado la documentación de la publicación principal para cubrir las nuevas barras de cuota y las configuraciones de tiempo de espera que añadiste.

Aprecio mucho la alta calidad de la PR y la descripción detallada. :content:

1 me gusta