官网完成了百度搜索资源平台的站点验证、主动推送接口接入与 sitemap 提交,同时上线了百度统计。
这件事本身不大。写出来是因为过程中遇到的三个问题有一个共同点:它们都不报错,只是不生效。而这正是我们帮客户找的那一类问题,自己踩到了没有理由不说。
坑一:www 和非 www 是两个站点
平台把带 www 和不带 www 的域名当作两个独立的站点属性。
我们站点的 canonical、sitemap 和多语言标注全部使用不带 www 的形式,但最初在平台里验证的是带 www 的那个。结果是用不带 www 的形式调推送接口返回鉴权失败,而换成带 www 的形式推送又与 sitemap 里的地址对不上,两边都不成立。
解决办法是在平台里补充验证不带 www 这个形式,与站点自身声明的主机保持一致。
这一点应当在添加站点时就确认,而不是等推送失败再回头改。更一般的做法是先把主机形式与尾斜杠定成一个口径,然后让 canonical、多语言标注、sitemap、站内链接四处统一引用它。四处口径一致之后,这类问题不会出现。
坑二:主动推送超额是整批拒绝
我们的站点有两百多个页面。主动推送按当日配额限制,而且超额不是部分接收,是整批拒绝。剩余配额九条时提交十条,返回超限,一条都不收。
所以推送脚本的正确做法是:先用一个地址探出剩余配额,再按剩余量推满。全量覆盖应当走 sitemap 渠道,它的配额与主动推送分开计算。
还有一个实现细节值得提。最初脚本里用了 curl 的失败即退出选项,结果是接口返回的错误说明被丢掉了,只剩一个退出码。排查时看不到对方到底说了什么。去掉那个选项、把响应体打出来之后,问题几分钟就定位了。
| 提交方式 | 适用对象 | 配额 | 超额行为 |
|---|---|---|---|
| 主动推送 | 新发布的增量地址 | 每日有限 | 整批拒绝 |
| sitemap 提交 | 存量页面全量 | 与推送分开计算 | 按抓取节奏处理 |
| 手动提交 | 零散的单个地址 | 有限 | 逐条反馈 |
一个顺带发现的问题:有页面不在 sitemap 里
核对提交范围时发现一件事:有一个页面能正常访问,却不在 sitemap 里。
查下去原因是正当的。那一页是一个已下线栏目留下的跳转桩,内容拆到了另外两页,桩页本身标了不收录并把 canonical 指向新页面,所以构建时被从 sitemap 里摘掉了。逻辑没问题。
但它提醒了一件事:sitemap 里的地址数和站点实际能访问的地址数不相等,而且差额可以来自好几种原因。标了不收录的桩页、分页列表的后续页、按参数生成的变体地址,都可能在其中一侧而不在另一侧。
所以核对提交覆盖率时,分母要取 sitemap 里的地址数,而不是站点的页面总数。用后者做分母会得到一个永远不到百分之百的覆盖率,然后花时间去找那些本来就不该被提交的地址。
我们站点的 sitemap 里共有两百多个地址,其中中文页面一百五十多个,其余是英文版本。推送与提交工作的实际分母是这个数,而不是站点能访问的地址总数。
多语言站点要多核一项
这一项不属于前面三个坑,但在同一次接入里一起处理了,值得提一句。
站点有中文和英文两套页面。每个语种的页面要指向该语种真实存在的对应页面,并且互相指回。常见的错误是把所有语种都指向中文首页,这等于告诉机器这些页面之间没有对应关系。
更隐蔽的一种错误是只有一侧指过去。中文页指向了英文页,英文页没有指回来,这种单向声明在不同引擎那里的处理方式不一致。
核对方式很直接:取几个页面的服务端返回源码,看多语言标注的条目是否成对、地址是否真实可访问。这里有一个容易出现的情形值得专门查一遍,就是某个语种的页面尚未发布而标注已经写上去了,指向一个还不存在的地址。这类错误在后台报告里会体现为抓取异常,但不会有人主动提示。
坑三:统计代码要输出字面量
统计后台的代码检查是抓取 HTML 源码寻找完整的脚本地址字符串。
我们最初把统计标识作为变量拼接进脚本地址,浏览器里统计工作正常,数据也在上报,后台却一直报未检测到代码。两边表现不一致,不查源码完全看不出问题。改成输出完整字面量后即正常。
这个坑的普遍性比前两个高,因为现在多数站点是用构建工具生成的,把配置项提取成变量是很自然的写法。
我们后来把这件事写进了构建检查:产物里 grep 不到那个完整字符串就直接让构建失败。这类检查的价值在于它拦住的是静默失效,而静默失效靠人工测试基本发现不了。
为什么把这些写出来
这三个问题的共同点是不报错。页面在浏览器里打开一切正常,脚本在控制台里没有报错,接口返回的也不是异常状态,只是结果不符合预期。
这类问题在 GEO 里出现得更多,因为那条链路上几乎没有回执。没有地方可以登记让模型收录自己的页面,也没有后台能查到材料有没有进入某次回答的候选范围。能做的只有把每一个可验证的环节都验证一遍。
HTTP Archive 的 2024 年统计里有两个数字可以作为参照:8.43% 的桌面页面没有通过 robots.txt 有效性检查,而含有自己写的摘要的桌面页面只占 66.7%。也就是说三分之一的页面连一句摘要都没有,摘要由引擎自行截取。这类问题同样不报错。
接下来要做的
百度这一侧的工作还没完。索引量与抓取频次要连续观察几周,才能判断提交是否真的转化成收录。这件事不能靠推送接口的返回码判断,返回成功只说明地址被接收。
抓取器放行的具体规则怎么写、各家的标识是什么、放行与屏蔽该怎么取舍,写在爬虫放行那一页。想拿到自己站点这几项的逐项实测结果,走官网 AI 可读性体检,报告里每一项都附源码片段或日志记录作为证据。