官网完成了百度搜索资源平台的站点验证、主动推送接口接入与 sitemap 提交,同时上线了百度统计。

这件事本身不大。写出来是因为过程中遇到的三个问题有一个共同点:它们都不报错,只是不生效。而这正是我们帮客户找的那一类问题,自己踩到了没有理由不说。

坑一:www 和非 www 是两个站点

平台把带 www 和不带 www 的域名当作两个独立的站点属性。

我们站点的 canonical、sitemap 和多语言标注全部使用不带 www 的形式,但最初在平台里验证的是带 www 的那个。结果是用不带 www 的形式调推送接口返回鉴权失败,而换成带 www 的形式推送又与 sitemap 里的地址对不上,两边都不成立。

解决办法是在平台里补充验证不带 www 这个形式,与站点自身声明的主机保持一致。

这一点应当在添加站点时就确认,而不是等推送失败再回头改。更一般的做法是先把主机形式与尾斜杠定成一个口径,然后让 canonical、多语言标注、sitemap、站内链接四处统一引用它。四处口径一致之后,这类问题不会出现。

坑二:主动推送超额是整批拒绝

我们的站点有两百多个页面。主动推送按当日配额限制,而且超额不是部分接收,是整批拒绝。剩余配额九条时提交十条,返回超限,一条都不收。

8.43%未通过 robots.txt 有效性检查的桌面页面比例Web Almanac 2024
10.6%页面头部存在无效 HTML 元素的桌面页面比例Web Almanac 2024
66.7%2024 年含 meta description 的桌面页面比例Web Almanac 2024

所以推送脚本的正确做法是:先用一个地址探出剩余配额,再按剩余量推满。全量覆盖应当走 sitemap 渠道,它的配额与主动推送分开计算。

还有一个实现细节值得提。最初脚本里用了 curl 的失败即退出选项,结果是接口返回的错误说明被丢掉了,只剩一个退出码。排查时看不到对方到底说了什么。去掉那个选项、把响应体打出来之后,问题几分钟就定位了。

提交方式适用对象配额超额行为
主动推送新发布的增量地址每日有限整批拒绝
sitemap 提交存量页面全量与推送分开计算按抓取节奏处理
手动提交零散的单个地址有限逐条反馈

一个顺带发现的问题:有页面不在 sitemap 里

核对提交范围时发现一件事:有一个页面能正常访问,却不在 sitemap 里。

查下去原因是正当的。那一页是一个已下线栏目留下的跳转桩,内容拆到了另外两页,桩页本身标了不收录并把 canonical 指向新页面,所以构建时被从 sitemap 里摘掉了。逻辑没问题。

但它提醒了一件事:sitemap 里的地址数和站点实际能访问的地址数不相等,而且差额可以来自好几种原因。标了不收录的桩页、分页列表的后续页、按参数生成的变体地址,都可能在其中一侧而不在另一侧。

所以核对提交覆盖率时,分母要取 sitemap 里的地址数,而不是站点的页面总数。用后者做分母会得到一个永远不到百分之百的覆盖率,然后花时间去找那些本来就不该被提交的地址。

我们站点的 sitemap 里共有两百多个地址,其中中文页面一百五十多个,其余是英文版本。推送与提交工作的实际分母是这个数,而不是站点能访问的地址总数。

多语言站点要多核一项

这一项不属于前面三个坑,但在同一次接入里一起处理了,值得提一句。

站点有中文和英文两套页面。每个语种的页面要指向该语种真实存在的对应页面,并且互相指回。常见的错误是把所有语种都指向中文首页,这等于告诉机器这些页面之间没有对应关系。

更隐蔽的一种错误是只有一侧指过去。中文页指向了英文页,英文页没有指回来,这种单向声明在不同引擎那里的处理方式不一致。

核对方式很直接:取几个页面的服务端返回源码,看多语言标注的条目是否成对、地址是否真实可访问。这里有一个容易出现的情形值得专门查一遍,就是某个语种的页面尚未发布而标注已经写上去了,指向一个还不存在的地址。这类错误在后台报告里会体现为抓取异常,但不会有人主动提示。

坑三:统计代码要输出字面量

统计后台的代码检查是抓取 HTML 源码寻找完整的脚本地址字符串。

我们最初把统计标识作为变量拼接进脚本地址,浏览器里统计工作正常,数据也在上报,后台却一直报未检测到代码。两边表现不一致,不查源码完全看不出问题。改成输出完整字面量后即正常。

这个坑的普遍性比前两个高,因为现在多数站点是用构建工具生成的,把配置项提取成变量是很自然的写法。

我们后来把这件事写进了构建检查:产物里 grep 不到那个完整字符串就直接让构建失败。这类检查的价值在于它拦住的是静默失效,而静默失效靠人工测试基本发现不了。

为什么把这些写出来

这三个问题的共同点是不报错。页面在浏览器里打开一切正常,脚本在控制台里没有报错,接口返回的也不是异常状态,只是结果不符合预期。

这类问题在 GEO 里出现得更多,因为那条链路上几乎没有回执。没有地方可以登记让模型收录自己的页面,也没有后台能查到材料有没有进入某次回答的候选范围。能做的只有把每一个可验证的环节都验证一遍。

HTTP Archive 的 2024 年统计里有两个数字可以作为参照:8.43% 的桌面页面没有通过 robots.txt 有效性检查,而含有自己写的摘要的桌面页面只占 66.7%。也就是说三分之一的页面连一句摘要都没有,摘要由引擎自行截取。这类问题同样不报错。

接下来要做的

百度这一侧的工作还没完。索引量与抓取频次要连续观察几周,才能判断提交是否真的转化成收录。这件事不能靠推送接口的返回码判断,返回成功只说明地址被接收。

抓取器放行的具体规则怎么写、各家的标识是什么、放行与屏蔽该怎么取舍,写在爬虫放行那一页。想拿到自己站点这几项的逐项实测结果,走官网 AI 可读性体检,报告里每一项都附源码片段或日志记录作为证据。

参考来源