IndexNow 即时收录协议实战:让搜索引擎快速收录你的新文章
引言
做个人站长的朋友应该都有过这种体验:辛辛苦苦写完一篇教程,发布之后天天刷新搜索引擎的收录情况,结果一周过去,新文章在搜索结果里还是不见踪影。搜索引擎对低权重小站的抓取频率本来就不高,新内容经常要等上几天甚至几周才会被收录,文章的起步流量就这样被白白耽误了。其实除了老老实实提交 Sitemap、被动等待爬虫上门之外,还有一条主动推送的"快车道",那就是 IndexNow 即时收录协议。这篇文章把 IndexNow 的原理、配置步骤和实际效果一次讲清楚,照着做就能让你网站的新文章在几分钟内被多家搜索引擎抓取。
一、IndexNow 到底是什么
IndexNow 是一个开放的内容收录协议,由微软必应等搜索引擎厂商联合发起并推动,目标是解决"新内容收录太慢"这个困扰了内容创作者多年的老问题。它的核心思路非常简单:网站主动告诉搜索引擎"我刚刚发布了哪些新页面",搜索引擎收到通知之后,就会把这些地址放进优先抓取队列,优先安排爬虫上门,从而把收录周期从几天甚至几周缩短到几分钟到几小时。
目前支持 IndexNow 协议的搜索引擎包括必应、Yandex、Seznam 等多家。对中文站点来说,必应的意义最大,毕竟微软必应拥有不小的中文市场份额,而且它的爬虫对 IndexNow 通知的响应非常及时。这里必须说明两个容易误解的点:第一,Google 并没有采用 IndexNow,它仍然主要依靠 Sitemap 和自家的抓取调度系统来决定何时来抓你的新页面;第二,百度同样不认 IndexNow,百度站长要走的是百度搜索资源平台里的主动推送接口。所以 IndexNow 的正确用法是把它当作 Sitemap 之外的加速补充,而不是唯一的收录手段,几种方式配合使用效果才最好。
二、IndexNow 的工作原理
IndexNow 的整个工作流程可以拆成三步:
- 网站在自己的域名下放置一个密钥文件,相当于向搜索引擎出示"我是这个网站的站长"的身份证明;
- 网站程序在发布新页面之后,把页面地址连同密钥一起提交到 IndexNow 的 API 接口;
- 参与协议的搜索引擎收到通知后,将对应的 URL 加入高优先级抓取队列,在很短时间内安排爬虫抓取。
整个过程是网站主动推送,而不是被动等待爬虫来逛,所以速度上有着质的差别。而且一次提交是同时通知所有参与协议的搜索引擎,不需要为每家搜索引擎单独配置一遍,这是它比各家私有推送接口更省事的地方。
三、第一步:生成并部署站点密钥
密钥本质上就是一段 8 到 128 位的字符串,只允许使用字母、数字和连字符。最简单可靠的办法是用 UUID 生成器生成一段随机字符串,例如:
7f3a9c1e-5b2d-4e8f-9a6c-1d2e3f4a5b6c生成之后,把这串字符原样写入一个文本文件,文件命名为"密钥.txt",也就是 7f3a9c1e-5b2d-4e8f-9a6c-1d2e3f4a5b6c.txt,然后上传到网站根目录。上传完成后,用浏览器访问 https://你的域名/7f3a9c1e-5b2d-4e8f-9a6c-1d2e3f4a5b6c.txt,页面上显示的文本内容必须和文件名里的字符串完全一致,这一步是搜索引擎验证站点所有权的依据,马虎不得。
有两个细节特别提醒:一是密钥文件千万不要在 robots.txt 里用 Disallow 屏蔽掉,否则搜索引擎取不到密钥,提交会一直报错;二是密钥要长期保存好,如果哪天换了域名或者删了文件,记得重新生成并更新所有用到密钥的地方。
四、提交 URL 的两种方式
IndexNow 支持两种提交方式:GET 方式适合提交单条 URL,POST 方式适合批量提交。先看单条提交,把 url 参数做 URL 编码后拼在请求里:
curl -s "https://api.indexnow.org/indexnow?url=https%3A%2F%2Fwww.zz1984.com%2F1043.html&key=7f3a9c1e-5b2d-4e8f-9a6c-1d2e3f4a5b6c"返回 HTTP 200 或 202 就表示提交成功,搜索引擎已经收到通知。再看批量提交,使用 JSON 格式的 POST 请求,适合网站程序在发布文章后自动调用:
curl -s -X POST "https://api.indexnow.org/indexnow" \
-H "Content-Type: application/json; charset=utf-8" \
-d '{
"host": "www.zz1984.com",
"key": "7f3a9c1e-5b2d-4e8f-9a6c-1d2e3f4a5b6c",
"keyLocation": "https://www.zz1984.com/7f3a9c1e-5b2d-4e8f-9a6c-1d2e3f4a5b6c.txt",
"urlList": [
"https://www.zz1984.com/1043.html",
"https://www.zz1984.com/1044.html"
]
}'批量提交有几个硬性要求:urlList 里的所有地址必须属于同一个域名,host 字段要填不带协议的主机名,keyLocation 填密钥文件的可访问地址。每次批量提交的数量上限非常宽裕,个人站长的使用规模远远到不了上限,正常用就行。需要说明的是,上面用的都是官方统一接口 api.indexnow.org,必应也提供了自己的提交入口,效果没有差别,统一走官方接口即可。
五、与必应站长工具配合使用
如果你已经在 Bing Webmaster Tools 里验证过网站所有权,并且提交过 Sitemap,那么恭喜你,其实必应会自动读取你 Sitemap 里的新地址并触发 IndexNow 提交,大部分情况下不需要你再手动操作。必应的逻辑是:定期检查已提交的 Sitemap,一旦发现新增的 URL,就自动向 IndexNow 推送一遍,这相当于给你加了一道自动保险。
如果希望手动补推某几条重要页面,可以打开必应站长工具的网址提交页面,或者直接访问必应提供的提交入口,把刚才 curl 命令里的接口地址换成必应的地址即可,参数格式完全一样。手动提交适合的场景是:网站刚刚上线、Sitemap 还没被必应完整读取,或者某篇文章希望立刻被收录抢首发时间。
六、让网站程序自动提交新文章
对个人站长来说,每次发完文章都手动执行一次 curl 显然不现实,正确的做法是把提交逻辑写进网站的发布流程里,让程序在文章发布的那一刻自动完成推送。WordPress 用户最简单,直接在插件市场安装 IndexNow 官方插件或者必应站长工具插件,开启之后每发一篇文章都会自动提交。Typecho 用户或者其他自研程序的站长,可以参考下面这段通用的 PHP 提交函数:
function indexnow_submit($urls) {
$key = '7f3a9c1e-5b2d-4e8f-9a6c-1d2e3f4a5b6c';
$host = parse_url($urls[0], PHP_URL_HOST);
$payload = json_encode(array(
'host' => $host,
'key' => $key,
'keyLocation' => 'https://' . $host . '/' . $key . '.txt',
'urlList' => $urls,
));
$ch = curl_init('https://api.indexnow.org/indexnow');
curl_setopt_array($ch, array(
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => array('Content-Type: application/json; charset=utf-8'),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
));
$resp = curl_exec($ch);
curl_close($ch);
return $resp;
}以 Typecho 为例,在插件里监听文章发布动作,等文章真正落库、永久链接可以正常访问之后,把新文章的地址收集成数组调用上面的函数即可。这里有一个很重要的顺序问题:一定要在文章发布完成、页面能访问之后再提交,如果提交时页面还打不开,搜索引擎的爬虫来了也会扑个空,白白浪费一次宝贵的抓取机会。另外建议把提交结果记入日志,方便日后排查。
七、如何验证提交是否生效
提交之后怎么知道搜索引擎到底来没来?有三个办法:
- 看接口返回码:返回 200 或 202 说明提交被接受,403 说明密钥校验失败,422 说明 URL 与域名或密钥不匹配,需要逐一排查;
- 看服务器访问日志:提交后的一两个小时内,观察 Nginx 或 Apache 访问日志里是否出现 bingbot、YandexBot 等爬虫的抓取记录,抓到了就说明通知生效了;
- 看必应站长工具的报告:在 Bing Webmaster Tools 的 URL 提交页面里,能看到每条地址的抓取状态,是已抓取、等待抓取还是抓取失败,一目了然。
按照我自己的实测经验,新文章通过 IndexNow 提交后,必应通常在一小时内就会来抓取,快的时候几分钟就完成抓取,收录速度相比被动等待提升了几个数量级。
八、结语
最后总结一下:IndexNow 不是万能药,Google 不认它,百度要走自己的推送通道,但它是个人站长手里性价比极高的一件收录加速工具。把密钥文件部署好、把自动提交代码接进发布流程,再配合定时更新的 Sitemap,新文章的收录速度就能得到肉眼可见的提升。对草根站长来说,流量本来就要靠一篇篇文章攒出来,让每篇新文章尽快被搜索引擎收录,就是给未来的自己积累流量资本。建议今天就去部署,十几分钟的事,换来的是长期的内容收录加速度。