SEO 百科
页面缓存
本页目录
页面缓存
页面缓存 是把已经生成好的页面或页面片段保存下来,下次遇到同样的请求直接返回,不再重新执行程序。它是站内成本最低的一项提速改动,但缓存多久、什么时候失效,直接决定访客和爬虫看到的是新内容还是旧内容。
三种缓存的分工
按请求被挡住的位置,站内常见的缓存可以分成三层。MDN 把 HTTP 缓存分为私有缓存与共享缓存,私有缓存绑定到某一个客户端,通常就是浏览器缓存;共享缓存位于客户端与服务器之间,能在多个用户之间复用[1]。
- 整页缓存:把一整个 HTML 页面存起来,重复请求直接返回这一份 HTML,省下的是服务器执行程序的时间。
- 片段缓存:只缓存页面里反复出现的一块,例如导航、侧栏、文章列表,其余部分每次重新生成。
- 浏览器缓存:把文件存在访客自己的浏览器里,由 HTTP 标头决定存多久,省下的是网络传输的时间。
三者省掉的不是同一段开销。整页与片段缓存落在服务器这一侧,浏览器缓存落在访客这一侧,要调的东西因此也不在一起。
缓存带来的收益
MDN 说明,响应可以复用时,源服务器不必处理请求,也就“不需要解析和路由请求、根据 cookie 恢复会话、查询数据库以获取结果或渲染模板引擎”[1]。省下的这些步骤,正是动态页面最耗时的部分。
同时,缓存离访客越近,响应就越快[1]。收益落到核心网页指标上,主要体现在最大内容绘制(LCP):缓存命中时服务器不必重新生成页面,首个字节时间提前,LCP 也随之提前。
失效策略的设置
缓存存多久由响应标头决定。max-age 决定浏览器缓存的新鲜期;s-maxage 只作用于共享缓存,也就是 CDN 这类节点[2]。Expires 用绝对时间表示过期,只在没有 Cache-Control 时生效[3]。
Cache-Control: public, max-age=31536000, immutable
Cache-Control: no-cache
同一段配置对应两类资源,用法不同:
- 带版本号的静态文件:设很长的
max-age,配合immutable,让浏览器在有效期内不再发验证请求; - 频繁变化的 HTML:用
no-cache,让浏览器每次都回源验证,内容没变就返回304 Not Modified[1]; - 含个人信息的响应:用
private,避免被共享缓存存下来发给别人[1]。
还要给主动失效留一条路。HTTP 缓存规范本身没有定义删除缓存的方法,托管缓存不同,通过面板操作或接口调用就能清除已存的响应[1]。发布后若发现节点上仍是旧副本,就用这条通道刷新。
与抓取的关系
缓存没失效,爬虫抓到的也是旧内容,收录自然停在旧版本。页面改版后迟迟不更新,先查这一层。
Last-Modified 这类标头一边服务缓存,一边影响抓取。MDN 提到,“爬虫会利用它调整抓取频率”[1]。
服务器响应越快,抓取量越容易维持。百度说明,Baiduspider 会按内容更新频率和服务器压力自动调整抓取频次[4]。缓存正是减轻服务器压力的手段之一。
还有一处容易混淆。搜索引擎自己保存的页面副本,行业里叫快照,它与站内缓存是两回事:前者由搜索引擎决定,站长改不了;后者写在自己服务器上,改的是自己。
常见误用
- 把
no-cache当成“不缓存”。它只是要求每次使用前回源验证,响应仍然会被保存[2]。 - 动态页面套用静态资源的长期缓存。用户看到的是别人的数据,或者长期看不到更新。
- 只清了浏览器缓存,忘了节点上还留着一份。
- 给带个人信息的响应设了
public,放进共享缓存后可能发给其他访客。
附录
参见
参考资料
官方(境外)
- 《HTTP 缓存》,MDN Web 文档。
- 《Cache-Control》,MDN Web 文档。
官方(国内)
- 《配置 CDN 缓存过期时间》,阿里云,2026-09-10 更新。
- 《平台工具使用手册(抓取频次)》,百度搜索资源平台,2020-08-14 更新。
外部链接
无。