很多入口页在浏览器里看起来正常,链接齐全、内容完整,但蜘蛛来的时候看到的却是另一个版本:链接没有、内容空白、甚至直接被跳转到登录页。原因往往不在服务器,而在 cookie 和登录态。
蜘蛛的请求默认是“陌生人”
搜索引擎蜘蛛抓取页面时,一般不会携带你浏览器里的 cookie,也不会替你完成登录、点击、勾选同意框这些动作。它发出的是一个相对干净的 HTTP 请求,然后读取服务器返回的 HTML。
这意味着,任何依赖“先有 cookie 才输出内容”的逻辑,对蜘蛛都可能不成立。蜘蛛看到的可能是未登录状态、默认语言、默认地区,或者一个被弹窗遮住的页面。
入口页常见的 cookie 依赖
- 登录后才显示链接:导航、列表或推荐位只在 session 有效时渲染。
- 地区或语言 cookie:没有 cookie 时回落到空状态或错误页。
- AB 测试 cookie:不同分组看到不同链接,蜘蛛可能只拿到其中一个版本。
- 同意弹窗:内容被遮罩层挡住,蜘蛛仍读到源码,但真实用户可能看不到,体验不一致。
- 会员可见内容:入口链接放在付费墙之后。
为什么这对蜘蛛池入口页很关键
蜘蛛池入口页的主要任务不是把用户留在页面,而是让蜘蛛顺着链接继续走。如果核心链接被登录态或 cookie 判断挡住,蜘蛛能读到的可能只是一个空壳页。它不会为了你“登录一下”,也不会帮你点开折叠菜单。
有些站点用 JavaScript 在页面加载后读取 cookie,再动态插入链接。蜘蛛是否执行脚本、执行到什么程度,各搜索引擎并不完全一致。把链接发现完全押在脚本和 cookie 上,稳定性会差很多。
怎么检查蜘蛛视角
- 用不带 cookie 的请求访问入口页,例如用 curl 或浏览器的无痕窗口,并禁用 JavaScript。
- 查看返回的 HTML 源码里,是否已经包含你想让蜘蛛发现的链接。
- 检查服务器日志中蜘蛛的请求,看看它拿到的状态码和响应长度是否正常。
- 对比登录前后、有无 cookie 时页面输出的链接差异。
- 如果用了 CDN 或缓存,确认缓存版本不是登录用户专属版本。
cookie 可以用,但别把它当门槛
cookie 本身不是问题。用 cookie 做个性化推荐、记住语言偏好,都可以。问题在于把 cookie 当作“是否输出入口链接”的开关。更稳妥的做法是:核心链接默认输出,cookie 只用来做附加调整。
如果页面确实需要登录才能看到完整内容,至少把入口页和登录后页面分开。入口页负责暴露可公开访问的链接,登录页负责用户功能。
蜘蛛不是你的用户,它是一个不带身份、不点按钮、不勾选同意框的访客。
常见误区
- 以为蜘蛛会执行 JS 并自动设置 cookie。
- 以为登录墙只影响用户,不影响抓取。
- 以为弹窗遮罩只是前端问题,蜘蛛会“点掉”。
- 把入口链接放在登录后才能渲染的组件里。
- 用 cookie 做全站跳转,未登录直接跳到首页或登录页。
使用建议
- 入口页默认输出核心链接,不依赖 cookie 判断。
- 需要登录的内容和入口页分离,别混在同一个 URL。
- 用服务端渲染或静态 HTML 兜底,避免链接只存在于 JS 执行之后。
- 定期用无 cookie、无 JS 的方式抽查入口页源码。
- 如果使用地区或语言判断,给蜘蛛一个稳定的默认版本,而不是空白页。
- 检查缓存配置,避免把登录态页面缓存后返回给蜘蛛。
把入口页做成“谁来都能看到链接”的页面,通常比事后猜蜘蛛看到了什么更省事。cookie 和登录态可以服务用户体验,但不应该成为蜘蛛发现链接的障碍。