| 摘要 | 自动将新建和编辑过的公开主题 URL 提交至 IndexNow 协议,使 Bing、Yandex 及其他参与该协议的搜索引擎能在几分钟内发现您的内容,而无需等待爬虫抓取。 | |
| 仓库链接 | github.com/imlotso/discourse-indexnow | |
| 安装指南 | 如何在 Discourse 中安装插件 |
我的论坛上还有一篇提供更多背景信息的中文文章:sitetalk.net/t/topic/642。
功能
- 自动提交新的公开主题;当编辑更改了主题的首帖或关键属性时,会自动重新提交。
- 当启用 内容本地化 及其爬虫语言参数时,本地化主题 URL 会自动与主 URL 一起提交——使用 Discourse 真实的语言查询参数(绝不硬编码)。
- 将主 URL 和所有现有本地化 URL 合并为单个 IndexNow
urlList批量请求进行提交,而不是为每个 URL 单独发送请求。 - 历史数据回填:可按分类和日期范围筛选主题,预览匹配结果,然后一次性批量提交——复用相同的批处理引擎,该引擎会自动根据协议的 10,000 个 URL 限制拆分提交。
- 手动提交:每行粘贴一个 URL,即可按需提交特定链接;外部 URL 或不符合条件的 URL 会被自动过滤。
- 支持每小时/每日提交上限,并在 IndexNow 返回
429时自动退避(如果存在Retry-After头则予以遵守)。 - 支持密钥轮换——旧密钥在 7 天的过渡期内保持有效,以确保正在进行的提交不会中断。
- 内置针对您的
/<key>.txt文件的可达性检查,直接在管理面板中显示。 - 当主题在分类之间移动,或分类的可见性/标签发生变化时,自动重新提交(或排除)相关主题。
- 提交日志记录批次 ID、语言、7 天成功/失败趋势,以及失败原因明细(速率限制 / 密钥错误 / 域名不匹配 / 其他)。
- 所有提交均通过 Sidekiq 异步运行,并经过与自动提交相同的隐私过滤器——没有任何内容会绕过排除规则(私信、受限分类、未列出/已删除的主题、需要登录的网站)。
- 管理界面支持英语和简体中文。
配置
- 安装插件(见上方的安装指南)并重建您的容器。
- 前往 管理 > 插件 > discourse-indexnow。
- 在 设置 选项卡中,点击 生成密钥(或粘贴您已在其他地方注册的现有 32 位十六进制密钥)。
- 勾选 启用 IndexNow 提交 复选框。
- 确认密钥在以下地址公开可访问:
它应返回 HTTP 200,并以纯文本形式返回密钥。管理面板还会自动运行此检查,并在 “key.txt 可访问” 旁边显示缓存的绿色/红色状态。https://your-forum.example/<key>.txt - (可选)在 日志 选项卡中,使用 回填 面板提交历史主题——选择分类和日期范围,点击 预览 查看匹配的主题数量,然后点击 提交。
- (可选)使用 手动提交 字段粘贴一次性 URL,每行一个,以便在正常的自动流程之外立即提交。
日志选项卡还显示 7 天成功/失败趋势图和失败原因明细,让您一目了然地判断提交是否因速率限制、密钥不匹配而被拒绝,或因其他原因失败。
设置
| 名称 | 描述 |
|---|---|
indexnow_enabled |
插件的主开关。当 login_required 开启时无法启用,如果之后开启 login_required,则会自动禁用。 |
indexnow_api_key |
用于身份验证提交的当前 32 位十六进制密钥。 |
indexnow_submit_on_create |
当创建新的公开主题时自动提交。 |
indexnow_submit_on_edit |
当首帖或主题属性更改时自动重新提交。 |
indexnow_excluded_category_ids |
需要始终排除的额外分类,即使它们是公开的。 |
indexnow_hourly_limit |
每小时提交的最大 URL 数量。 |
indexnow_daily_limit |
每天提交的最大 URL 数量。 |
已知限制
- IndexNow 没有删除通知——主题删除仅记录用于审计目的,不会提交。
- Google 不参与 IndexNow 协议。
- 只有当启用爬虫语言参数 且 该主题确实存在本地化版本时,才会提交本地化 URL。
这是一个独立的非官方插件——不由 Discourse 团队维护。它正在我自己的论坛上生产环境中运行,具有 RSpec 测试覆盖率,并在每次推送/PR 时运行 CI。如果您通过 GitHub issues 或在此处回复报告任何 bug 或提出功能请求,我将不胜感激。