Discourse 活动

Discourse 日历/事件插件的“即将发生的事件”(Upcoming Events)路由似乎从初始服务器端渲染的 HTML 响应中省略了所有 Open Graph 和 Twitter 卡片元数据。

在托管的 Discourse 站点上可以复现此问题,其中普通页面能正确输出社交元数据,且已配置有效的站点 OpenGraph 图片。

受影响的路由示例:

https://www.mbacommons.com/upcoming-events/month/2026/8/1

复现步骤

  1. 配置有效的站点 OpenGraph 图片。
  2. 确认首页或普通主题在原始 HTML 中输出了正常的 Open Graph 元数据。
  3. 打开 /upcoming-events/month/2026/8/1
  4. 检查原始 view-source: / 初始服务器响应,而非 JavaScript 执行后的 DOM。

实际结果

“即将发生的事件”路由返回 HTTP 200,但原始 HTML 中不包含:

  • og:image
  • og:title
  • og:description
  • og:url
  • twitter:card
  • twitter:image

我还使用 LinkedInBot/1.0 进行了测试,结果相同。

对该站点进行的原始 HTML 生产环境审计统计如下:

  • 首页:11 个社交元数据标签
  • 普通主题:14 个
  • 即将发生的事件:0 个

首页和普通主题正确使用了已配置的站点 OpenGraph 图片,因此站点级别的 branding 配置本身是正常工作的。

预期结果

“即将发生的事件”路由应输出爬虫可见的、服务器端渲染的社交元数据,至少包括:

  • og:title
  • og:description
  • og:url
  • og:image,若未设置则回退到已配置的站点 OpenGraph 图片
  • 对应的 Twitter 卡片元数据

这些元数据必须包含在初始 HTML 中,因为 LinkedIn 和类似的社交爬虫无法依赖客户端主题 JavaScript。

LinkedIn 帖子检查器当前报告:

Add an og:image tag to the page to have control over the content's image on LinkedIn.

全局主题 head_tag 注入似乎并不合适,因为普通页面已经具有正确的元数据,且这可能导致标签重复或冲突。这似乎需要对“即将发生的事件”路由进行路由感知的服务器端处理,或使用 Discourse 的标准社交元数据渲染路径。

2 个赞