9 月 28 号早上 8 点,我第 3 次把 sitemap 提交到百度搜索资源平台。前两次都显示"提交成功",但我用 site:zq.kuailexue.com.cn 查收录时,显示 0 条。我当时第一反应是百度又抽风了。后来仔细看了一遍文件,发现是我自己写的 sitemap 有问题。

网上讲 sitemap 的文章,大部分停在"如何生成"这一步。生成完之后提交、收录、排查的细节很少讲。我把这三周的踩坑过程写下来。

第一个坑:相对路径。

我 sitemap 里混了几条这样的:<loc>/blog/hello-world</loc>。这种写法浏览器打开没问题,因为浏览器会自动补上域名。但百度爬虫拿到 /blog/hello-world 会当无效路径跳过。正确写法必须带完整域名 https://zq.kuailexue.com.cn/blog/hello-world。我看了三遍才发现。第一次检查的时候眼睛都扫过去了,以为 Next.js 自动生成的应该是完整的。结果是我早期手写了 3 条 URL,混在里面。

第二个坑:robots.txt 没同步。

我的 robots.txt 一开始就写好了,里面有一行 Sitemap: https://zq.kuailexue.com.cn/sitemap.xml。但 9 月中旬我改过一次 URL 结构,把 /tools/xxx 从带下划线改成了带短横线。改完之后忘了同步 robots.txt 里的地址。Google 那边一般会自己推测,百度不会。这种情况排查起来很绕,因为百度搜索资源平台的抓取诊断工具会显示已提交,但实际爬虫读取的是旧地址。

第三个坑:API 每天只能推 10 条。

这个坑最隐蔽。我一开始以为提交 sitemap 就等于整站提交。后来才知道百度是把 sitemap 当作发现新 URL 的线索,真正收录还是要走它自己的队列。整站 191 条 URL,如果只靠 sitemap 触发,按它的抓取节奏可能要好几周。百度搜索资源平台有单独的普通收录 API,每天配额 10 条。9 月 28 号我配好之后,从 191 条里按优先级取出 10 条推过去,返回 success: 10。我在服务器上加了 cron,每天凌晨 3 点自动跑一次。10 月 6 号我查了一下,site: 收录从 0 涨到了 7 条。一周 7 条,速度不算快,但至少动了。

怎么排查同类问题。

如果你也遇到 sitemap 提交后不收录,按这个顺序检查。第一,访问 https://你的域名/sitemap.xml,看每条 loc 是不是完整 URL。第二,访问 https://你的域名/robots.txt,看有没有 Sitemap 开头的那一行。第三,到百度搜索资源平台用抓取诊断,让它实时抓一次 sitemap 看返回什么。第四,申请普通收录 API 的 token,配 cron 每天主动推 10 条。第五,一周后用 site:你的域名 查收录数。

我现在每周一早上固定跑一次 site: 查询,跟上周对比。收录数不涨就是有问题的信号,得重新排查。