抓取统计下载量忽然上涨,点进明细看到 favicon.ico 一天被请求四千多次,正文页的抓取量反而少了两成。检查了站点根目录,favicon.ico 文件存在,返回 200,格式是 32x32 的 ico,没有做过任何跳转。
把日志和配置对完,能解释这个现象的基本就这几处。favicon 放在需要鉴权的目录 蜘蛛每次拿到 302 反复重试;页面里的 link 标签写法有误 蜘蛛退回默认路径反复探测;CDN 对 ico 文件的缓存时长为 0 每次请求都回源重新校验;站点有多个域名指向同一份内容 每个域名的 favicon 都被抓一遍。
动手时先确认 favicon 的实际状态码和类型
curl -sI https://www.example.com/favicon.ico | head -5
接着看页面里 link 标签的声明方式
curl -s https://www.example.com/ | grep -i 'rel="icon"'
给 ico 加长缓存并固定类型
location = /favicon.ico { expires 30d; default_type image/x-icon; }
末了统计各域名的 favicon 请求占比
grep 'favicon.ico' access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head
改完先别撤,确认这几项。补上长缓存和正确的 Content-Type 之后,favicon 的日请求量降到两位数,抓取预算重新回到正文页上,正文抓取量回升。
小文件反复被抓通常不是文件本身的问题,而是响应头让它无法被缓存,蜘蛛每次都得重新确认一遍。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
