为什么Discourse不支持IndexNow?

在审查了 IndexNow 功能后,我同意这应该是核心功能/插件之一。我也明白开发资源有限。

以下是我对协助核心团队所需的插件的看法。请随时添加其他评论。

假设:

  1. IndexNow 插件将使用计划时间模型的批量通知 - 请参阅设计注意事项 #1
  2. 批量通知将按时间间隔设置
  3. 通知将仅使用公共主题
  4. 启用插件后,通知将仅针对新/已更改/已删除的主题。
  5. 插件不会追溯通知历史更改/事件。

用户说明:

  1. 在您选择的 IndexNow 搜索引擎上注册。
    • 获取您的 API 密钥
    • 获取搜索引擎端点 URL
  2. 安装插件
  3. 设置管理员

用例 - 管理员设置

  1. 允许用户打开/关闭自动提交功能
  2. 允许用户输入 IndexNow 搜索引擎端点。请参阅设计注意事项 #3。
    • 输入字段为文本参数
    • 输入字段必须是有效 URL
    • 默认为 Bing URL https://www.bing.com/indexnow
  3. 允许用户输入并存储 API 密钥
    • 用于存储 API 密钥的输入字符串字段
    • 输入字段为字母数字
    • 默认值为“”
  4. 允许用户为批量通知定义计划时间参数
    • 时间参数将按小时间隔设置
    • 用于存储小时值的输入字符串
    • 有效输入将是整数
    • 有效输入范围可以从 1 到 24
    • 默认值为 12

用例 - 文本密钥文件

  1. 系统将生成一个名为 indexnowkey.txt 的文件
  2. 密钥文件必须存储在根目录下。
  3. 系统将用 API 密钥填充文件
  4. 任何远程用户/系统都可以通过 http/https 访问该文件

用例 - 批量通知流程调度

  1. 系统将根据管理员设置中定义的设置按间隔安排作业进行处理。
  2. 间隔值定义作业之间的小时延迟。例如,输入值为 2 表示作业应每 2 小时运行一次。值为 4 表示作业应每 4 小时运行一次。值为 24 表示作业应每天运行一次。

用例 - 批量通知流程

  1. 系统将通过管理员设置中定义的站点设置确定通知流程是否已激活。
  2. 系统将确定站点设置中的 API 密钥是否有效 - 不为空。
  3. 系统将根据定义的间隔设置创建一个主题列表。请参阅设计注意事项 #2 关于查询时间范围。包含的主题参数为:
    • 主题必须仅限公开查看
    • 新主题
    • 有新帖的主题
    • 已编辑帖子的主题
    • 已删除的主题
    • 主题列表必须不重复 - 无重复项
  4. 系统将使用以下格式创建 JSON 数据包。
{
  "host": "current_site",
  "key": "api_key",
  "keyLocation": "https://current_site/indexnowkey.txt",
  "urlList": [
      "https://www.example.com/url1",
      "https://www.example.com/folder/url2",
      "https://www.example.com/url3"
      ]
}
  1. JSON 数据包将发送到以下位置
    • URL:sitesettings.search_engine_indexnow_endpoint
  2. JSON 数据包将使用以下标头发送
    • Content-Type: application/json; charset=utf-8
    • Http/1.1
    • Host: bing
  3. 验证 HTTP 请求的提交收据
    • http 200 - 提交成功 - 结束流程
    • Http 429 - 提交尝试次数过多 - 向管理员发送通知以增加间隔时间

设计注意事项:

  1. 批量通知与单次通知 — 单次通知对于小型域来说是可以接受的,但对于大型论坛来说,为每个新/更新的帖子添加通知可能会产生许多事件流程。从搜索引擎索引性能的角度来看,每小时一次的批量通知对于 80% 的论坛来说是可以接受的。
  2. 批量通知查询时间 — SideKiq 控制间隔时间。如果 SideKiq 处于繁重处理状态,批量通知流程可能会延迟。如果查询时间范围等于调度间隔,批量通知流程可能会错过新/更新的主题。时间参数是否应扩展查询以涵盖延迟的流程?或者是否可以将调度程序传递已启动的时间戳以控制查询时间间隔?或者我们需要为已提交的主题创建数据库表/值(带时间戳)?
  3. 我们是否应该构建一个包含每个搜索引擎和定义的 IndexNow URL 端点的内部表?用户可以从下拉菜单中选择选项,而不是输入 URL。这消除了潜在的人为错误。

缺少什么?您会添加什么?