| 简介 | 自动把新建、编辑和删除后的公开话题 URL 提交给 IndexNow 协议,让 Bing、Yandex 等兼容搜索引擎能在几分钟内发现或下架你的内容,而不是等待爬虫慢慢抓取。 | |
| 仓库地址 | github.com/imlotso/discourse-indexnow | |
| 安装指南 | How to install plugins in Discourse |
功能特性
- 新话题发布时自动提交,编辑改动了首帖或话题关键属性时自动重新提交。
- 回复触发提交:产生新回复时自动提交对应分页 URL(如
?page=3),并支持单 URL 冷却时间,防止频繁刷提交。 - 话题被删除时自动提交对应 URL,帮助搜索引擎更快检测到 404/410 并加速下架。
- 站点开启 Content Localization 及其爬虫 locale 参数时,会自动把本地化话题 URL 一并提交——使用 Discourse 实际配置的 locale 查询参数,不做硬编码。
- 把主 URL 和已有的本地化 URL 合并为一次 IndexNow
urlList批量请求,而不是逐条单独提交。 - 历史帖子补量:按分类和日期范围筛选话题,先预览匹配结果,再一次性批量提交——复用同一套批量提交引擎,超过协议单次 10,000 条上限时会自动分片。仍在处理中的批次(比如误选了过大的范围)可以直接在 Logs 标签页取消。
- 手动提交:每行粘贴一个 URL 即可按需提交指定链接,外部链接和不符合条件的话题会被自动过滤。
- 智能限流与配额管理:支持基于平滑滑动窗口 (Sliding window) 的每小时/每日提交上限。遇到 IndexNow 的
429响应时会自动退避(优先遵循Retry-After头)。管理后台提供直观的配额进度条与额度恢复倒计时。 - 支持排除指定分类和标签,在自动隐私过滤之外再叠加一层业务层排除规则。
- 支持密钥轮换(带有防误触二次确认提示),生成新密钥会立即使旧密钥失效。
- 管理后台内置
/<key>.txt公网可达性检查。 - 话题被移动分类、分类可见性变化或标签更新时,会自动异步重新提交或同步排除,大批量操作不阻塞页面。
- 日志记录批次 ID、locale、触发原因(新建/编辑/删除/分类变更/补量/手动)、近 7 天成功/失败趋势,以及失败原因分类(限流 / 密钥错误 / 域名不匹配 / 其他)。
- 所有提交均异步执行,且和自动提交走同一套隐私过滤逻辑——私信、受限分类、未列出/已删除话题、开启登录要求的站点,一律不会被提交。
- 管理界面提供英文和简体中文两种语言。
配置步骤
- 按上方安装指南安装插件,重建容器。
- 打开 Admin > Plugins > discourse-indexnow。
- 在 Settings 标签页点击 Generate key(也可以填入你已经在别处注册好的 32 位十六进制密钥)。
- 勾选 Enable IndexNow submissions。
- 确认密钥在公网可访问:
https://你的论坛域名/<key>.txt
正常应返回 HTTP 200,内容为密钥本身。管理后台也会自动做这项检查,并在"key.txt 可访问"旁显示带缓存的绿色/红色状态。
6.(可选)在 Logs 标签页使用"补量提交"面板:选择分类和日期范围,点击 预览 查看匹配数量,再点击 提交。如果批次还在处理中,可以在同一页面取消。
7.(可选)使用手动提交输入框,每行粘贴一个 URL,即可在常规自动流程之外立即提交指定链接。
Logs 页面还会显示配额使用进度条、近 7 天成功/失败趋势图和失败原因分类统计,方便一眼看出提交失败究竟是被限流、密钥不匹配,还是其他原因。
配置项
| 名称 | 说明 |
|---|---|
indexnow_enabled |
插件总开关。站点开启 login_required 时无法启用,若之后开启该设置插件会自动禁用。 |
indexnow_api_key |
当前用于提交验证的 32 位十六进制密钥。 |
indexnow_submit_on_create |
新公开话题发布时自动提交。 |
indexnow_submit_on_edit |
首帖或话题属性变化后自动重新提交。 |
indexnow_submit_on_reply |
产生新回复时自动提交该回复所在的分页 URL。 |
indexnow_url_cooldown_minutes |
单个 URL 的防刷新冷却时间(分钟)。 |
indexnow_excluded_category_ids |
额外排除的分类,即使该分类本身是公开的也不会提交。 |
indexnow_excluded_tag_names |
额外排除的标签,即使话题所属分类本身符合提交条件也不会提交。 |
indexnow_hourly_limit |
每小时最多提交的 URL 数量(基于滑动窗口)。 |
indexnow_daily_limit |
每天最多提交的 URL 数量(基于滑动窗口)。 |
已知限制
- Google 目前未加入 IndexNow 协议。
- 只有在爬虫 locale 参数启用且该话题确实存在对应本地化内容时,才会提交本地化 URL。
- 目前首帖编辑以及后续回复分页变动已获支持,但中间楼层的单独编辑暂不单独触发提交。
这是一个独立开发、非 Discourse 官方维护的插件。目前已经在我自己的论坛生产环境运行,配有 RSpec 测试并在每次 push/PR 时跑 CI,欢迎通过 GitHub issue 或本贴回复反馈问题和功能建议。
