🏆 Plugin de Microdatos JSON-LD enriquecido para Discourse

Discourse Rich JSON-LD Microdata

:sparkles: Resumen Mejora las etiquetas meta estándar de Discourse con un conjunto completo y coordinado de marcado Open Graph, Twitter Cards y JSON-LD de Schema.org, lo que resulta en un mejor rendimiento SEO, experiencias de compartir en redes sociales más ricas y una mejor discoverabilidad para IA/LLM
:hammer_and_wrench: Enlace al repositorio GitHub - kaktaknet/discourse-rich-json-ld-microdata: 🏆 Discourse Rich JSON-LD Microdata Plugin. Comprehensive, coordinated Open Graph and Schema.org JSON-LD microdata for 200% SEO and LLM coverage · GitHub
:open_book: Guía de instalación Cómo instalar plugins en Discourse

Qué obtienes

Transforma cómo aparece tu foro en los resultados de búsqueda, redes sociales y asistentes impulsados por IA. Este plugin genera datos estructurados de nivel profesional que Google, Yandex, las plataformas sociales y los Modelos de Lenguaje Grandes (LLM) entienden perfectamente.

Para documentación detallada, consulta README.md

Para detalles técnicos y desarrollo, consulta CONTRIBUTING.md

Para ejemplos de uso y solución de problemas, consulta USAGE.md

Ejemplos de resultados de búsqueda enriquecidos

Antes: Fragmento de texto plano en Google
Después: Fragmento enriquecido con calificaciones, número de respuestas, autor y fecha de publicación

Antes: Vista previa de enlace genérica en redes sociales
Después: Tarjeta llamativa con imagen, descripción y marca

Más información sobre Resultados enriquecidos de Google Search Central

Características clave

1. Cobertura completa de Schema.org

  • Esquema QAPage para temas con jerarquía completa de preguntas y respuestas
  • Soporte para calificaciones de respuestas y estado de resuelto
  • CollectionPage para categorías con subcategorías
  • ProfilePage para perfiles de usuario con indicadores de experiencia
  • BreadcrumbList para rutas de navegación
  • Esquema global WebSite con acción de búsqueda

2. Etiquetas de redes sociales coordinadas

  • Open Graph (Facebook, LinkedIn, Discord)
  • Twitter Cards (summary_large_image)
  • Todo generado desde una única fuente de verdad: sin conflictos
  • Limpieza automática de las etiquetas predeterminadas de Discourse

3. Optimizado para IA y LLM

  • Relaciones completas de entidades usando referencias @id de Schema.org
  • Comprensión completa del contexto (temas → categorías → respuestas → comentarios)
  • Metadatos de experiencia del autor
  • ChatGPT, Claude y otros asistentes de IA obtienen el contexto perfecto

4. Internacionalización completa :globe_showing_europe_africa:

  • Traducciones al 100% en inglés y ruso incluidas
  • Detección automática de idioma (usuario → sitio → navegador → reserva)
  • Todas las descripciones de Schema.org localizadas
  • Fácil agregar más idiomas

5. Rendimiento inteligente

  • Caché Redis con TTL de 1 hora (configurable)
  • Invalidación automática de la caché al cambiar contenido
  • < 5 ms para páginas en caché
  • ~50 ms para generación fresca

6. Cero mantenimiento

  • Inyección automática tanto para vistas de navegador como de rastreador
  • Funciona para temas, categorías y perfiles de usuario
  • Manejo de errores elegante: nunca rompe tu sitio
  • Registro exhaustivo para depuración

Beneficios para tu foro

:bullseye: Mejores posiciones en búsquedas

  • Los fragmentos enriquecidos en Google aumentan la tasa de clics entre un 30-50%
  • Paneles del Grafo de Conocimiento para usuarios expertos
  • Destacados en secciones de “La gente también pregunta”
  • Las migas de pan en los resultados de búsqueda mejoran la navegación

:mobile_phone: Compartir profesional en redes sociales

  • Tarjetas llamativas al compartir en Facebook, Twitter, LinkedIn
  • Marca adecuada con logotipos y descripciones
  • Mayor participación y tasa de clics
  • Funciona en más de 40 plataformas sociales

:robot: Listo para asistentes de IA

  • Tu contenido aparece con precisión en las respuestas de ChatGPT y Claude
  • Atribución correcta con enlaces de vuelta a tu foro
  • El contexto completo evita alucinaciones de la IA
  • Preparado para el futuro con la Optimización para Motores Generativos (GEO)

:globe_showing_europe_africa: Audiencia internacional

  • Detección automática de idioma
  • Descripciones localizadas para mayor relevancia
  • La codificación de URL maneja caracteres cirílicos y especiales
  • Fácil expansión a más idiomas

Instalación

Paso 1: Instalar

Sigue Install plugins on a self-hosted site usando el enlace del repositorio anterior

Paso 2: Habilitar en Administración

Navega a Admin → Configuración → Plugins → Rich Microdata

Establece rich_microdata_enabled en true (habilitado por defecto)

Paso 3: Configurar (Opcional)

Todos los ajustes funcionan perfectamente sin configuración adicional, pero puedes personalizar:

  • Duración de la caché (predeterminado: 1 hora)
  • Máximo de respuestas a incluir (predeterminado: 10)
  • @usuario de Twitter para tu sitio
  • URL de imagen predeterminada de Open Graph
  • Habilitar/deshabilitar esquemas específicos

Paso 4: Verificar

Prueba tu marcado:

Configuración

Ajuste Predeterminado Descripción
rich_microdata_enabled true Interruptor principal del plugin
rich_microdata_cache_ttl 3600 Duración de la caché en segundos
rich_microdata_max_answers 10 Máximo de respuestas en el esquema QAPage
rich_microdata_include_user_stats true Incluir estadísticas de usuario
rich_microdata_enable_breadcrumbs true Agregar esquema BreadcrumbList
rich_microdata_enable_website_schema true Incluir esquema WebSite
rich_microdata_twitter_site "" Tu @usuario de Twitter
rich_microdata_og_image_default "" URL de imagen OG de respaldo
rich_microdata_debug_mode false Habilitar registro de depuración

Detalles técnicos

Arquitectura:

  • Patrón de tres capas: DataExtractor → Builders → Coordinator
  • Una única fuente de verdad evita conflictos de datos
  • Renderizado separado para etiquetas <head> y contenido <body>
  • Funciona con los diseños application.html.erb y crawler.html.erb

Cumplimiento de estándares:

  • Especificación JSON-LD de Schema.org
  • Protocolo Open Graph
  • Marcado de Twitter Cards
  • RFC 3986 (codificación de URL para caracteres internacionales)

Seguridad:

  • Verificaciones de permisos de Guardian
  • Contenido privado excluido automáticamente
  • Filtrado de seguridad a nivel de SQL
  • Respuestas seguras para datos faltantes

Compatibilidad:

  • Discourse 2.7.0+
  • Ruby 2.7+
  • Probado en Discourse 3.6.0.beta3

Ejemplos del mundo real

Marcado de página de tema:

{
  "@context": "https://schema.org",
  "@type": "QAPage",
  "name": "¿Cómo optimizar las consultas de base de datos?",
  "mainEntity": {
    "@type": "Question",
    "name": "¿Cómo optimizar las consultas de base de datos?",
    "text": "Estoy experimentando consultas lentas...",
    "answerCount": 5,
    "upvoteCount": 12,
    "acceptedAnswer": {
      "@type": "Answer",
      "text": "Deberías agregar índices en...",
      "upvoteCount": 8,
      "author": {
        "@type": "Person",
        "name": "Juan Pérez",
        "url": "https://foro.ejemplo.com/u/juan"
      }
    }
  }
}

Marcado de página de categoría:

{
  "@context": "https://schema.org",
  "@type": "CollectionPage",
  "name": "Optimización de bases de datos",
  "description": "Consejos y trucos para consultas más rápidas",
  "numberOfItems": 245,
  "hasPart": [...]
}

Consulta USAGE.md para ejemplos completos.

Casos de uso

Foros técnicos:
Los desarrolladores encuentran tus soluciones a través de los fragmentos destacados de Google y asistentes de codificación con IA, con el contexto de código preservado adecuadamente.

Comunidades de soporte:
Los motores de búsqueda muestran tus respuestas con calificaciones y estado de resuelto, dirigiendo tráfico cualificado a tu mejor contenido.

Foros de discusión:
El compartir en redes sociales se ve profesional con tarjetas personalizadas, aumentando la participación y reduciendo las tasas de rebote.

Comunidades internacionales:
La detección automática de idioma asegura que los usuarios vean el contenido en su idioma preferido, mejorando la accesibilidad.

Mantenimiento

Operación sin mantenimiento:

  • Actualización automática de la caché al actualizar contenido
  • Auto-reparación ante errores (nunca rompe tu sitio)
  • Registro exhaustivo para monitoreo
  • Modo de depuración opcional para solución de problemas

Gestión de caché (opcional):

# Consola de Rails
MetaGeneratorService.clear_all_cache
MetaGeneratorService.cache_stats

Solución de problemas

Las etiquetas meta no aparecen:

  1. Verifica que el plugin esté habilitado en Admin → Plugins
  2. Revisa los registros: ./launcher logs app | grep RichMicrodata
  3. Limpia la caché: MetaGeneratorService.clear_all_cache

Los fragmentos enriquecidos no aparecen en Google:

Consulta USAGE.md para solución de problemas detallada.

Métricas de rendimiento

  • Tasa de aciertos en caché: 95%+ para foros típicos
  • Tiempo de respuesta: < 5 ms en caché, ~50 ms fresco
  • Sobrecarga de memoria: Mínima (usa Redis)
  • Carga de base de datos: Despreciable (caché de 1 hora)

Hoja de ruta

Versión actual: 2.0.0

:white_check_mark: Open Graph y Twitter Cards completos
:white_check_mark: Soporte completo de JSON-LD de Schema.org
:white_check_mark: Localización EN/RU
:white_check_mark: Codificación de URL para caracteres internacionales

Planificado:

  • Paquetes de idiomas adicionales (ES, DE, FR)
  • Soporte de esquema de video
  • Esquema de eventos para anuncios
  • Esquema de producto para categorías de mercado

Soporte

Licencia

Licencia MIT - Software libre y de código abierto

Créditos


Opcional: Vista Instantánea de Telegram

El repositorio incluye reglas de plantilla de ejemplo en TELEGRAM_IV_RULES.txt para crear plantillas hermosas de Vista Instantánea de Telegram. Usa estas reglas en instantview.telegram.org para proporcionar una experiencia de lectura rápida y sin distracciones para los usuarios que comparten el contenido de tu foro en Telegram.


Transforma la visibilidad de tu foro hoy. Instala en menos de 5 minutos, ve resultados en Google en 2-4 semanas. :rocket:

12 Me gusta

Hola, aunque el paquete de idioma francés no esté listo, ¿me aconsejas usar este plugin en un sitio de Discourse en francés? Gracias.

1 me gusta

Hola. Este plugin no afectará la experiencia del usuario de ninguna manera. La configuración del idioma principal se toma de los ajustes de Discourse. También puedes especificar idiomas alternativos en la sección de administración si el foro es multilingüe. Sí, siéntete libre de usarlo, no causará ningún problema. La traducción solo se utiliza para gestionar el plugin en la sección de administración. Si entiendes inglés o ruso, podrás administrarlo.

2 Me gusta

Hola a todos, instalé este plugin sin ninguna dificultad. La configuración es muy sencilla, funcionó de inmediato. Hice una prueba para ver qué salía de los microdatos, y todo me parece bien.

1 me gusta

¡Guau, muy interesante!

El autor proporciona las mejores prácticas en discourse-rich-json-ld-microdata/USAGE.md at main · kaktaknet/discourse-rich-json-ld-microdata · GitHub

Mejores Prácticas

  1. Utiliza siempre imágenes de alta calidad (1200x630px) para los temas
  2. Escribe títulos de temas detallados (ayuda con el campo name de Schema.org)
  3. Habilita el plugin Solved para una mejor detección de acceptedAnswer
  4. Usa descripciones de categorías descriptivas
  5. Anima a los usuarios a completar sus biografías (mejora el esquema Person)
  6. Monitoriza la tasa de aciertos de caché (apunta a >95%)
  7. Calienta la caché después de las implementaciones
  8. Prueba el marcado con validadores antes de lanzamientos importantes

Readme

Hecho con :heart: para la Comunidad Discourse

Es verdad. La documentación Markdown más bonita que he visto jamás :trophy: !

2 Me gusta

Gracias. Aunque este plugin no tiene ningún efecto visible en el foro para los usuarios habituales y solo sirve para atraer más visitantes de los motores de búsqueda y ayudar a los asistentes de voz, implementarlo no fue una tarea fácil. Pero logré hacerlo.

2 Me gusta

¡Buen plugin! Gracias por su trabajo. Estoy intentando instalarlo, pero no consigo el “data-rich-microdata”

Ya he probado un “MetaGeneratorService.clear_all_cache”:
discourse(prod)⟩ MetaGeneratorService.clear_all_cache => []
y “tail -f log/production.log | grep RichMicrodata” me da:

⟩ [RichMicrodata] Generated for topic 14092, crawler: true, head size: 5855
⟩ [RichMicrodata] Returning HTML (5855 chars), crawler: true
⟩ [RichMicrodata] HTML builder (server:before-head-close-crawler) started for TopicsController
⟩ [RichMicrodata] Generating for topic 22861
⟩ [RichMicrodata::Coordinator] ERROR in TwitterCardBuilder: undefined local variable or method `twitter_image’ for an instance of DiscourseRichMicrodata::Builders::TwitterCardBuilder
⟩ [RichMicrodata] Generated for topic 22861, crawler: true, head size: 6815
⟩ [RichMicrodata] Returning HTML (6815 chars), crawler: true
⟩ [RichMicrodata] HTML builder (server:before-head-close-crawler) started for TopicsController

1 me gusta

Por favor, intente proporcionar un enlace a la publicación del foro https://search.google.com/test/rich-results

1 me gusta

Genial. Pero ¿hay alguna forma de solucionar todos estos errores relacionados con la imagen de Twitter?

Screenshot_20251122_124238_Brave

Lo revisaré. Aparentemente, se requiere el complemento de imagen. Me salté ese punto. Lo arreglaré.

1 me gusta

Actualizado, échale un vistazo

1 me gusta

¡Hola! Solo quería compartir un caso extraño: en nuestro foro realmente no imponemos la configuración de un “nombre” para el usuario, por lo que cuando Google intenta indexar, se queja con:

Falta el campo “nombre” (en “autor”)

Los elementos con este problema no son válidos. Los elementos no válidos no son aptos para los resultados enriquecidos de la Búsqueda de Google

No estoy seguro de si hay alguna manera de indicar que el nombre de usuario es el nombre.

No existe tal problema en la configuración estándar del foro y del tema. Si tiene configuraciones personalizadas del foro o del tema, por favor revíselas de su lado.

1 me gusta

Si no le importa que pregunte, ¿qué es el “foro estándar”? La configuración del tema no debería ser un problema, también probé en Horizon y el problema es que el “nombre” generado no se rellena (porque no requerimos que se rellene)

Sin embargo, esto está configurado en modo “discusión”, probaré otros modos para ver

Edición:

Algunos temas tienen el “nombre” rellenado, mientras que otros no. Incluso para el mismo usuario que no estableció un “nombre” específico


Además, probablemente no esté relacionado, pero veo algunos errores sobre microdatos y la configuración regional ZN

Hola, he instalado este complemento. Quiero desactivar el resaltado rojo en la imagen adjunta ( Screenshot by Lightshot ). ¿Cómo configuro el complemento para hacer eso? ¡Muchas gracias!