把测试环境和线上环境做抓取对照,核心不是比较“哪边收录多”,而是控制变量后找出百度抓取结果不同的具体环节。可行做法是:先用同一路径、同一 User-Agent 分别请求两边,记录状态码、响应头、正文关键片段和 robots 规则,再逐项比对差异。只有把差异定位到某个环境变量上,才谈得上修复。
测试环境与线上环境天然存在差异,直接比较抓取结果会得出错误结论。开始前需要确认三点:
robots.txt 全站禁止抓取,这种情况下百度根本不会抓测试环境,对照没有意义。如果测试环境本身禁止抓取,正确做法不是放开它,而是用命令行或抓取工具模拟百度爬虫请求,只取原始响应做比对。放开测试环境抓取可能带来重复内容问题,需要另行评估。
最直接的对照方式是固定请求参数,分别向两个环境发起请求并保存原始响应。以下命令为示例,域名需替换为实际地址:
curl -A "Baiduspider" -s -D - https://www.example.com/page -o online.html
curl -A "Baiduspider" -s -D - https://test.example.com/page -o test.html
参数说明:-A 指定 User-Agent,-D - 把响应头输出到屏幕,-o 保存正文。两边使用完全相同的路径和 UA,才能让差异指向环境本身而非请求方式。
保存后重点比对以下检查项:
X-Robots-Tag、Content-Type、Cache-Control 是否一致。测试环境常带 noindex 头,这是常见差异来源。/robots.txt,确认 Disallow 规则和 Sitemap 指向。发现差异后不要急于下结论。同一个现象往往有多种解释,需要进一步排除:
判断方法:每次只改变一个变量,重新请求并记录结果。例如先只替换 UA,观察 403 是否消失;再只关闭 WAF 规则,观察是否恢复 200。能稳定复现的差异才算定位成功。
对照完成的验收标准是:两边在相同请求下,状态码、响应头中的抓取指令、正文关键片段三项一致,且差异项都有明确解释和归属。如果某项差异无法解释,说明还有未识别的环境变量。
下一步建议把上述请求写成固定脚本,在每次部署前后各跑一次,输出差异报告。这样测试环境与线上环境的抓取差异会在上线前暴露,而不是等百度抓取出问题后再倒查。