搜索蜘蛛在抓取网站时,并不是对所有URL都一视同仁。除了链接结构和Sitemap,HTTP响应中的缓存头也会悄悄改变蜘蛛的决策。很多站点运营者只把缓存看作加速访问的工具,却没有意识到它同样在影响URL的发现节奏与抓取路径的深浅。
缓存头是蜘蛛的“体感温度”
当蜘蛛请求一个URL时,服务器返回的响应头中往往带有Cache-Control、Last-Modified或ETag。这些字段原本是给浏览器用的,但搜索蜘蛛同样遵循HTTP规范。蜘蛛会根据这些信号判断页面是否“新鲜”,以及是否值得重新下载。
例如,一个页面设置了Cache-Control: max-age=3600,表示在一个小时内不会变化。蜘蛛在遇到这个响应后,如果它在短时间内再次需要该URL,很可能不会发起完整的GET请求,而是使用条件请求,或者直接跳过检测。这减少了服务器压力,但也意味着页面内部的改动可能不会被立即发现。
抓取路径的关键不是让蜘蛛每次都来,而是让该来的URL、在正确的时机来。
缓存头如何改变URL发现效率
URL发现依赖两个场景:一是蜘蛛顺着已有页面发现新链接,二是蜘蛛通过Sitemap或外部发现后,首次来抓取。
长缓存让新内链失去“热度”
假设首页是蜘蛛最常访问的入口,首页缓存设置过长,例如max-age=86400,那么即使你昨晚在首页新增了一条指向重要新内容的链接,蜘蛛今天在抓取首页时,可能只读取缓存,不下载完整HTML。新链接就没有机会被快速发现,直到缓存过期。
Last-Modified的误导性
某些内容管理系统会在修改正文时自动更新Last-Modified,但如果你只改了模板或添加了侧边栏链接,而未触动内容字段,Last-Modified可能不变。蜘蛛发送条件请求后,服务器返回304 Not Modified,蜘蛛以为页面没有任何变化,自然也不会去重新解析页面上的链接。丢失URL发现的机会。
ETag是更精细的校验信号
使用ETag可以避免Last-Modified粒度不够的问题。只要页面响应内容确实改变,ETag就会发生变更。但需要注意,如果你使用多台Web服务器且ETag生成逻辑不一致,会导致同一页面在不同服务器上产生不同ETag,让蜘蛛误判为经常变化,增加无效抓取。
实操建议:让缓存成为URL发现的助推器
- 区分内容类型设置max-age:对于极少变动的静态资源,可以设置较长缓存;对于页面主体内容,建议max-age不超过600秒,或者使用must-revalidate。如果想让新内容尽快被发现,可以临时缩短缓存时间。
- 合理定义Last-Modified:确保页面变更(包括动态渲染的“服务端时间”、评论数量、推荐模块)能更新该字段。如果无法精确控制,优先使用ETag。
- 保持ETag的一致性:在集群环境中,采用基于文件修改时间和大小的弱校验,不要包含inode等主机相关属性,避免同一URL因服务器不同而ETag漂移。
- 结合Sitemap补充信号:在Sitemap中提供 <lastmod> 字段,让蜘蛛在缓存策略之外获得独立的时间判断依据。当一个URL的缓存未过期,但Sitemap显示更新,蜘蛛仍可能会尝试条件请求。
- 慎用CDN的默认缓存:很多CDN对HTML不再缓存,但也有一些会默认缓存。如果CDN层缓存了过长的HTML,而源站已经发出版本更新,CDN不会向蜘蛛透传新的响应头,导致蜘蛛只拿到旧的缓存头,误以为页面未变化。
从缓存头看抓取路径的健康度
如果网站经常更新但收录效果不佳,建议观察蜘蛛日志中304响应的比例。如果某些页面长期出现大量304,但对应页面实际内容早已变化,那么问题很可能出现在缓存策略上。用一个简单的方法检测:修改正文中的关键词,再向服务器发送带原始ETag的条件请求,看是否返回200而不是304。如果不返回200,说明资源的缓存验证逻辑存在缺陷。
另外,注意不要把整站所有页面的缓存策略一刀切。像“最新文章”列表这类聚合页,是URL发现的枢纽。如果聚合页被强缓存,就等于切断了蜘蛛发现新增内容的主要通道。建议对聚合页设置较短的max-age,并配合ETag即时校验。
站内搜索结果页面通常属于低价值URL,可以明确设置noindex并加大缓存,避免蜘蛛反复扫描这些不稳定的参数组合。反而将节省下来的抓取预算留给真正值得发现的URL。
不要忽视移动端或AMP页面的缓存
若你的站点同时提供桌面、移动和AMP页面,且它们共用了一套响应头,那么请务必检查各版本是否都正确携带了针对当前版本的缓存控制。有时候你针对桌面端优化了缓存,却忘了移动端模板因为动态拼接元素导致缓存错误,让蜘蛛在移动抓取中出现路径中断。
所有缓存策略都服务于一个目标
蜘蛛池的底层逻辑是理解蜘蛛如何做资源分配。缓存头并不是一个直接决定排名或收录的要素,但它是蜘蛛与服务器之间“对话”的一部分。正确的缓存策略,能让蜘蛛用最少的请求了解最多的更新;错误的缓存策略,则会把URL发现变为一潭死水。
与其担心蜘蛛不来看,不如审视自己的响应头:是否让蜘蛛看到了足够清晰的变化信号?是否把频繁变动的重要页面藏在了“看起来不可变”的缓存外壳下?在服务器稳定性允许的情况下,让每一条URL都能以最真实的姿态出现在抓取路径中,才是站点运营者真正需要掌握的平衡术。