常见问题

入口页新加的目标链接搜索蜘蛛一直看不到,先排查是不是缓存了旧版本

入口页已经更新、新链接也加了,但搜索蜘蛛抓到的仍是旧版本,目标 URL 迟迟不出现。这类问题多出在 CDN 边缘缓存、服务器端页面缓存或静态托管版本上。本文说明如何用响应头和日志判断蜘蛛拿到的是哪一版内容,以及按源站、CDN、页面缓存的顺序逐步排查。

常见问题

入口页新加的目标链接搜索蜘蛛一直看不到,先排查是不是缓存了旧版本

做蜘蛛池和站点运营时,比较让人困惑的一种情况是:入口页明明已经改好,新链接也放进去了,搜索蜘蛛的日志里也天天有访问,但抓下来的目标 URL 始终是最早那一批。这时候先别急着怀疑蜘蛛“不认新链接”,很可能是它拿到的入口页 HTML 本身就是旧版本。

搜索蜘蛛看到的是服务器返回了什么,不是你改了什么

搜索蜘蛛每次访问入口页,都是一次独立的 HTTP 请求。它不关心后台编辑器里存的是哪一版,只关心这次请求返回的响应体里有没有那些链接。中间任何一层缓存把旧 HTML 交给了它,它看到的就是旧链接集合。所以“我改了”和“蜘蛛看到了”之间,隔着好几层缓存。

最容易造成版本不一致的三层缓存

  • CDN 或边缘节点缓存:入口页通常访问量不小,很容易被边缘节点缓存住。TTL 设得长,或者节点没收到刷新指令,蜘蛛拿到的就是缓存副本。
  • 服务器端页面缓存:Nginx 的 proxy_cache、各类 CMS 的静态化、Redis 页面缓存等,都会把入口页的 HTML 存一份。发布新内容时如果没触发清理,源站自己返回的也是旧版。
  • 静态托管或对象存储:入口页放在对象存储、静态站点托管上时,覆盖上传和 CDN 刷新是两件事,漏掉任何一步都会留下旧版本。

浏览器缓存对搜索蜘蛛影响很小,因为蜘蛛一般不会复用本地磁盘缓存,这一层可以放到最后再排查。

怎么确认蜘蛛拿到的是哪一版

  • 用搜索蜘蛛的 User-Agent 请求入口页,看响应头里的 Age、X-Cache、CF-Cache-Status、X-Cache-Hits 这类字段,判断是否命中缓存以及缓存了多久。
  • 把返回的 HTML 保存下来,直接搜新增目标链接的那段字符串,看是否真的出现在响应体里。
  • 对比日志里入口页的响应体大小:新旧版本链接数量差得多时,字节数通常会有明显差别。
日志里有访问,只说明蜘蛛来过,不能说明它拿到了最新内容。

按这个顺序排查更省时间

  1. 绕过 CDN 直接请求源站(用源站 IP 加 Host 头),确认源站返回的是不是新版。这一步能把“源站问题”和“缓存问题”分开。
  2. 如果源站是新版、CDN 是旧版,去刷新缓存,而不是反复改页面结构。
  3. 发布入口页时养成发布即刷新缓存的习惯,或者把 HTML 类资源的 TTL 调短一些。
  4. 缓存确认干净后,再用 URL 提交或 sitemap 提醒一次,让蜘蛛重新取一遍入口页。

顺序上建议先解决缓存再提交。反过来做,蜘蛛被叫来了,拿到的还是旧版本,提交就白费了一次。

几个容易踩的坑

  • 只刷新了站点首页,没刷新真正承载链接的入口页。
  • 把 404 或 301 的响应也一起缓存了,之后即使内容恢复,蜘蛛拿到的仍是错误响应。
  • 入口页按访问者随机分片或做 A/B 版本,蜘蛛每次拿到的版本都不同,新链接自然不稳定。
  • 多节点 CDN 或自建多台边缘机器,只清了其中一部分,剩下的节点还在发旧版。

小结

入口页新链接迟迟不被发现,先分清是“链接没写对”还是“蜘蛛没拿到新版”。缓存类问题的特征通常比较明显:老链接抓得挺好、新链接一直不出现,同时日志里入口页访问量并不低。按源站、CDN、页面缓存的顺序逐层确认,再配合提交入口页,比反复调整链接结构更有效率。整个过程不会立刻带来什么变化,但能避免在一个方向上反复空转。