本参考资料说明了公共 Discourse 站点如何与 Google 等搜索引擎协同工作,以及该平台如何确保内容即使作为一个 JavaScript 应用程序也能被正确索引。
所需用户级别:所有用户
Discourse 站点的搜索引擎索引
Discourse 是作为一个 JavaScript 应用程序构建的,但它经过专门设计,可确保搜索引擎能够正确抓取和索引公共站点上的所有内容。
Discourse 如何支持搜索引擎爬虫
虽然 Discourse 使用现代 JavaScript 来实现其交互功能,但它实施了多项技术来确保搜索引擎可以正确索引所有内容:
专用爬虫布局
Discourse 使用 CrawlerDetection 模块根据其用户代理自动检测搜索引擎机器人。检测到爬虫时,Discourse 会提供一个完全独立的服务器渲染 HTML 布局 (crawler.html.erb),而不是正常的 JavaScript 应用程序。此爬虫布局包括:
- 完全 HTML 渲染的主题内容和主题列表——无需 JavaScript
- Schema.org 结构化数据标记(例如
DiscussionForumPosting、ItemList、BreadcrumbList),以帮助搜索引擎理解您的内容 - 带有
rel="prev"和rel="next"链接的正确分页,以便进行完整抓取 - 主题页面上的
Last-Modified标头,以指示内容的最新状态
无 JavaScript 备用方案
对于禁用了 JavaScript 的常规浏览器,Discourse 还在标准应用程序布局中包含一个 \u003cnoscript\u003e 标签。这包含已渲染的主题列表和主题内容,确保即使没有 JavaScript,该站点仍然可访问。
Robots.txt 和索引控制
Discourse 提供多项设置来控制搜索引擎如何与您的站点交互:
allow_index_in_robots_txt
此站点设置(默认启用)控制站点的 robots.txt 是否允许抓取。禁用时,robots.txt 将拒绝所有爬虫,并且所有响应中都会添加 X-Robots-Tag: noindex 标头。
爬虫允许列表和阻止列表
您可以使用以下方式控制哪些爬虫可以访问您的站点:
allowed_crawler_user_agents—— 设置后,只允许列出的爬虫访问;所有其他爬虫都将通过robots.txt阻止blocked_crawler_user_agents—— 设置后,列出的爬虫将被阻止,而所有其他爬虫都将被允许
自定义 robots.txt
管理员可以在 /admin/customize/robots 处完全自定义 robots.txt 文件。自定义的 robots.txt 将完全覆盖默认生成的 robots.txt。
默认拒绝访问的路径
默认情况下,Discourse 会阻止爬虫访问对索引没有帮助的路径,例如 /admin/、/auth/、/email/、/session、/search 等。Googlebot 会获得更宽松的配置,只阻止核心管理/身份验证路径。
查看爬虫版本
您可以通过以下方式查看搜索引擎如何看待您的 Discourse 站点:
- 在 Chrome 或 Firefox 中安装禁用 JavaScript 的浏览器插件
- 使用 Chrome 开发者工具禁用 JavaScript(Google 的说明)
- 更改浏览器的用户代理字符串为已知的爬虫(例如
Googlebot),以查看专用的爬虫布局