Discourse 拥有许多开箱即用的 SEO 功能。通过我们合理的默认设置,社区管理者可以专注于培养社区,而无需因优化搜索引擎而分心。话虽如此,以下是一些您可以更改的内容、您应该了解的事项以及一些通用的技巧。
搜索引擎的静态视图
Discourse 提供无 JavaScript 的静态 HTML 视图,以帮助网络爬虫更快地索引您的网站。动态视图和静态视图之间的内容完全相同,当搜索引擎抓取网站时,不会省略或剥离任何内容。
以下是用户看到的与搜索引擎看到的对比:
主题列表:
主题:
预览爬虫视图
您可以通过以下两种方式在不禁用 JavaScript 的情况下检查 Discourse 向爬虫提供的内容:
-
?printURL 参数 — 在任何 Discourse URL 后附加?print(例如https://yourforum.com/t/some-topic/123?print)。这会强制任何浏览器使用爬虫布局,无论用户代理如何。这是审核搜索引擎看到的内容的最简单方法。 -
Discourse-Render: crawler请求头 — 在任意请求中发送此 HTTP 头以强制使用爬虫布局。适用于程序化审核或使用curl进行测试:curl -H "Discourse-Render: crawler" https://yourforum.com/t/some-topic/123
Meta 标签
在 Discourse 中,对 SEO 至关重要的通用 meta 标签是根据页面上存在的内容自动生成的。例如,title 标签源自网站或主题标题,description 则根据第一帖的内容生成。然而,针对元数据的逐页自定义是有限的。要更改这些值,您需要调整设置或生成这些值的内容字段。
- Title(标题)、Description(描述)和 Short site description(简短网站描述)网站设置
- 分类名称
- 帖子的标题和内容
- 等等

社交媒体 Meta 标签
Discourse 自动生成 Open Graph 和 Twitter (X) Card meta 标签,以实现丰富的社交分享:
Open Graph 标签
og:site_name,og:type,og:url,og:title,og:descriptionog:image- 可通过opengraph_image设置进行配置og:article:section- 分类面包屑og:article:tag- 主题标签
X (前身为 Twitter) Card 标签
twitter:card- “summary” 或 “summary_large_image”twitter:title,twitter:description,twitter:imagetwitter:label1/data1- 阅读时间估算twitter:label2/data2- 点赞数
配置设置
opengraph_image- 社交分享的默认 OG 图片x_summary_large_image- X (前身为 Twitter) 大卡片图片
URL 结构和编码
非拉丁字符和 URL
默认情况下,当语言环境设置为英文时,Discourse 会从主题 URL 中剥离非拉丁字符。为避免这种情况,您可以将语言环境更改为主要非拉丁语言,或将 slug generation method(slug 生成方法)设置从 ASCII 更改为 encoded(编码)。
国际 SEO 和 hreflang 标签
对于多语言社区,Discourse 支持 hreflang 标签,帮助搜索引擎向用户展示正确的语言版本。要启用此功能,您必须配置以下三个设置(管理 → 设置 → 本地化):
content_localization_enabled:启用内容本地化系统。content_localization_supported_locales:定义支持的语言环境代码(例如en|es|fr)。content_localization_crawler_param:必需,用于生成<link rel="alternate" hreflang="...">标签,并为带有tl语言环境参数的爬虫重写内部链接(例如/t/example-topic/123?tl=es)。
启用这些设置后,Discourse 会为每种支持的语言生成替代链接,帮助 Google 和其他搜索引擎向用户展示正确的语言版本。
子文件夹与子域名设置
由于其技术简单性,Discourse 倾向于使用子域名而非子文件夹。Google 对这两者并没有真正的偏好[1],但 Discourse 强烈建议避免使用子文件夹设置,除非您具备深厚的技术理解。
如果您在子文件夹中运行 Discourse(例如 example.com/forum/),您的根级别 robots.txt 由您的主 Web 服务器管理,而非 Discourse。为了帮助正确配置它,Discourse 在 /robots-builder.json 处暴露了一个 JSON 端点,返回 Discourse 将生成的确切禁止规则,范围限定为您的子文件夹路径。您可以将其用作编写服务器级别 robots.txt 的脚本的输入。
规范化
Google 热衷于索引页面的规范版本。在 Discourse 中,对于有多个回复的主题,规范链接(第一帖)会交给 Google,然后由 Google 决定索引。超过 20 个帖子的主题将被分页,每个页面都是一个规范链接,包含最多 20 个帖子。
例如,此主题中最后一条回复的规范标签将是 https://meta.discourse.org/t/try-out-the-new-sidebar-and-notification-menus/238821?page=12。
allow_indexing_non_canonical_urls 设置
隐藏的网站设置 allow_indexing_non_canonical_urls(默认值:true)控制非规范 URL 变体是否接收 X-Robots-Tag: noindex 头。当设置为 false 时,任何与规范 URL 不同的 URL 请求(例如直接帖子链接 /t/slug/123/45,而规范链接为 /t/slug/123?page=3)都将返回 noindex 头。
嵌入的主题
当主题嵌入到外部网站时,您可以使用 embed_set_canonical_url 设置将规范 URL 指向原始嵌入位置。这可以防止同一主题出现在您的论坛和嵌入站点时出现重复内容问题。
Schema 标记
Discourse 使用广泛的 schema.org 标记来帮助搜索引擎理解您的内容。每种内容类型都包含丰富的结构化数据,这些数据会出现在搜索结果中,并有助于提高可发现性。
主题
使用 DiscussionForumPosting schema 来表示主要讨论线程,包括:
headline- 主题标题datePublished- 主题创建时间articleSection- 分类名称keywords- 所有主题标签publisher- 您的网站/组织信息author- 原始发帖人的信息
帖子和回复
主题中的单个帖子使用 Comment schema,包括:
author- 带有姓名和个人资料链接的帖子作者text- 帖子内容datePublished和dateModified- 创建和编辑时间戳interactionStatistic- 使用InteractionCounter和LikeAction类型的点赞数
面包屑
分类导航使用 BreadcrumbList schema,该 schema 会出现在搜索结果中,显示分类层级路径。每个面包屑包括:
itemListElement- 单个分类链接position- 层级中的顺序- 用于视觉区分的分类颜色
分类和主题列表
分类页面和主题列表视图使用 ItemList schema:
- 使用
ItemListOrderDescending进行按时间排序 - 包括每个项目的位置元数据
- 帮助搜索引擎理解内容结构和层级
首页
网站首页包含 WebSite 和 SearchAction 的 JSON-LD 结构化数据,这使得 Google 搜索框可以直接出现在您网站的搜索结果中。
关于页面
您的关于页面使用 About 页面 schema 和 Organization 信息,帮助搜索引擎了解您社区的身份和目的。
Sitemap
Discourse 包含一个位于 /sitemap.xml 的 sitemap index,默认通过 enable sitemap 设置启用。这有助于搜索引擎更好地索引。还有其他 sitemap:
- 近期 Sitemap (
/sitemap_recent.xml) - 过去 3 天内被顶起的主题(缓存 1 小时) - 新闻 Sitemap (
/news.xml) - 过去 72 小时内以 Google News 格式被顶起的主题(缓存 5 分钟),适用于新闻导向的社区 - 分页 Sitemaps - 主题的全部分页目录(缓存 24 小时)
Sitemaps 由定时任务每小时自动重新生成,并包含最后修改时间戳。您可以通过 sitemap_page_size 设置(默认值:10,000)配置每个 sitemap 页面的主题数量。
Web 爬虫
Web 爬虫,也称为机器人或 bots,对于索引网页和使您的内容可发现至关重要。Discourse 使用复杂的爬虫检测来提供优化内容并有效管理机器人流量。
爬虫检测
Discourse 自动检测并处理各种类型的爬虫,包括:
- 搜索引擎: Googlebot, Bingbot, DuckDuckBot 等
- 社交媒体: Facebookbot, Twitterbot, LinkedInBot, Discordbot
- AI 爬虫: GPTBot, ClaudeBot, Anthropic-AI, BrightBot
- 存档服务: Wayback Machine, Archive.org
- 监控服务: Lighthouse, Google Inspection Tool
当检测到爬虫时,Discourse 提供优化内容并添加特殊响应头:
X-Discourse-Crawler-View: true- 表示针对爬虫优化的内容Last-Modified头 - 启用高效的重新抓取
管理爬虫流量
某些爬虫可能过于积极,向您的论坛发送大量请求。Discourse 提供了几种设置来管理爬虫行为:
blocked_crawler_user_agents- 完全阻止特定爬虫(默认阻止列表包括:mauibot, semrushbot, ahrefsbot, blexbot, seo spider)slow_down_crawler_user_agents- 限制爬虫速率而非阻止它们(默认包括 AI 爬虫,如 GPTBot, ClaudeBot)allowed_crawler_user_agents-
危险:设置此项将阻止所有未明确列出的爬虫,包括 Googlebot。 仅当您打算将爬取限制为特定的一组机器人时才使用此设置。它完全优先于 blocked_crawler_user_agents。除非有特定原因,否则请留空。
自动 noindex 头
除了全局 allow_index_in_robots_txt 设置外,Discourse 还会自动向几种页面类型添加 X-Robots-Tag: noindex 响应头:
- 搜索页面 — 始终 noindex(搜索结果作为索引页面没有用处)
- 徽章页面 — 始终 noindex
- 群组页面 — 始终 noindex
- 用户个人资料页面 — 始终 noindex
- 标签过滤/交集页面 — noindex(标签索引和显示页面除外)
- RSS/Atom 源 — 始终 noindex
这些在控制器级别应用,且不可配置。它们确保临时、低价值或重复内容的页面不会污染搜索引擎索引。
爬虫分析
管理员可以在 管理 → 报告 → Web 爬虫 监控爬虫活动,查看哪些机器人正在访问您的网站以及访问频率。
其他 SEO 功能
通过 llms.txt 指导 AI 爬虫
Discourse 支持 llms.txt 约定,这是一种为标准引导基于 LLM 的爬虫(如 AI 助手使用的爬虫)了解您网站内容和结构的方法。
要启用它:
- 准备一个
.txt或.md文件(最大 512 KB),描述您的网站以供 LLM 爬虫使用 - 通过
llms_txt网站设置上传它(管理 → 设置 → 安全) - 它将在
https://yourforum.com/llms.txt处提供服务
![]()
llms.txt与robots.txt不同,专门用于引导基于 LLM 的爬虫。它不是提供访问规则,而是提供语义上下文……描述您的网站是什么、包含什么内容以及 AI 助手应如何理解和使用它。可以将robots.txt视为告诉机器人“它们可以去哪里”,而llms.txt则是告诉 AI“它在看什么以及为什么重要”。
OpenSearch 集成
Discourse 在 /opensearch.xml 提供 OpenSearch 描述,启用浏览器搜索集成。用户可以将您的论坛直接添加到他们的浏览器搜索引擎列表中。
RSS 源
每个主题都在 /t/{slug}/{id}.rss 处提供 RSS 源,其中包括:
- 主题标题和描述
- 所有帖子/回复及作者信息
- 发布日期和最后更新时间
- 分类和标签
注意: RSS 源路径 (
/t/*/*.rss,/c/*.rss) 在 robots.txt 中对通用*通配符代理被禁止,以防止大多数爬虫索引重复内容。Googlebot 明确豁免于此限制,可以访问 RSS 源。
Google 网站验证
使用 google_site_verification_token 设置添加 Google Search Console 验证 meta 标签,而无需编辑主题模板。
渐进式 Web 应用 (PWA)
Discourse 在 /manifest.json 生成 Web App Manifest,用于移动应用发现和安装提示。
迁移和 URL 重定向
永久链接功能用于重定向旧 URL,旨在保留 SEO,防止“页面未找到”错误,并协助搜索引擎获取正确的元数据以便于索引。
如果您的社区网站由我们的团队迁移到 Discourse,除非有正当理由不这样做,否则将包括 URL 重定向。
如果您使用的是 现有导入脚本 之一,您应确保脚本处理此问题[2]。您可以从管理面板的 自定义 → 永久链接 中手动添加永久链接。
取消索引方法
要将页面从 Google 的索引中移除,您可以删除内容或阻止访问页面。根据您的需要,您可以将整个网站设为私有[3]。您可以通过删除主题或将它们放入受限分类中来排除主题。隐藏的主题默认不被索引,但如果某处有公共链接重定向到它,则可能被索引。
要进行永久移除,使用 Google Search Console 中的 Removals 工具是保持页面不出现在搜索结果中的关键。了解更多请访问 Remove information on your website from Google - Search Console Help




