搭蜘蛛池的人常有一个误解:入口页被蜘蛛抓过一次,就算跑通了。实际上抓取是一次性的动作,重访才是持续获得 URL 发现机会的前提。搜索引擎的调度系统要不要再回来,取决于它对这个地址的判断,而不是你希望它回来。
重访由什么决定
大致上,调度会综合几件事:这个 URL 过去返回的内容有没有变化、站点整体是否活跃、响应是否稳定、站内站外的链接是否还在指向它。任何一项变差,重访间隔都可能被拉长。
- 内容是否发生过实质变化
- 页面与站点整体的更新活跃度
- 响应状态码是否长期稳定在 200
- 服务器响应时间与超时比例
- 内外部链接是否持续存在
这几项里,前两项决定值不值得再来,后三项决定来不来得了。许多入口页的问题不在内容,而在后者。
内容变化不等于天天发新文章
入口页不需要像资讯站那样高频更新,但长期一字不变,调度对它的优先级自然会往下调。可行的做法是让页面的一部分随环境变化,比如:
- 列表区按规则轮换展示的目标链接
- 时间戳、统计数字等自然变动的字段
- 定期补充新的聚合条目,而不是整页重写
- 清理已经失效或不再使用的链接
变化要有意义。用脚本每天改几个无关字符,对抓取调度来说并没有区别,反而容易让页面结构变得混乱。
重访率不是可以设置的参数,它是入口页长期表现的结果。
可用性往往比内容更致命
蜘蛛来过之后,如果下一次访问遇到超时、502、证书错误、跳转到验证页,重访间隔就会被拉长,有些情况下这个地址会被降权处理。常见的情况包括:
- 服务器承载不足,蜘蛛集中抓取时直接超时
- WAF 或 CDN 规则把爬虫请求拦成 403
- 入口页被临时下线,返回 404 或 410
- HTTPS 证书过期或配置错误
- 页面主体依赖 JS 渲染,而爬虫拿到的是空壳
这些问题的共同点是,你自己访问时未必能发现。用不同 UA 实际请求一次,看返回的状态码和正文,比看后台报表更直接。
链接结构决定还有没有路回来
蜘蛛记住一个地址,很大程度上是靠链接。如果入口页只靠某一个上级页面带路,而那个页面的链接被撤掉,重访的通道也就断了。相对稳妥的做法是:
- 让入口页处在至少两条相互独立的链接路径上
- 避免把入口页放在需要多次点击才能到达的位置
- 目标链接与入口页之间保持可解析的 HTML 链接
- 入口页之间不要形成封闭的环形,容易造成抓取资源空转
链接一旦撤下,重访不会立刻停止,但会随着时间衰减。这也是轮换入口页时需要预留过渡的原因。
哪些做法会让蜘蛛不再回来
除了上面提到的可用性问题,还有一些操作会直接削弱重访意愿:频繁更换域名而不做过渡、同一入口页反复改 URL、大量入口页内容互相复制、整站只做跳转没有可读内容、短时间内向站点灌入远超承载的链接。这些做法不一定立刻出问题,但抓取频率的变化通常滞后几周才显现。
日常可以检查的几件事
如果发现某个入口页的抓取频率下降,可以先按顺序排查:状态码是否正常、响应时间是否明显变长、页面内容是否长期未变、指向它的链接是否还在、是否被 robots.txt 或响应头挡住。多数情况下问题就出在这几项里,不需要一开始就怀疑所谓被惩罚。把入口页当成需要长期维护的普通站点页面来对待,重访率通常不会差到哪里去。