🏆 Plugin Discourse Rich JSON-LD Microdata

Discourse Rich JSON-LD Microdata

:sparkles: Resumo Amplia as meta tags padrão do Discourse com um conjunto abrangente e coordenado de marcação Open Graph, Twitter Cards e Schema.org JSON-LD, resultando em desempenho superior de SEO, experiências de compartilhamento em redes sociais mais ricas e melhor descoberta por IA/LLM
:hammer_and_wrench: Link do Repositório 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: Guia de Instalação Como instalar plugins no Discourse

O Que Você Ganha

Transforme a forma como seu fórum aparece nos resultados de pesquisa, redes sociais e assistentes inteligentes. Este plugin gera dados estruturados de nível profissional que o Google, Yandex, plataformas sociais e Grandes Modelos de Linguagem (LLMs) compreendem perfeitamente.

Para documentação detalhada, veja README.md

Para detalhes técnicos e desenvolvimento, veja CONTRIBUTING.md

Para exemplos de uso e solução de problemas, veja USAGE.md

Exemplos de Resultados de Pesquisa Ricos

Antes: Trecho de texto simples no Google
Depois: Trecho rico com classificações, contagem de respostas, autor e data de publicação

Antes: Pré-visualização de link genérica em redes sociais
Depois: Cartão chamativo com imagem, descrição e marca

Saiba mais sobre Resultados Ricos do Google Search Central

Principais Recursos

1. Cobertura Completa do Schema.org

  • Esquema QAPage para tópicos com hierarquia completa de Perguntas e Respostas
  • Suporte a classificações de respostas e status de resolvido
  • CollectionPage para categorias com subcategorias
  • ProfilePage para perfis de usuário com indicadores de especialização
  • BreadcrumbList para caminhos de navegação
  • Esquema global WebSite com ação de pesquisa

2. Tags de Redes Sociais Coordenadas

  • Open Graph (Facebook, LinkedIn, Discord)
  • Twitter Cards (summary_large_image)
  • Tudo gerado a partir de única fonte da verdade — sem conflitos
  • Limpeza automática das tags padrão do Discourse

3. Otimizado para IA e LLM

  • Relações completas de entidades usando referências @id do Schema.org
  • Compreensão total do contexto (tópicos → categorias → respostas → comentários)
  • Metadados de especialização do autor
  • ChatGPT, Claude e outros assistentes de IA recebem contexto perfeito

4. Internacionalização Completa :globe_showing_europe_africa:

  • Traduções em 100% inglês e russo incluídas
  • Detecção automática de idioma (usuário → site → navegador → fallback)
  • Todas as descrições do Schema.org localizadas
  • Fácil adicionar mais idiomas

5. Desempenho Inteligente

  • Cache Redis com TTL de 1 hora (configurável)
  • Invalidação automática do cache em alterações de conteúdo
  • < 5ms para páginas em cache
  • ~50ms para geração nova

6. Zero Manutenção

  • Injeção automática para visualizações de navegador e rastreador
  • Funciona para tópicos, categorias e perfis de usuário
  • Tratamento de erros elegante — nunca quebra seu site
  • Logs abrangentes para depuração

Benefícios para Seu Fórum

:bullseye: Melhores Classificações de Pesquisa

  • Trechos ricos no Google aumentam as taxas de cliques em 30-50%
  • Painéis do Knowledge Graph para usuários especialistas
  • Destaque nas seções “Pessoas também perguntam”
  • Breadcrumbs nos resultados de pesquisa melhoram a navegação

:mobile_phone: Compartilhamento Profissional em Redes Sociais

  • Cartões chamativos ao compartilhar no Facebook, Twitter, LinkedIn
  • Marca adequada com logotipos e descrições
  • Aumento no engajamento e taxas de cliques
  • Funciona em mais de 40 plataformas sociais

:robot: Pronto para Assistente de IA

  • Seu conteúdo aparece com precisão nas respostas do ChatGPT e Claude
  • Atribuição correta com links de volta ao seu fórum
  • Contexto completo previne alucinações da IA
  • Futuro-proof para Otimização de Motores Generativos (GEO)

:globe_showing_europe_africa: Público Internacional

  • Detecção automática de idioma
  • Descrições localizadas para maior relevância
  • Codificação de URL lida com caracteres cirílicos e especiais
  • Fácil expansão para mais idiomas

Instalação

Passo 1: Instalar

Siga Install plugins on a self-hosted site usando o link do repositório acima

Passo 2: Habilitar no Admin

Navegue até Admin → Configurações → Plugins → Rich Microdata

Defina rich_microdata_enabled como true (habilitado por padrão)

Passo 3: Configurar (Opcional)

Todas as configurações funcionam bem fora da caixa, mas você pode personalizar:

  • Duração do cache (padrão: 1 hora)
  • Máximo de respostas a incluir (padrão: 10)
  • @handle do Twitter para seu site
  • URL padrão da imagem Open Graph
  • Habilitar/desabilitar esquemas específicos

Passo 4: Verificar

Teste sua marcação:

Configuração

Configuração Padrão Descrição
rich_microdata_enabled true Interruptor mestre do plugin
rich_microdata_cache_ttl 3600 Duração do cache em segundos
rich_microdata_max_answers 10 Máximo de respostas no esquema QAPage
rich_microdata_include_user_stats true Incluir estatísticas do usuário
rich_microdata_enable_breadcrumbs true Adicionar esquema BreadcrumbList
rich_microdata_enable_website_schema true Incluir esquema WebSite
rich_microdata_twitter_site "" Seu @username do Twitter
rich_microdata_og_image_default "" URL de imagem OG de fallback
rich_microdata_debug_mode false Habilitar log de depuração

Detalhes Técnicos

Arquitetura:

  • Padrão de três camadas: DataExtractor → Builders → Coordinator
  • Única fonte da verdade previne conflitos de dados
  • Renderização separada para tags <head> e conteúdo <body>
  • Funciona com layouts application.html.erb e crawler.html.erb

Conformidade com Padrões:

  • Especificação Schema.org JSON-LD
  • Protocolo Open Graph
  • Marcações Twitter Cards
  • RFC 3986 (codificação de URL para caracteres internacionais)

Segurança:

  • Verificações de permissão do Guardian
  • Conteúdo privado automaticamente excluído
  • Filtragem de segurança no nível SQL
  • Fallbacks seguros para dados ausentes

Compatibilidade:

  • Discourse 2.7.0+
  • Ruby 2.7+
  • Testado no Discourse 3.6.0.beta3

Exemplos do Mundo Real

Marcação de Página de Tópico:

{
  "@context": "https://schema.org",
  "@type": "QAPage",
  "name": "Como otimizar consultas de banco de dados?",
  "mainEntity": {
    "@type": "Question",
    "name": "Como otimizar consultas de banco de dados?",
    "text": "Estou tendo consultas lentas...",
    "answerCount": 5,
    "upvoteCount": 12,
    "acceptedAnswer": {
      "@type": "Answer",
      "text": "Você deve adicionar índices em...",
      "upvoteCount": 8,
      "author": {
        "@type": "Person",
        "name": "João Silva",
        "url": "https://forum.exemplo.com/u/joao"
      }
    }
  }
}

Marcação de Página de Categoria:

{
  "@context": "https://schema.org",
  "@type": "CollectionPage",
  "name": "Otimização de Banco de Dados",
  "description": "Dicas e truques para consultas mais rápidas",
  "numberOfItems": 245,
  "hasPart": [...]
}

Veja USAGE.md para exemplos completos.

Casos de Uso

Fóruns Técnicos:
Desenvolvedores encontram suas soluções através dos trechos em destaque do Google e assistentes de codificação de IA, com o contexto de código preservado adequadamente.

Comunidades de Suporte:
Mecanismos de pesquisa exibem suas respostas com classificações e status de resolvido, direcionando tráfego qualificado para seu melhor conteúdo.

Fóruns de Discussão:
Compartilhamento em redes sociais com aparência profissional com cartões personalizados, aumentando o engajamento e reduzindo as taxas de rejeição.

Comunidades Internacionais:
Detecção automática de idioma garante que os usuários vejam o conteúdo em seu idioma preferido, melhorando a acessibilidade.

Manutenção

Operação sem manutenção:

  • Atualização automática do cache em atualizações de conteúdo
  • Auto-recuperação em erros (nunca quebra seu site)
  • Logs abrangentes para monitoramento
  • Modo de depuração opcional para solução de problemas

Gerenciamento de cache (opcional):

# Console Rails
MetaGeneratorService.clear_all_cache
MetaGeneratorService.cache_stats

Solução de Problemas

Tags meta não aparecendo:

  1. Verifique se o plugin está habilitado em Admin → Plugins
  2. Verifique os logs: ./launcher logs app | grep RichMicrodata
  3. Limpe o cache: MetaGeneratorService.clear_all_cache

Trechos ricos não aparecendo no Google:

  • O Google leva de 2 a 4 semanas para re-rastrear e atualizar
  • Teste com Rich Results Test
  • Verifique erros de validação no Search Console

Veja USAGE.md para solução de problemas detalhada.

Métricas de Desempenho

  • Taxa de acerto do cache: 95%+ para fóruns típicos
  • Tempo de resposta: < 5ms em cache, ~50ms novo
  • Sobrecarga de memória: Mínima (usa Redis)
  • Carga no banco de dados: Negligenciável (cache de 1 hora)

Roadmap

Versão atual: 2.0.0

:white_check_mark: Open Graph completo e Twitter Cards
:white_check_mark: Suporte completo ao Schema.org JSON-LD
:white_check_mark: Localização EN/RU
:white_check_mark: Codificação de URL para caracteres internacionais

Planejado:

  • Pacotes de idiomas adicionais (ES, DE, FR)
  • Suporte ao esquema de vídeo
  • Esquema de evento para anúncios
  • Esquema de produto para categorias de marketplace

Suporte

Licença

Licença MIT — Software livre e de código aberto

Créditos


Opcional: Instant View do Telegram

O repositório inclui regras de modelo de exemplo em TELEGRAM_IV_RULES.txt para criar modelos Instant View do Telegram bonitos. Use essas regras em instantview.telegram.org para fornecer uma experiência de leitura rápida e sem distrações para usuários que compartilham o conteúdo do seu fórum no Telegram.


Transforme a visibilidade do seu fórum hoje. Instale em menos de 5 minutos, veja resultados no Google em 2-4 semanas. :rocket:

12 curtidas

Oi, mesmo que o pacote de idioma em francês não esteja pronto, você me aconselha a usar este plugin em um site Discourse em francês? Obrigado.

1 curtida

Oi. Este plugin não afetará a experiência do usuário de forma alguma. A configuração do idioma principal é definida nas configurações do Discourse. Você também pode especificar idiomas alternativos na seção de administração se o fórum for multilíngue. Sim, fique à vontade para usá-lo, ele não causará nenhum problema. A tradução é usada apenas para gerenciar o plugin na seção de administração. Se você entende inglês ou russo, você conseguirá administrá-lo.

2 curtidas

Olá a todos, instalei este plugin sem qualquer dificuldade. A configuração é muito simples, funcionou imediatamente. Fiz um teste para ver o que saía dos microdados, e tudo parece bem para mim.

1 curtida

Uau, muito interessante!

O autor fornece as melhores práticas em discourse-rich-json-ld-microdata/USAGE.md at main · kaktaknet/discourse-rich-json-ld-microdata · GitHub

Melhores Práticas

  1. Sempre use imagens de alta qualidade (1200x630px) para os tópicos
  2. Escreva títulos de tópicos detalhados (ajuda com o campo de nome do Schema.org)
  3. Ative o plugin Solved para melhor detecção de acceptedAnswer
  4. Use descrições de categoria descritivas
  5. Incentive os usuários a preencherem suas biografias (melhora o esquema de Pessoa)
  6. Monitore a taxa de acerto do cache (mire em >95%)
  7. Aqueça o cache após as implantações
  8. Teste o markup com validadores antes de grandes lançamentos

Readme

Feito com :heart: para a Comunidade Discourse

É verdade. A documentação Markdown mais bonita que já vi :trophy: !

2 curtidas

Obrigado. Mesmo que este plugin não tenha nenhum efeito visível no fórum para usuários comuns e sirva apenas para atrair mais visitantes dos motores de busca e auxiliar assistentes de voz, implementá-lo não foi uma tarefa fácil. Mas consegui fazer isso.

2 curtidas

Ótimo plugin! Obrigado pelo seu trabalho. Estou tentando instalá-lo, mas não consigo obter o “data-rich-microdata”

Eu já testei um “MetaGeneratorService.clear_all_cache”:
discourse(prod)⟩ MetaGeneratorService.clear_all_cache => []
e “tail -f log/production.log | grep RichMicrodata” me dá um:

⟩ [RichMicrodata] Gerado para o tópico 14092, crawler: true, tamanho do cabeçalho: 5855
⟩ [RichMicrodata] Retornando HTML (5855 caracteres), crawler: true
⟩ [RichMicrodata] Construtor de HTML (server:before-head-close-crawler) iniciado para TopicsController
⟩ [RichMicrodata] Gerando para o tópico 22861
⟩ [RichMicrodata::Coordinator] ERRO em TwitterCardBuilder: variável local ou método não definido `twitter_image’ para uma instância de DiscourseRichMicrodata::Builders::TwitterCardBuilder
⟩ [RichMicrodata] Gerado para o tópico 22861, crawler: true, tamanho do cabeçalho: 6815
⟩ [RichMicrodata] Retornando HTML (6815 caracteres), crawler: true
⟩ [RichMicrodata] Construtor de HTML (server:before-head-close-crawler) iniciado para TopicsController

1 curtida

Por favor, tente fornecer um link para a postagem do fórum https://search.google.com/test/rich-results

1 curtida

Legal. Mas existe uma maneira de corrigir todos esses erros relacionados à imagem do Twitter?

Screenshot_20251122_124238_Brave

Vou verificar isso. Aparentemente, o plugin de imagem é necessário. Eu perdi esse ponto. Vou consertar.

1 curtida

Atualizado, confira

1 curtida

Olá! Só queria compartilhar um caso estranho: Em nosso fórum, nós realmente não forçamos a definição de um “nome” para o usuário, então quando o Google tenta indexar, ele reclama com:

Campo “name” ausente (em “author”)

Itens com este problema são inválidos. Itens inválidos não são elegíveis para resultados aprimorados da Pesquisa Google

Não tenho certeza se há alguma maneira de dizermos que o nome de usuário é o nome?

Não há tal problema nas configurações padrão do fórum e do tema. Se você tiver configurações personalizadas de fórum ou tema, verifique-as por sua conta.

1 curtida

Se não se importa que eu pergunte, o que é “fórum padrão”? As configurações de tema não devem ser um problema, testei no Horizon também e o problema é que o “nome” gerado não é preenchido (porque não exigimos que seja preenchido)

Isto está definido no modo “discussão”, tentarei outros modos para ver

Edição:

Alguns tópicos têm o “nome” preenchido, enquanto outros não. Mesmo para o mesmo usuário que não definiu um “nome” específico


Além disso, provavelmente não relacionado, vejo alguns erros sobre microdados e localidade ZN

Olá, instalei este plugin. Quero desativar o realce vermelho na imagem anexa ( Screenshot by Lightshot ). Como configuro o plugin para fazer isso? Muito obrigado!