🏆 Discourse 富 JSON-LD Microdata 插件

Discourse 丰富的 JSON-LD 微数据

:sparkles: 摘要 通过一套全面、协调的 Open Graph、Twitter Cards 和 Schema.org JSON-LD 标记,增强 Discourse 的标准元标签,从而实现卓越的 SEO 性能、更丰富的社交媒体分享体验以及提升 AI/LLM 的可发现性
:hammer_and_wrench: 仓库链接 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: 安装指南 如何在 Discourse 中安装插件

您将获得什么

彻底改变您的论坛在搜索结果、社交媒体和 AI 驱动助手中的呈现方式。本插件生成专业级的结构化数据,Google、Yandex、社交媒体平台和大型语言模型均能完美理解。

查看详细文档,请参阅 README.md

查看技术细节和开发指南,请参阅 CONTRIBUTING.md

查看使用示例和故障排除,请参阅 USAGE.md

丰富搜索结果示例

之前:Google 中的纯文本片段
之后:包含评分、回答数量、作者和发布日期的丰富片段

之前:社交媒体中的通用链接预览
之后:带有图片、描述和品牌标识的引人注目的卡片

了解更多关于 Google 搜索中心的丰富结果 的信息

主要功能

1. 完整的 Schema.org 覆盖

  • 针对具有完整问答层级的主题使用 QAPage 架构
  • 支持 回答评分已解决状态
  • 针对包含子类别的分类使用 CollectionPage
  • 针对带有专业指标的用户个人资料使用 ProfilePage
  • 针对导航路径使用 BreadcrumbList
  • 带有搜索操作的 WebSite 全局架构

2. 协调的社交媒体标签

  • Open Graph(Facebook、LinkedIn、Discord)
  • Twitter Cards(summary_large_image)
  • 所有标签均源自 单一事实来源,无冲突
  • 自动清理 Discourse 的默认标签

3. AI 与 LLM 优化

  • 使用 Schema.org @id 引用实现完整的实体关系
  • 全面理解上下文(主题 → 分类 → 回答 → 评论)
  • 作者专业元数据
  • ChatGPT、Claude 和其他 AI 助手可获得完美的上下文

4. 完整的国际化 :globe_showing_europe_africa:

  • 包含 100% 的英语和俄语翻译
  • 自动语言检测(用户 → 站点 → 浏览器 → 回退)
  • 所有 Schema.org 描述均已本地化
  • 易于添加更多语言

5. 智能性能

  • Redis 缓存,TTL 为 1 小时(可配置)
  • 内容更改时自动失效缓存
  • 缓存页面响应时间 < 5 毫秒
  • 新生成页面响应时间约 50 毫秒

6. 零维护

  • 自动注入浏览器和爬虫视图
  • 适用于主题、分类和用户个人资料
  • 优雅的错误处理,绝不会破坏您的站点
  • 全面的日志记录以用于调试

为您的论坛带来的好处

:bullseye: 更好的搜索排名

  • Google 中的丰富片段可将点击率提高 30-50%
  • 专家用户的知识图谱面板
  • 出现在“人们也问”部分
  • 搜索结果中的面包屑导航改善用户体验

:mobile_phone: 专业的社交媒体分享

  • 在 Facebook、Twitter、LinkedIn 上分享时显示引人注目的卡片
  • 带有徽标和描述的正确品牌标识
  • 提高参与度和点击率
  • 适用于 40 多个社交媒体平台

:robot: 为 AI 助手做好准备

  • 您的内容可准确出现在 ChatGPT 和 Claude 的回复中
  • 带有指向您论坛链接的正确归属
  • 完整的上下文可防止 AI 幻觉
  • 面向生成引擎优化(GEO)的未来-proof 设计

:globe_showing_europe_africa: 面向国际受众

  • 自动语言检测
  • 本地化描述以提高相关性
  • URL 编码处理西里尔字母和特殊字符
  • 易于扩展至更多语言

安装

步骤 1:安装

按照上述仓库链接,参考 Install plugins on a self-hosted site 进行安装

步骤 2:在管理员面板中启用

导航至 管理员 → 设置 → 插件 → Rich Microdata

rich_microdata_enabled 设置为 true(默认启用)

步骤 3:配置(可选)

所有设置开箱即用,但您可以自定义:

  • 缓存持续时间(默认:1 小时)
  • 包含的最大回答数(默认:10)
  • 您站点的 Twitter @handle
  • 默认 Open Graph 图片 URL
  • 启用/禁用特定架构

步骤 4:验证

测试您的标记:

配置

设置 默认值 描述
rich_microdata_enabled true 插件的主开关
rich_microdata_cache_ttl 3600 缓存持续时间(秒)
rich_microdata_max_answers 10 QAPage 架构中最大回答数
rich_microdata_include_user_stats true 包含用户统计信息
rich_microdata_enable_breadcrumbs true 添加 BreadcrumbList 架构
rich_microdata_enable_website_schema true 包含 WebSite 架构
rich_microdata_twitter_site "" 您的 Twitter @用户名
rich_microdata_og_image_default "" 回退 OG 图片 URL
rich_microdata_debug_mode false 启用调试日志记录

技术细节

架构:

  • 三层模式:DataExtractor → Builders → Coordinator
  • 单一事实来源防止数据冲突
  • 针对 <head> 标签和 <body> 内容分别渲染
  • 适用于 application.html.erbcrawler.html.erb 布局

标准合规性:

  • Schema.org JSON-LD 规范
  • Open Graph 协议
  • Twitter Cards 标记
  • RFC 3986(国际字符的 URL 编码)

安全性:

  • Guardian 权限检查
  • 自动排除私有内容
  • SQL 级安全过滤
  • 针对缺失数据的安全回退

兼容性:

  • Discourse 2.7.0+
  • Ruby 2.7+
  • 已在 Discourse 3.6.0.beta3 上测试

现实世界示例

主题页面标记:

{
  "@context": "https://schema.org",
  "@type": "QAPage",
  "name": "如何优化数据库查询?",
  "mainEntity": {
    "@type": "Question",
    "name": "如何优化数据库查询?",
    "text": "我遇到了查询缓慢的问题...",
    "answerCount": 5,
    "upvoteCount": 12,
    "acceptedAnswer": {
      "@type": "Answer",
      "text": "您应该为...添加索引",
      "upvoteCount": 8,
      "author": {
        "@type": "Person",
        "name": "John Doe",
        "url": "https://forum.example.com/u/john"
      }
    }
  }
}

分类页面标记:

{
  "@context": "https://schema.org",
  "@type": "CollectionPage",
  "name": "数据库优化",
  "description": "更快查询的技巧和窍门",
  "numberOfItems": 245,
  "hasPart": [...]
}

查看 USAGE.md 获取完整示例。

使用场景

技术论坛:
开发者通过 Google 的精选片段和 AI 编程助手找到您的解决方案,同时保留正确的代码上下文。

支持社区:
搜索引擎显示带有评分和已解决状态的答案,将优质流量引导至您的最佳内容。

讨论论坛:
社交媒体分享看起来更专业,带有自定义卡片,提高参与度并降低跳出率。

国际社区:
自动语言检测确保用户看到其首选语言的内容,提高可访问性。

维护

零维护运行:

  • 内容更新时自动刷新缓存
  • 错误时自愈(绝不会破坏您的站点)
  • 全面的日志记录用于监控
  • 可选的调试模式用于故障排除

缓存管理(可选):

# Rails 控制台
MetaGeneratorService.clear_all_cache
MetaGeneratorService.cache_stats

故障排除

元标签未显示:

  1. 验证插件已在 管理员 → 插件 中启用
  2. 检查日志:./launcher logs app | grep RichMicrodata
  3. 清除缓存:MetaGeneratorService.clear_all_cache

Google 中未显示丰富片段:

  • Google 需要 2-4 周重新抓取并更新
  • 使用 丰富结果测试 进行测试
  • 在搜索控制台检查验证错误

查看 USAGE.md 获取详细的故障排除指南。

性能指标

  • 缓存命中率:典型论坛为 95% 以上
  • 响应时间:缓存 < 5 毫秒,新生成约 50 毫秒
  • 内存开销:极小(使用 Redis)
  • 数据库负载:可忽略不计(缓存 1 小时)

路线图

当前版本:2.0.0

:white_check_mark: 完整的 Open Graph 和 Twitter Cards
:white_check_mark: 完整的 Schema.org JSON-LD 支持
:white_check_mark: 英语/俄语本地化
:white_check_mark: 国际字符的 URL 编码

计划中:

  • 更多语言包(西班牙语、德语、法语)
  • 视频架构支持
  • 用于公告的事件架构
  • 用于市场分类的产品架构

支持

许可证

MIT 许可证 - 免费且开源的软件

致谢


可选:Telegram 即时视图

该仓库包含示例模板规则文件 TELEGRAM_IV_RULES.txt,用于创建精美的 Telegram 即时视图模板。请在 instantview.telegram.org 使用这些规则,为在 Telegram 中分享您论坛内容的用户提供快速加载、无干扰的阅读体验。


立即提升您论坛的可见性。 5 分钟内即可完成安装,2-4 周内即可在 Google 中看到效果。:rocket:

12 个赞

你好,尽管法语语言包尚未准备好,你建议我在法语的 Discourse 站点上使用这个插件吗?谢谢。

1 个赞

你好。这个插件不会以任何方式影响用户体验。主语言设置取自 Discourse 设置。如果论坛是多语言的,你也可以在管理后台指定其他语言。是的,尽管使用,它不会造成任何问题。翻译只用于在管理后台管理插件。如果你懂英语或俄语,你就能进行管理。

2 个赞

大家好,我安装这个插件没有任何困难。设置非常简单,它立即就能用。我运行了一个测试,看看微数据有什么输出,一切对我来说似乎都很好。

1 个赞

太棒了,真有趣!

作者在 https://github.com/kaktaknet/discourse-rich-json-ld-microdata/blob/main/USAGE.md 提供了最佳实践

最佳实践

  1. 始终为主题使用高质量图片(1200x630px)
  2. 撰写详细的主题标题(有助于 Schema.org 的 name 字段)
  3. 启用 Solved 插件以更好地检测 acceptedAnswer
  4. 使用描述性的分类说明
  5. 鼓励用户填写个人简介(改进 Person schema)
  6. 监控缓存命中率(目标是 >95%)
  7. 部署后预热缓存
  8. 在重大发布前使用验证器测试标记

Readme

https://github.com/kaktaknet/discourse-rich-json-ld-microdata/blob/main/README.md

Made with :heart: for the Discourse Community

这是真的。我见过的最漂亮的 Markdown 文档 :trophy:

2 个赞

谢谢。尽管这个插件对普通用户来说对论坛没有任何明显的影响,它仅仅是为了吸引更多的搜索引擎访问者和协助语音助手,但实现它并非易事。不过,我还是设法完成了。

2 个赞

插件很棒!感谢您的工作。我正在尝试安装它,但我无法获取“data-rich-microdata”。

我已经测试了“MetaGeneratorService.clear_all_cache”:
discourse(prod)⟩ MetaGeneratorService.clear_all_cache => []
并且“tail -f log/production.log | grep RichMicrodata”给了我一个:

[RichMicrodata] 为主题 14092 生成,爬虫:true,head 大小:5855
[RichMicrodata] 返回 HTML(5855 个字符),爬虫:true
[RichMicrodata] HTML 构建器(server:before-head-close-crawler)已为 TopicsController 启动
[RichMicrodata] 为主题 22861 生成
[RichMicrodata::Coordinator] TwitterCardBuilder 中的错误:DiscourseRichMicrodata::Builders::TwitterCardBuilder 的实例中未定义本地变量或方法 `twitter_image’
[RichMicrodata] 为主题 22861 生成,爬虫:true,head 大小:6815
[RichMicrodata] 返回 HTML(6815 个字符),爬虫:true
[RichMicrodata] HTML 构建器(server:before-head-close-crawler)已为 TopicsController 启动

1 个赞

请尝试提供论坛帖子的链接 https://search.google.com/test/rich-results

1 个赞

很好。但是有没有办法修复所有这些与推特图片相关的错误?

Screenshot_20251122_124238_Brave

我会去看看。显然,需要图片插件。我漏掉了这一点。我会修复它。

1 个赞

已更新,请查看

1 个赞

嘿!只是想分享一个奇怪的情况:在我们的论坛上,我们并不强制用户设置“名称”,所以当谷歌尝试索引时,它会抱怨:

缺少“name”字段(在“author”中)

存在此问题的条目无效。无效条目没有资格获得 Google 搜索的富媒体结果

我不确定我们是否有办法将用户名视为名称?

在标准的论坛和主题设置中没有这个问题。如果您有自定义的论坛或主题设置,请您自行检查。

1 个赞

如果您不介意我问一下,“标准论坛”是什么意思?主题设置不应该是个问题,我在 Horizon 上也测试过,问题在于生成的“名称”没有被填充(因为我们不要求它被填充)

不过,这是设置为“讨论”模式的,我将尝试其他模式看看

编辑:

有些帖子“名称”被填充了,而有些则没有。即使对于同一个没有设置特定“名称”的用户也是如此


另外,可能不相关,但我看到一些关于微数据和区域设置 ZN 的错误

您好,我已经安装了这个插件。我想禁用附件图片(Screenshot by Lightshot