你一小时前更新了定价页,可 ChatGPT 报出来的还是上个月的数字。问题出在抓取延迟:搜索引擎按自己的节奏发现改动,有时要等好几天。IndexNow 就是用来消掉这段延迟的——页面一变,你就主动推一条通知,让 Bing 和 Yandex 在几分钟内重新抓取,而不是几天。由于 Bing 的索引正是 ChatGPT 网页浏览和 Microsoft Copilot 的数据来源,更快的索引会直接影响你的品牌在 AI 回答里显得有多新。
本文带你走完整套流程:生成密钥、托管密钥文件、用 GET 和 POST 提交 URL、在发布时自动提交,以及验证它是否真的生效。
核心要点
- IndexNow 是一个开放协议,Microsoft Bing 与 Yandex 支持它;一次提交就通知所有参与引擎,Cloudflare 等平台还能代你提交。 - 它对 GEO 有意义,是因为 Bing 索引支撑着 ChatGPT 网页浏览和 Microsoft Copilot,把新页面快速送进 Bing,就更可能被 AI 用当前信息引用。 - 配置分三步:生成密钥(十六进制,8–128 位),托管到 `https://yourdomain.com/<key>.txt`,再把 URL 提交到 `https://api.indexnow.org/indexnow`。 - IndexNow 通知的是 Bing 和 Yandex,不是 Google;它加快抓取,但不保证被索引,更不保证立刻出现在任何 AI 回答里。 - 真正的价值在于把「每次发布或更新即提交」自动化,再用 Bing Webmaster Tools 验证。
步骤 1:生成 IndexNow 密钥
密钥是一段共享密文,用来证明网站归你所有。它必须是十六进制字符串(`a`–`f` 和 `0`–`9`),长度在 8 到 128 位之间。
用命令行生成:
- macOS 或 Linux:`openssl rand -hex 16` - 用 Node:`node -e "console.log(require('crypto').randomBytes(16).toString('hex'))"`
你也可以用 Bing Webmaster Tools 里的密钥生成器,它会帮你创建并注册。把值保存好,后面到处都要用。一个典型密钥长这样:`a1b2c3d4e5f60718293a4b5c6d7e8f90`。
步骤 2:托管密钥文件
搜索引擎通过抓取一个以密钥命名的文本文件来验证所有权。创建一个名为 `<你的密钥>.txt` 的文件,文件内容就是密钥本身,放到网站根目录:
- 文件名:`a1b2c3d4e5f60718293a4b5c6d7e8f90.txt` - 内容:`a1b2c3d4e5f60718293a4b5c6d7e8f90` - 位置:`https://yourdomain.com/a1b2c3d4e5f60718293a4b5c6d7e8f90.txt`
继续之前先确认它可以公开访问:
`curl https://yourdomain.com/a1b2c3d4e5f60718293a4b5c6d7e8f90.txt`
返回的正文必须恰好是密钥,状态码 `200`,类型 `text/plain`。如果愿意,你也可以把密钥托管在域名的其他路径下,再在 POST 载荷里用 `keyLocation` 指向它,不过放根目录最省事。
步骤 3:用 GET 提交单个 URL
最快的测试方式是发一个 GET 请求,把域名和密钥换成你自己的:
`curl "https://api.indexnow.org/indexnow?url=https://yourdomain.com/blog/new-pricing&key=a1b2c3d4e5f60718293a4b5c6d7e8f90"`
返回 `200` 或 `202` 就表示提交被接受。GET 适合临时单发——比如刚发完一篇文章顺手推一下——但一次只能带一个 URL。
步骤 4:用 POST 批量提交
批量更新时,向同一个端点发一个带 JSON 正文的 POST。这也是接进构建流程或 CMS 的方式。
`curl -X POST "https://api.indexnow.org/indexnow" -H "Content-Type: application/json" -d '{ "host": "yourdomain.com", "key": "a1b2c3d4e5f60718293a4b5c6d7e8f90", "keyLocation": "https://yourdomain.com/a1b2c3d4e5f60718293a4b5c6d7e8f90.txt", "urlList": [ "https://yourdomain.com/blog/new-pricing", "https://yourdomain.com/products/flagship", "https://yourdomain.com/about" ] }'`
`urlList` 里的每个 URL 都必须属于你声明的 `host`——没验证过的域名不能替它提交。批量控制在合理范围内(协议规定每次请求最多 10,000 个 URL),而且只提交真正变动过的页面。
步骤 5:在发布和更新时自动提交
手动 ping 撑不起规模。目标是每次发布或有意义的编辑都自动触发一次提交。
- CMS webhook:在「文章已发布」或「文章已更新」事件上触发一个小的无服务器函数,把变动的 URL POST 到 `https://api.indexnow.org/indexnow`。 - Cloudflare:在 Cloudflare 控制台启用 IndexNow 集成,让 Cloudflare 依据你的站点地图和抓取信号代你提交——你这边完全不用碰密钥。 - Shopify:用一个应用或在 `products/update`、`articles/update` 上挂 webhook,提交受影响的商品页和博客 URL。 - 静态站点:在 CI 流水线里加一个部署钩子,从构建结果读出变动路径,部署后提交。


