常见问题

入口页的目标链接藏在登录、Cookie 或表单后面,搜索蜘蛛还能发现吗

入口页的目标链接如果需要登录、带 Cookie 或提交表单才会出现,搜索蜘蛛往往看不到。本文说明常见的三种藏法、用 curl 与无 Cookie 视角做自查的方法,以及把链接直接暴露在 HTML 里的稳妥做法,并提醒发现只是整条链路的第一步。

常见问题

入口页的目标链接藏在登录、Cookie 或表单后面,搜索蜘蛛还能发现吗

先说结论:搜索蜘蛛只能顺着它看得见、够得着的链接走。如果入口页本身需要登录、需要特定 Cookie,或者链接要点击按钮、提交表单才会出现,那么目标 URL 被发现的概率会明显下降,有时甚至完全走不下去。

为什么藏起来的链接容易被漏掉

抓取程序拿到的通常是一份未经浏览器渲染、或只做有限渲染的 HTML。它会解析页面里的 href、src 以及部分可识别的跳转关系,但它不会替你登录、不会点按钮、不会填表单,也很少带着你的会员 Cookie 去访问。凡是挡在这些动作后面的链接,对机器来说就等于不存在。

三种最常见的藏法,问题各不相同

1. 入口页需要登录才能看到内容

如果入口页对所有未登录访客返回 302 跳转到登录页,或者干脆返回一个请先登录的空页面,那么搜索蜘蛛拿到的就是登录页本身,里面没有目标链接可跟。这类情况在后台目录、会员专区、内网映射页上很常见。

2. 目标链接靠表单提交后才出现

表单默认是 POST 提交,搜索蜘蛛不会主动提交。即便提交后服务端返回了含链接的结果页,这个结果页也没有一个稳定、可直接访问的地址,自然无法充当发现入口。同理,需要搜索框输入关键词才列出链接的页面,也很难被稳定跟进。

3. 链接由点击事件动态插入

用 onclick 或事件监听在点击之后才插入链接的写法,能不能被渲染取决于抓取端是否执行 JS、执行到什么程度,结果不稳定。对一个以稳定发现为主要目标的入口页来说,不值得把成败押在这上面。

自查方法:用最笨的视角看你的入口页

  1. 用 curl 或在关闭 JS 的浏览器里访问入口页,直接看 HTML 源码里有没有 a href 形式指向目标 URL 的链接。
  2. 不带任何 Cookie 再访问一次,确认没有跳转到登录页,也没有弹出验证。
  3. 看服务器日志里搜索蜘蛛请求入口页后的状态码:是 200 且带内容,还是 302、401、403。
  4. 如果入口页是 JS 渲染的,检查渲染完成后的 DOM 里链接是否存在,同时留意渲染耗时是否偏长。

更稳妥的入口页做法

  • 把目标链接写成标准超链接,href 直接指向最终地址,不要包装成需要点击才会生效的按钮。
  • 入口页对未登录访客也返回完整 HTML,把权限控制放到目标 URL 那一层去做。
  • 目标 URL 存在多个版本时,入口页只给规范的那一个,让跳转链尽量短。
  • 入口页保持稳定可访问,不要频繁改路径、加验证码或做频率限制。
把入口页当成一份给机器看的目录,而不是给用户用的交互界面,链接暴露得越直接越好。

如果必须保留登录或表单,怎么留别的路

  • 把公开可访问的页面作为入口,用站内其它页面、栏目页的内链去带目标 URL。
  • 通过 sitemap 或搜索资源平台的提交入口,把目标 URL 单独交出去,不依赖入口页的页面解析。
  • 对需要地区或 UA 判断的站点,确认搜索蜘蛛的请求不会被误判拦截。
  • Cookie 下发后如果要求回传才给内容,先测一遍不带 Cookie 的情况下能否正常拿到 HTML。

别忘了发现只是第一步

即便搜索蜘蛛顺利发现了目标 URL,也只是走完了发现这一环。接下来能不能被抓取、能不能被收录,还要看目标 URL 本身是否可访问、内容是否足够、站点整体情况如何。发现做对了,只是把后面的路铺平,并不等于结果自动到手。