站点每周有一张抓取量趋势图,从上个月开始整体抬高了将近两成,GSC 里的抓取请求数却没有同步变化。查了 robots 和 sitemap 都没动过,后来在 access.log 里看到大量 UA 为 Screaming Frog SEO Spider 的请求,才知道是运营同事每周跑一次全站爬取,爬完不封 UA 直接进统计。
一开始怀疑是「测试环境的抓取脚本指向了生产域名 同一批地址被爬了两遍」,查了一圈,方向不对。
这类报错背后常见的原因有几处,逐个排除就行。统计脚本只按状态码过滤 没有区分人、搜索引擎和第三方爬虫。还有一种是自建爬虫没设 crawl-delay 五万条 URL 一次跑完在日志里形成尖峰。
另外,报表按日聚合并未剔除已知工具 UA 一条工具请求等于一条蜘蛛请求。
上来先按 UA 前缀看各来源的请求量占比
awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -rn | head -20
再往下把工具 UA 单独落一份日志便于核对
map $http_user_agent $is_tool { default 0; ~*(Screaming|Semrush|Ahrefs) 1; }
接着统计时只保留搜索引擎 UA 再算趋势
grep -Ei 'googlebot|bingbot|baiduspider' access.log | wc -l
给内部爬虫脚本加上限速和标识
scrapy crawl site -s DOWNLOAD_DELAY=2 -s USER_AGENT="internal-checker/1.0"
改完先别撤,确认这几项。剔除工具 UA 之后,重算的抓取量与 GSC 曲线基本重合,之前那 18% 的抬升完全来自内部爬取,趋势图恢复可读。
提醒一点。统计口径要先定义清楚是谁的抓取,人、搜索引擎、自家工具三类混在一起算出来的数字没有任何参考价值。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
