概述
运营个人博客或技术站点时,最让人焦虑的场景之一莫过于:文章写完了、发布上线了,但搜索引擎就是迟迟不来收录。
传统爬虫的工作方式是"主动发现+定期回访"——搜索引擎的爬虫根据链接关系(外链、站点地图)找到你的页面,然后按照自己的节奏重新抓取。这个过程短则数小时,长则数周,完全不受你控制。如果你的网站更新频率不高、外部权重较低,等待时间会更长。
IndexNow 协议的出现改变了这个局面。 它是一个开放协议,允许网站在内容发生变更(新增、修改或删除)时,主动向参与的搜索引擎推送通知。换句话说:你不必再等爬虫来找你,而是直接告诉搜索引擎"我更新了,快来抓"。
目前,Bing、Yandex、Seznam、Naver、IndexNow.org 等搜索引擎和平台已支持 IndexNow 协议。更关键的是,一次提交即可同步推送给所有支持该协议的搜索引擎,无需逐个注册。
本文将围绕以下三种落地方式展开:
- Cloudflare 自带功能 —— 零代码,一键开启
- Bing IndexNow API 手动提交 —— 灵活可控,适合自定义站点
- Next.js 项目自动集成 —— 构建即通知,全自动化
下面我们从真实需求出发,逐步拆解每一种方案的原理、步骤和注意事项。
我的需求
先聊聊我为什么要折腾 IndexNow。
我运营了一个基于 Next.js 的个人技术博客,内容以编程教程、工具分享和架构思考为主。理想状态下,我希望每发布一篇新文章,搜索引擎能在 几分钟到几小时内 收录,而不是苦等数天。
但在实际运营中,我遇到了以下痛点:
- 站点权重低,新站或小站很难获得爬虫的频繁回访
- 更新频率不固定,有时一天发几篇,有时一两周才更新一次,搜索引擎难以建立稳定的抓取节奏
- 修改旧文章(修正错别字、补充内容)后,搜索引擎往往不知道内容已有变化
- 删除失效页面(如废弃的 demo 页)后,旧 URL 仍然长时间出现在搜索结果中,影响用户体验
IndexNow 正好能解决这些问题:无论新增还是修改,只要我在发布时发送一次通知,搜索引擎就会将其加入抓取队列,优先处理。下面开始逐一实践。
1. Cloudflare 自带功能 — 一键开启 Crawler Hints
如果你在用 Cloudflare 做 DNS 或 CDN,这是 最省事、零成本 的方案。
什么是 Crawler Hints
Crawler Hints(爬虫提示)是 Cloudflare 提供的一项免费功能。它利用 Cloudflare 在全球网络中的流量数据,当检测到你的源站内容发生变更时(例如新页面发布、缓存刷新),自动向支持 IndexNow 的搜索引擎发送通知。
简单来说:你刷新 Cloudflare 缓存 = 自动通知搜索引擎。
开启步骤
- 登录 Cloudflare Dashboard,进入你的域名管理页面
- 左侧导航栏找到 Speed → Optimization
- 滚动到 Crawler Hints 板块
- 将开关切换为 On

优点
- 零配置:打开开关即生效,无需写代码、无需生成 API Key
- 自动感知:Cloudflare 会根据缓存清除、页面变化等事件自动触发
- 支持多个搜索引擎:一次通知同时推送 Bing、Yandex 等
缺点
- 依赖 Cloudflare:没在用 Cloudflare 的话方案不适用
- 被动触发:你无法手动指定具体 URL,只能靠 Cloudflare 判断
- 可见性较差:没有明确的日志告诉你"已通知哪些搜索引擎、哪些 URL"
适用场景
- 已经使用 Cloudflare 的站点
- 不想折腾代码的博主
- 更新频率中等,不需要精细控制
2. 自定义配置文件 — 手动调用 Bing IndexNow API
如果你希望 完全掌控提交的时机和内容,或者站点没有使用 Cloudflare,直接调用 IndexNow API 是最灵活的方式。
原理与流程
IndexNow 的核心流程非常简洁:
- 生成一个 Key(一段唯一的字符串,类似 API Token)
- 将 Key 文件托管到你的网站根目录,用于验证你对域名的所有权
- 构造 API 请求:将需要通知的 URL(或 URL 列表)发送到 IndexNow 的 API 端点
- 搜索引擎收到通知后,会将该 URL 加入优先抓取队列
步骤详解
第一步:在 Bing Webmaster Tools 中生成 API Key
- 访问 Bing Webmaster Tools 并登录(可用 Microsoft 账号)
- 添加你的网站并完成所有权验证(推荐 DNS TXT 记录方式,长期有效)
- 进入该站点的设置页面,找到 IndexNow 或 API Key 选项
- 点击生成 Key,复制保存(建议记下备用,刷新后旧 Key 会失效)
第二步:创建并托管密钥文件
IndexNow 要求将 Key 以明文文件形式放在域名根目录下,用于身份验证:
你的域名.com/你的key.txt
文件内容就是 Key 本身,不含换行或多余字符。
操作方法:
- 如果使用静态站点(如 Nginx、Apache),直接将文件放到网站根目录
- 如果使用 Next.js,将文件放在
public/目录下 - 如果使用 Cloudflare Pages,将文件放在项目根目录,构建时会被自动复制到输出目录
验证: 在浏览器访问 https://你的域名/你的key.txt,确认能直接看到 Key 字符串。
第三步:提交 URL 更新
IndexNow 提供 两种提交方式:
方式 A:直接调用 API(灵活但需编程)
API 端点(任选其一即可,所有参与搜索引擎共享):
https://api.indexnow.org/indexnow
https://www.bing.com/indexnow
https://indexnow.yandex.com/indexnow
提交单条 URL:
GET /indexnow?url=https://example.com/blog/my-new-post&key=你的key HTTP/1.1
Host: api.indexnow.org
批量提交(最多 10,000 条):
POST /indexnow HTTP/1.1
Host: api.indexnow.org
Content-Type: application/json{"host": "example.com","key": "你的key","keyLocation": "https://example.com/你的key.txt","urlList": ["https://example.com/blog/post-1","https://example.com/blog/post-2"]
}
关键字段说明:
host:要提交的域名(不含https://)key:上一步生成的 API KeykeyLocation:托管 Key 文件的完整 URL(可选,但推荐提供,搜索引擎会更信任)urlList:需要通知的 URL 列表,最多 10,000 条
用 curl 示例:
curl -X POST "https://api.indexnow.org/indexnow" \-H "Content-Type: application/json" \-d '{"host": "www.example.com","key": "你的key","urlList": ["https://www.example.com/blog/my-new-article"]}'
用 Python 简单脚本:
import requestsurl = "https://api.indexnow.org/indexnow"
payload = {"host": "www.example.com","key": "你的key","urlList": ["https://www.example.com/blog/my-new-article"]
}
response = requests.post(url, json=payload)
print(response.status_code) # 200 表示成功
方式 B:利用平台/框架插件(更省心)
许多 CMS 和框架已有现成插件,无需手写请求:
| 平台 | 插件 / 扩展 |
|---|---|
| WordPress | IndexNow plugin by Microsoft |
| Hugo | indexnow-hugo-module |
| Jekyll | jekyll-indexnow |
| Hexo | hexo-indexnow |
| 通用 | 可写 GitHub Action 定时提交 sitemap |
在 Bing Webmaster Tools 中提交成功后,你可以在 IndexNow 管理页面看到提交记录与状态:

优点
- 完全可控:可以指定具体 URL,精确到单篇文章
- 跨平台:不依赖特定服务商,任何网站都能用
- 可自动化:结合 CI/CD 或 Cron 任务,实现定时批量提交
- 无需 Cloudflare:独立部署的站点同样适用
缺点
- 需要手动配置:生成 Key、托管文件、编写调用脚本
- 需要维护:Key 变更时需要更新文件
- 无自动感知:需要自己决定什么时候提交、提交哪些 URL
适用场景
- 自定义站点、静态站点生成器(Hugo、Hexo、Jekyll)
- 需要精细控制的站点
- 尚未使用 Cloudflare 的站点
官方参考
- How to add IndexNow to your website | Bing Webmaster Tools
3. Next.js 项目自动集成 — 构建即通知
对于 Next.js 博客站点,可以更进一步:每次构建时自动提取 Sitemap 中的 URL,批量提交给 IndexNow,完全无需手动干预。
原理与流程
- 在项目根目录放置 Key 文件(
public/你的key.txt) - 每次
next build生成 Sitemap - 构建完成后,自动调用
postbuild脚本 - 脚本解析 Sitemap 中的 URL,通过 IndexNow API 批量提交
这样,每次发布新文章 -> 重新构建 -> Sitemap 更新 -> IndexNow 通知,形成一个完整的自动化闭环。
步骤详解
安装工具包
推荐使用社区维护的 @vijayhardaha/next-indexnow,它封装了解析 Sitemap 和调用 API 的逻辑:
npm install @vijayhardaha/next-indexnow --save-dev
在 package.json 中添加 postbuild 脚本
{"scripts": {"build": "next build","postbuild": "npx next-indexnow --site-url https://www.your-site.com --key 你的key"}
}
配置说明
每次执行 npm run build 时:
- Next.js 先执行构建(
next build),生成静态文件和 Sitemap - 构建完成后,Next.js 自动触发
postbuild脚本 - 脚本读取 Sitemap(默认位置:
public/sitemap.xml) - 从 Sitemap 中提取所有 URL
- 调用 IndexNow API 批量提交(每次最多 10,000 条)
- 控制台输出提交结果,方便验证
手动触发(可选)
如果你不想每次构建都提交(例如仅修改了样式),也可以单独手动运行:
npx next-indexnow --site-url https://www.your-site.com --key 你的key
完整 GitHub Actions 自动化示例
如果你的站点托管在 GitHub Pages 或 Vercel,可以用 GitHub Actions 实现发布时自动提交:
name: Build and IndexNowon:push:branches: [main]jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- uses: actions/setup-node@v3with:node-version: 18- run: npm ci- run: npm run build# postbuild 脚本会自动执行 IndexNow 推送
优点
- 全自动化:构建完成后无需任何操作
- 与 Sitemap 联动:永远不会忘记通知新页面
- 适合 CI/CD 流程:与 GitHub Actions、Vercel 等完美集成
- 减少遗漏:每次部署都自动提交,避免手动忘记
缺点
- 仅限 Next.js:不适用于其他框架
- 依赖 npm 包:社区维护,需关注更新和兼容性
- 每次构建都提交:如果只是样式修改,也会触发提交(浪费但无害)
适用场景
- Next.js 静态博客(SSG 模式最佳)
- 已配置 Sitemap 的站点
- 使用 CI/CD 自动部署的站点
对比总结
| 方案 | 代码量 | 自动化程度 | 控制粒度 | 适用站点 |
|---|---|---|---|---|
| Cloudflare Crawler Hints | 零代码 | 自动(被动) | 粗粒度 | 已用 Cloudflare 的站点 |
| Bing IndexNow API 手动提交 | 低~中 | 半自动(需配置) | 精细 | 所有类型的站点 |
| Next.js 自动集成 | 低 | 全自动(构建触发) | 中粒度 | Next.js 站点 |
我的组合方案
目前我采用的是 方案 1 + 方案 3 的组合策略:
- Cloudflare Crawler Hints 作为兜底:开启后不需要维护,Cloudflare 会自动处理一部分通知
- Next.js postbuild 脚本 作为主动推送:每次构建时精确提交所有最新 URL
- 两者互补:一个被动兜底,一个主动推送,覆盖最全面
注意事项与常见问题
- Key 文件必须可公开访问:搜索引擎会主动请求验证,如果返回 404 或 403,提交会失败
- 提交频率不要过高:对于正常更新的博客,每次部署提交一次足够,没必要每分钟都发请求
- 删除操作同样需要通知:删除页面后,提交被删除的 URL,搜索引擎会尽快将其从索引中移除
- IndexNow 不保证立即收录:它只是"加急通知",最终收录与否仍取决于搜索引擎的算法和质量评估
- 200 响应不代表收录成功:API 返回 200 只表示"已收到通知",不表示"已收录",需要到 Webmaster Tools 后台查看具体状态
- 同一条 URL 重复提交无惩罚:可以放心在每次部署时提交全部 URL
结语
IndexNow 是我今年在 SEO 方面发现的"投入产出比最高"的优化手段之一——它几乎不花什么成本(部分方案甚至完全免费),但对新内容的收录速度提升非常显著。
在实施 IndexNow 之前,我的新文章平均需要 3-7 天才能被 Bing 收录;实施之后,大部分文章在 10-30 分钟内 就能出现在搜索结果中。对于 Google,虽然在移除 googlebot 后仍需依赖传统爬虫,但 Bing 的流量提升已经足以让我觉得这项投入非常值得。
如果你的站点还在苦等爬虫上门,不妨花 10 分钟试试今天介绍的任意一种方案——不管是 Cloudflare 一键开启,还是写几行脚本调用 API,都能立刻看到效果。
如果你有更好的 IndexNow 落地实践或者踩过什么坑,欢迎在评论区交流讨论。
📝 本文发布于 栏轩·阁
🌐 欢迎关注我的其他平台:
- 博客园
- 掘金
- CSDN
- GitHub
- Gitee
📧 联系我:mail@lxpavilion.top