搜索全站
百度SEO 7 分钟阅读

百度抓取诊断工具使用技巧:模拟抓取、查看源码与异常判断

抓取诊断是百度站长最该先用的工具。本文讲清它的入口与工作方式、如何用 curl 在服务端复现抓取、如何判读返回的 HTTP 码与源码,以及 403/超时/内容为空等异常的定位思路。

U
UFO_PF 2024-06-23 · 阅读 7 分钟
百度 百度SEO
阅读提示
本文约 2,613 字,预计阅读 7 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:收录不上去时,先问”百度看到了什么”

页面在你浏览器里显示得好好的,不代表百度看到的是同一份内容。CDN 可能对特定地区返回不同内容,防火墙可能对爬虫 UA 返回 403,主题可能对未登录用户隐藏正文,缓存插件可能返回了一个空壳页面。这些问题在本地完全不可见,唯一能验证的办法,是站在百度的角度发起一次请求——这就是「抓取诊断」的价值。它让你用百度的抓取器去取一次页面,并把 HTTP 状态码、响应头、源码原样展示出来。本文讲清怎么用它、怎么在服务端复现,以及常见异常怎么判读。

原理分析:诊断的是”这一次抓取”,不是”收录状态”

抓取诊断的工作方式是由百度服务器发起一次 HTTP GET,把结果返回给你看。要理解三点:

其一,它是一次性动作,不代表百度日常抓取时的状态(例如日常可能走移动端 UA,诊断默认走 PC 或可选 UA)。

其二,它展示的是”抓取”环节的真实结果,与”是否收录”无关。抓取诊断返回 200 且内容完整,只能说明这一环没问题,不能推出”一定会收录”。

其三,它无法反映 JS 渲染后的结果。百度抓取诊断展示的是原始 HTML 源码(部分场景有渲染能力,但不可依赖),如果你的正文靠 JS 动态加载,诊断里看到的会是空内容——这与真实用户看到的不一致,是一个高危信号。

常见异常码的判读:

返回码 含义 定位方向
200 正常 看源码是否完整、是否含正文
301/302 跳转 跳转目标是否合规、是否有循环
403 被拒绝 WAF/防火墙/Nginx UA 规则
404 不存在 URL 规则变更、伪静态未生效
500/502/503 服务端错误 PHP 报错、超时、后端不可用
超时 无响应 服务器慢、被限流、DNS 问题

保姆级实操

第一步:找到入口
登录 ziyuan.baidu.com → 选择站点 → 左侧「抓取诊断」(部分版本归类在「抓取」下的”抓取诊断”),输入完整 URL(含 https://),点击”开始抓取”。

第二步:在服务端用 curl 复现
平台诊断只能一次一个 URL,服务端复现更适合批量排查。关键是 UA 要伪装成 Baiduspider:

UA='Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)'

# 1) 只看响应头:确认状态码与跳转
curl -s -o /dev/null -A "$UA" -w 'code=%{http_code} redirect=%{redirect_url} time=%{time_total}s\n' \
  https://mimangfei.com/some-post/

# 2) 跟随跳转看最终落脚点
curl -sIL -A "$UA" https://mimangfei.com/some-post/ | grep -Ei '^(HTTP/|location|content-type)'

# 3) 抓源码并统计正文长度,判断是否空壳
curl -s -A "$UA" https://mimangfei.com/some-post/ > /tmp/page.html
wc -c /tmp/page.html
grep -c '<article' /tmp/page.html

第三步:对比三种 UA 的结果
分别用 Baiduspider UA、普通浏览器 UA、手机 UA 请求同一 URL,若返回的 HTML 长度差异巨大,说明站点对不同 UA 输出不同内容,存在被判定为作弊(伪装页面)的风险。

第四步:判读源码
在诊断结果里搜索正文首句,确认它出现在 HTML 中;再检查 <title>、<meta name="description">、canonical 是否符合预期。若正文缺失,检查主题是否对未登录用户做了内容隐藏,或是否使用了纯前端渲染。

第五步:检查响应头
特别关注 X-Robots-Tag 是否带了 noindex(错误配置会全站掉收录)、Content-Type 是否正确、Cache-Control 是否合理。

第六步:定位 403/超时(若日志里压根没有蜘蛛,先按百度蜘蛛UA与IP段识别验明正身)
403 优先查 WAF/防火墙/Nginx UA 规则;超时则看 PHP 慢日志与服务器负载,并用 curl -w '%{time_starttransfer}' 测首字节时间。

常见踩坑

  1. 诊断显示 200 就以为万事大吉:源码里正文为空、或被插入了广告跳转,200 也一样不收录。
  2. 忘了带 https:诊断 http 版本返回 301,容易被误判为异常,应始终诊断最终地址。
  3. 用 curl 不设 UA 得到 200,但诊断是 403:说明服务器针对爬虫 UA 做了拦截,必须带 UA 复现才能发现。
  4. CDN 缓存了给百度的错误版本:改完规则要刷新 CDN 缓存再诊断。
  5. 案例:某站抓取诊断长期返回 200 但收录缓慢。用 Baiduspider UA 抓源码后发现,页面里正文部分是一段 <div id="app"></div>,全部内容由 JS 异步加载。本地浏览器看不出问题,百度抓到的却是一个空壳。改成服务端渲染正文后,两周内收录量明显上升。
  6. 诊断频率被限制:工具对每日诊断次数有限制,批量排查应优先用服务端 curl。
  7. 忽略 gzip:部分服务器对爬虫不返回压缩内容,响应体过大导致抓取超时,可检查 Content-Encoding。

总结

判断标准:抓取诊断合格的标准是”状态码 200 + 源码里能搜到正文首句 + 响应头无 noindex + 首字节时间低于 1 秒”。行动清单:平台诊断一次 → 服务端用 Baiduspider UA 的 curl 复现 → 对比三种 UA 的 HTML 长度 → 检查 X-Robots-Tag 与 canonical → 403 查 WAF、超时查后端 → 修完复测。若诊断正常但蜘蛛依然不来,应继续看百度抓取频次异常的调整。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。