Discourse-indexnow —— 话题创建或编辑时即时通知 Bing 和 Yandex

:information_source: 摘要 自动将新建和编辑过的公开主题 URL 提交至 IndexNow 协议,使 Bing、Yandex 及其他参与该协议的搜索引擎能在几分钟内发现您的内容,而无需等待爬虫抓取。
:hammer_and_wrench: 仓库链接 github.com/imlotso/discourse-indexnow
:open_book: 安装指南 如何在 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 异步运行,并经过与自动提交相同的隐私过滤器——没有任何内容会绕过排除规则(私信、受限分类、未列出/已删除的主题、需要登录的网站)。
  • 管理界面支持英语和简体中文。

配置

  1. 安装插件(见上方的安装指南)并重建您的容器。
  2. 前往 管理 > 插件 > discourse-indexnow
  3. 设置 选项卡中,点击 生成密钥(或粘贴您已在其他地方注册的现有 32 位十六进制密钥)。
  4. 勾选 启用 IndexNow 提交 复选框。
  5. 确认密钥在以下地址公开可访问:
    https://your-forum.example/<key>.txt
    
    它应返回 HTTP 200,并以纯文本形式返回密钥。管理面板还会自动运行此检查,并在 “key.txt 可访问” 旁边显示缓存的绿色/红色状态。
  6. (可选)在 日志 选项卡中,使用 回填 面板提交历史主题——选择分类和日期范围,点击 预览 查看匹配的主题数量,然后点击 提交
  7. (可选)使用 手动提交 字段粘贴一次性 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 或提出功能请求,我将不胜感激。

1 个赞