常见问题

入口页要登录或带 Cookie 才显示链接,搜索蜘蛛还能发现目标 URL 吗

不少站点会给入口页加登录校验或 Cookie 判断,结果链接在源码里根本不出现。搜索蜘蛛通常是不带会话的匿名访客,这类页面在它眼里接近空页。本文说明蜘蛛的访问身份、几种容易忽略的隐形登录墙、用日志和无 Cookie 请求验证的方法,以及入口页该怎么改才不影响 URL 发现。

常见问题

入口页要登录或带 Cookie 才显示链接,搜索蜘蛛还能发现目标 URL 吗

先给结论:如果入口页要登录后才渲染链接,或者必须带上服务端下发的 Cookie 才能看到内容,搜索蜘蛛大概率看不到里面的链接。它不会替你走一遍登录流程,也不会继承你浏览器里的会话。

搜索蜘蛛是以什么身份来访问的

把搜索蜘蛛当成一个陌生人最贴切:

  • 不带你的登录态,也不带你浏览器里的 Cookie;
  • 不提交表单、不输入验证码;
  • 请求头里主要靠 UA 标识身份,偶尔带上来源页地址;
  • 会在短时间内用同一个来源连续抓很多次,不是一个人慢慢看。

所以凡是必须先证明你是自己人才能看到链接的页面,对蜘蛛来说通常就是一道墙。

几种容易忽略的隐形登录墙

1. Cookie 中间件

有些入口页会在第一次访问时种一个 Cookie,没有这个 Cookie 就跳到引导页。你自己测试时浏览器已经存过 Cookie,看着一切正常;蜘蛛每次都是第一次来,会被反复跳走。

2. CDN 或 WAF 的人机校验

开启校验后,第一次请求返回的是一段脚本,通过之后才拿到真实 HTML。这类挑战通常带时间戳、加密参数和二次请求,搜索蜘蛛被拦下的概率并不低。

3. 放行只做了一半

为了让蜘蛛进来,有些站点按 UA 放行,但后续取链接的接口仍要求签名 Token。结果页面放行了,链接接口返回 403,蜘蛛只拿到一个空壳。

怎么验证入口页对蜘蛛是否可见

  1. 翻服务器日志里搜索蜘蛛的请求,看状态码和返回体积。返回 200 但体积只有几百字节,多数是空模板或跳转页。
  2. 用不带 Cookie 的方式重新请求一次入口页,对比返回的 HTML 里还有没有目标链接。
  3. 把返回的 HTML 存成文件,直接在源码里搜目标 URL 的关键片段,不要只看浏览器渲染后的画面。
  4. 用搜索引擎官方提供的抓取测试工具,分别看它抓到的原始 HTML 和渲染后 HTML。
判断标准很简单:一次无 Cookie、无登录态的 GET 请求,返回的源码里能不能看到目标链接。

入口页确实需要用户登录,怎么办

登录态页面本来就不适合承担 URL 发现的职责。可行的做法是另找一条公开路径:

  • 单独做一个公开可访问的入口页,只放链接,不做身份校验;
  • 把目标 URL 放进公开的 sitemap,走搜索引擎常规的发现渠道;
  • 站内正常可访问的栏目页、聚合页顺带带上这些链接;
  • 如果确实要区分访客,把校验放到目标页,入口页保持干净。

另外要提醒一句,给蜘蛛放行不等于给它开后门登录。用 UA 白名单绕过登录本身并不稳妥,UA 可以伪造,还容易让同一个页面出现两套内容。

顺带检查这几个小地方

  • 入口页是否被缓存成登录前的版本,蜘蛛拿到的始终是旧缓存;
  • 是否只在移动端或某个地域才显示链接,蜘蛛访问的那个版本里没有链接;
  • 链接是不是靠前端框架渲染出来的,原始 HTML 里根本没有;
  • 返回的到底是 200 还是 302,跳转目标是否还需要再校验一次。

总结一下:入口页的核心作用是把链接暴露给搜索蜘蛛,任何形式的身份校验都会削弱这个作用。与其琢磨怎么让蜘蛛通过验证,不如把它做成一个谁都能打开、源码里就能看到链接的普通页面,再用日志持续确认蜘蛛确实拿到了这些链接。至于最终收录与否,还取决于目标页本身的内容质量和可访问性,入口页只能解决被发现这一步。