先给结论:如果入口页要登录后才渲染链接,或者必须带上服务端下发的 Cookie 才能看到内容,搜索蜘蛛大概率看不到里面的链接。它不会替你走一遍登录流程,也不会继承你浏览器里的会话。
搜索蜘蛛是以什么身份来访问的
把搜索蜘蛛当成一个陌生人最贴切:
- 不带你的登录态,也不带你浏览器里的 Cookie;
- 不提交表单、不输入验证码;
- 请求头里主要靠 UA 标识身份,偶尔带上来源页地址;
- 会在短时间内用同一个来源连续抓很多次,不是一个人慢慢看。
所以凡是必须先证明你是自己人才能看到链接的页面,对蜘蛛来说通常就是一道墙。
几种容易忽略的隐形登录墙
1. Cookie 中间件
有些入口页会在第一次访问时种一个 Cookie,没有这个 Cookie 就跳到引导页。你自己测试时浏览器已经存过 Cookie,看着一切正常;蜘蛛每次都是第一次来,会被反复跳走。
2. CDN 或 WAF 的人机校验
开启校验后,第一次请求返回的是一段脚本,通过之后才拿到真实 HTML。这类挑战通常带时间戳、加密参数和二次请求,搜索蜘蛛被拦下的概率并不低。
3. 放行只做了一半
为了让蜘蛛进来,有些站点按 UA 放行,但后续取链接的接口仍要求签名 Token。结果页面放行了,链接接口返回 403,蜘蛛只拿到一个空壳。
怎么验证入口页对蜘蛛是否可见
- 翻服务器日志里搜索蜘蛛的请求,看状态码和返回体积。返回 200 但体积只有几百字节,多数是空模板或跳转页。
- 用不带 Cookie 的方式重新请求一次入口页,对比返回的 HTML 里还有没有目标链接。
- 把返回的 HTML 存成文件,直接在源码里搜目标 URL 的关键片段,不要只看浏览器渲染后的画面。
- 用搜索引擎官方提供的抓取测试工具,分别看它抓到的原始 HTML 和渲染后 HTML。
判断标准很简单:一次无 Cookie、无登录态的 GET 请求,返回的源码里能不能看到目标链接。
入口页确实需要用户登录,怎么办
登录态页面本来就不适合承担 URL 发现的职责。可行的做法是另找一条公开路径:
- 单独做一个公开可访问的入口页,只放链接,不做身份校验;
- 把目标 URL 放进公开的 sitemap,走搜索引擎常规的发现渠道;
- 站内正常可访问的栏目页、聚合页顺带带上这些链接;
- 如果确实要区分访客,把校验放到目标页,入口页保持干净。
另外要提醒一句,给蜘蛛放行不等于给它开后门登录。用 UA 白名单绕过登录本身并不稳妥,UA 可以伪造,还容易让同一个页面出现两套内容。
顺带检查这几个小地方
- 入口页是否被缓存成登录前的版本,蜘蛛拿到的始终是旧缓存;
- 是否只在移动端或某个地域才显示链接,蜘蛛访问的那个版本里没有链接;
- 链接是不是靠前端框架渲染出来的,原始 HTML 里根本没有;
- 返回的到底是 200 还是 302,跳转目标是否还需要再校验一次。
总结一下:入口页的核心作用是把链接暴露给搜索蜘蛛,任何形式的身份校验都会削弱这个作用。与其琢磨怎么让蜘蛛通过验证,不如把它做成一个谁都能打开、源码里就能看到链接的普通页面,再用日志持续确认蜘蛛确实拿到了这些链接。至于最终收录与否,还取决于目标页本身的内容质量和可访问性,入口页只能解决被发现这一步。