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

服务器日志分析:判断百度是否真的来过(含完整统计脚本)

不确定百度到底有没有抓你的站?本文给出一套 Nginx/Apache 日志分析流程:抓取量趋势、响应码分布、抓取路径 Top、响应耗时与重复抓取统计,附可直接执行的 awk 脚本与判读标准。

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

引言:资源平台的数据是”百度的视角”,日志才是”你的视角”

百度搜索资源平台会给出抓取量、索引量、抓取异常等数据,但它是采样与延迟的:通常有 1–2 天延迟,且只统计百度自己认定的那部分抓取。服务器日志则是全量、实时、第一手的记录——谁在什么时候请求了哪个 URL、服务器回了什么码、用了多少时间。想判断”百度到底来没来过””它来的时候我的服务器表现如何”,唯一可靠的依据就是日志。本文给出一套可以直接复制执行的分析流程。

原理分析:日志里能回答的五个问题

一份标准的 Nginx combined 格式日志包含:来源 IP、时间、请求方法与路径、状态码、响应字节数、Referer、UA。基于这些字段,可以回答五个核心问题:

  1. 来没来:是否存在真实 Baiduspider(需配合 DNS 校验)的请求。
  2. 来多少:按天/按 IP 统计抓取量,看趋势而非单点。
  3. 抓了什么:路径分布,判断抓取是否集中在低质页上。
  4. 结果如何:状态码分布(200/301/404/5xx)与响应耗时。
  5. 是否有异常:短时间内高频重复请求、异常 UA、异常来源。

其中第 4 项最关键:如果蜘蛛 90% 的请求拿到 200 且耗时低于 1 秒,说明抓取环节健康;如果 5xx 或 404 占比偏高,抓取频次下调只是时间问题。

保姆级实操

第一步:确认日志格式与位置

# Nginx 常见路径
ls -lh /var/log/nginx/access.log /var/log/nginx/access.log.1
# 确认日志格式(nginx.conf 里的 log_format)
grep -A5 'log_format' /etc/nginx/nginx.conf

第二步:抓取量按天趋势

LOG=/var/log/nginx/access.log

grep -i "Baiduspider" $LOG \
  | awk '{print $4}' | tr -d '[' | cut -d: -f1 \
  | sort | uniq -c | awk '{printf "%s  %6d\n", $2, $1}'

第三步:响应码分布

grep -i "Baiduspider" $LOG | awk '{print $9}' | sort | uniq -c | sort -rn
# 只看非 200 的请求,快速定位问题
grep -i "Baiduspider" $LOG | awk '$9!="200"{print $9, $7}' | sort | uniq -c | sort -rn | head -20

第四步:抓取路径 Top 与抓取浪费识别

# 抓取最多的路径
grep -i "Baiduspider" $LOG | awk '{print $7}' | sed 's/?.*//' | sort | uniq -c | sort -rn | head -20

# 同一 URL 被重复抓取的次数(大于 50 次说明抓取预算被浪费)
grep -i "Baiduspider" $LOG | awk '{print $7}' | sort | uniq -c | awk '$1>50' | sort -rn | head -20

第五步:响应耗时分布

# combined 格式最后一个字段是请求耗时(需配置 $request_time)
grep -i "Baiduspider" $LOG | awk '{print $NF}' \
  | awk '{s+=$1; n++; if($1>2) slow++} END {printf "avg=%.2fs n=%d slow(>2s)=%d\n", s/n, n, slow}'

若日志未记录耗时,先在 Nginx 的 log_format 中加入 $request_time 与 $upstream_response_time,重载配置后重新采集数据。

第六步:与资源平台数据交叉验证(抓取量本身偏低时,参考百度抓取频次异常的调整做恢复)
把日志统计的每日抓取量与平台显示的抓取量对比。若日志里真实蜘蛛(DNS 校验通过)有 800 次而平台显示 100,通常是大部分请求被判为伪造 UA,或者平台数据尚未更新;若日志里一次都没有,说明问题在抓取入口(DNS、防火墙、robots),而不是索引策略。

常见踩坑

  1. 直接 grep “Baiduspider” 就当真:伪造 UA 极多,必须做 DNS 双向校验后再统计。
  2. 日志被 logrotate 切走:分析时只看 access.log 会漏掉历史,应连同 access.log.1 或 .gz 一起处理(zcat)。
  3. 开了 CDN 后来源 IP 全是节点:需要在 Nginx 里配置 real_ip_header X-Forwarded-For 与 set_real_ip_from,否则 IP 分析全错。
  4. 静态资源关掉 access_log 导致低估抓取量:很多优化教程建议 access_log off,这会让你丢失部分抓取数据,建议保留蜘蛛请求的日志。
  5. 案例:某站抱怨”百度不收录”,但日志分析显示 Baiduspider 每天来 600 次、其中 420 次拿到 404——原因是伪静态规则在插件更新后失效,文章页全部 404。修复规则后三天内抓取量不变但 200 占比从 30% 升到 98%,收录随即跟上。
  6. 只看一天数据下结论:抓取有波动,至少看 7 天趋势。
  7. 忽略 HTTPS/HTTP 双份日志:若同时开了 80 和 443 且日志分开,需要合并统计。

总结

判断标准:真实蜘蛛(DNS 校验通过)连续 7 天有访问、200 占比高于 95%、平均耗时低于 1 秒、抓取路径集中在内容页,才算”抓取健康”。行动清单:确认日志格式含 request_time → 提取蜘蛛请求 → DNS 校验真伪 → 统计按天趋势、响应码、路径、耗时 → 与平台数据交叉验证 → 针对非 200 项逐类修复。若抓取正常但索引量仍在掉,可继续看百度索引量突然下降的排查流程。

U
UFO_PF作者

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

留下你的想法

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