搜索抓取

日志里的蜘蛛足迹:哪些 URL 在被反复抓,哪些一直没动静

后台统计只给出抓取结果,具体去了哪些 URL、在哪个目录反复绕圈、哪些页面从未被访问,往往藏在服务器日志里。本文讲清如何从 access log 里分辨搜索引擎请求、做三组对比找出抓取浪费,并给出一份可执行的自查清单,把猜测换成可以核对的记录。

搜索抓取

日志里的蜘蛛足迹:哪些 URL 在被反复抓,哪些一直没动静

后台的抓取统计通常只给结果:抓了多少、有多少错误。但蜘蛛具体去了哪些 URL、在哪个目录反复绕圈、哪些页面从上线起就没被访问过,这些细节大多藏在服务器的 access log 里。学会看日志,比反复猜“蜘蛛喜不喜欢我的站”要实际得多。

先分辨清楚日志里谁是谁

原始日志每行通常包含访问 IP、时间、请求方法、URL、状态码、返回字节数、User-Agent。先按 UA 过滤出搜索引擎的抓取请求,再处理其余部分。

  • Googlebot:UA 可以伪造,正式判断要做反向 DNS 验证,或者用 Search Console 的抓取统计交叉比对。
  • Bingbot、YandexBot 等:同样可以查官方 IP 段,避免把采集程序误判成蜘蛛。
  • 状态码字段:200、301、404、5xx、429 各自代表不同的问题,别只看总数。

三组对比,最快看出问题

被抓的 URL 与 Sitemap 提交的 URL

把日志里的 URL 去重,和 Sitemap 里的条目对一遍。两边差异大,通常说明两条路的信息没对齐:Sitemap 里有大量从没被抓过的低频页,而蜘蛛每天在抓的却是一批没提交、也不打算收录的地址。

高价值目录与被反复抓的低价值 URL

按目录聚合请求数,往往能看到某个筛选参数页、排序页或站内搜索结果页占了大部分抓取量,而商品详情、文章正文这些真正需要被发现的页面只占很小一部分。这类页面本身不是错误,但它们消耗的是同一份抓取能力。

抓取频率与时段分布

把请求按天、按小时画出来。如果某段时间抓取量突然掉到很低,同时 5xx 或 429 上升,问题通常出在服务器而不是内容;如果抓取量长期平稳但新 URL 迟迟不出现,问题更可能出在链接结构上——新页面没有从任何被抓过的页面链接过去。

几个值得警惕的信号

  • 同一 URL 被高频重复抓取,状态码一直是 200 且内容没变,说明缓存头或参数写法可能让蜘蛛认为它是新地址。
  • 大量 200 却几乎零字节的响应,或者返回内容是“暂无内容”,容易被判定为软 404。
  • 日志里出现被 robots.txt 屏蔽的路径,多半是外链或旧链接留下的,需要判断是否要处理。
  • 抓取深度停在第二、三层,再往下的详情页几乎没有请求,通常要从内链和列表分页上找原因。

可以立刻做的自查步骤

  1. 导出最近 7 到 30 天的日志,过滤出搜索引擎 UA,去掉静态资源请求。
  2. 按 URL 去重,统计抓取次数、最近一次抓取时间、状态码分布。
  3. 把结果和 Sitemap、内链可达的 URL 集合做对比,列出“被抓但没价值”和“有价值但没被抓”两份清单。
  4. 优先处理 5xx、429 与重定向链,保证蜘蛛来的时候能顺利拿到内容。
  5. 针对没被抓的页面,从最近的上级列表页或相关推荐里补一条可点击的链接,而不是只丢进 Sitemap。
日志反映的是过去一段时间的抓取行为,不能用来预测下一次抓取。它的价值在于把猜测换成可以核对的记录。

把这件事做成定期动作,比如每月看一次日志、每季度对比一次 Sitemap 与实际抓取,站点运营中很多关于“蜘蛛是不是不喜欢我”的争论,往往能在数据面前直接找到答案。