问题出现得很突然,日志倒是留得挺全。日志显示蜘蛛集中在凌晨两点到五点抓取,白天几乎不来,而站点的内容更新全部在白天完成,新文章要等一整天才被抓。
原因不止一个,得分开看。蜘蛛按自己的调度周期来访,不受站点控制。另一种情况是站点在凌晨响应最快,蜘蛛据此形成了习惯。
不容易想到的是,更新时间没有稳定规律,蜘蛛只能按历史频率猜。
先统计各时段抓取量
awk '{print substr($4,14,2)}' access.log | sort | uniq -c
接着把发布时间固定在稳定时段
crontab -e
末了用 sitemap 的 lastmod 提供更新信号
curl -s https://www.example.com/sitemap.xml | grep lastmod | tail -3
别只看报错消失,验证要多做一步。一段时间后蜘蛛的抓取时段开始覆盖发布时间,新文章被抓的间隔从一天缩短到几小时。
容易忽略的是,抓取时间不能直接设置,能改的是响应速度和更新规律,这两项稳定后蜘蛛自然会调整来访时段。报错文案容易误导,真正的原因往往在相邻那一层的日志里。