蜘蛛池入口页的作用是把蜘蛛引到目标页,而这个“引”的动作,最终要落在跳转上。入口页本身内容通常不多,蜘蛛抓到它之后能不能继续往下走、走到哪一步,跳转方式的影响比很多人想的大。
跳转为什么值得单独拿出来看
蜘蛛对入口页的处理大致分两步:先抓取入口页本身,再从页面里发现下一个 URL。跳转方式不同,这两步的衔接方式就不同——有的在 HTTP 层面直接完成,有的要等页面解析后才执行,中间还可能出现执行失败的分支。
几种常见跳转方式的实际表现
301 永久重定向
服务器在响应头里直接返回 301 和目标地址,蜘蛛不需要渲染页面就能拿到下一步。这种方式中间环节最少,信号也比较明确。需要注意的是,301 在一次抓取里通常只跟随有限层数,如果链路上套了多层 301,后面的容易被放弃。
302 / 307 临时重定向
同样是响应头跳转,区别在于语义是“临时”。蜘蛛在短期抓取中的处理与 301 接近,但长期会反复回来确认原地址是否恢复。如果入口页会长期指向同一个目标页,用 301 更合适;如果是临时切换或做灰度,302 才符合语义。
JS 跳转
页面先返回 200 和一段脚本,由浏览器或渲染队列执行 location 跳转。它的好处是入口页确实是一个可访问、可解析的页面;代价是能不能走到下一步,取决于蜘蛛是否渲染 JS、渲染队列的排队情况和执行时机。纯 JS 跳转对抓取能力较弱的爬虫不算友好。
meta refresh
写在 HTML head 里的跳转,延迟可以设成 0 或几秒。它不依赖 JS,兼容性比 JS 跳转好,但仍然需要页面被解析到 head 部分。延迟设得越长,蜘蛛在入口页停留的不确定性越大。
怎么选
- 入口页主要作用是“过路”,目标页是唯一的下一步:优先 301,并让链路保持一层。
- 需要入口页本身被当作一个正常页面看待:可以考虑 200 加 JS 或 meta refresh,但要接受部分蜘蛛可能不走到底。
- 做临时切换、不想把信号绑死:302 比 301 更符合语义。
- 同一批入口页尽量统一跳转方式,混用会让日志变难读,排查问题时不好定位。
容易被忽略的几点
第一,跳转目标不要指向需要登录、需要验证码或本身返回 4xx 的页面,跳过去也是断的。第二,目标页最好和入口页在协议上保持一致,https 入口跳到 http 目标会多出一层。第三,跳转链上的每一跳都要消耗时间,蜘蛛对同一入口页的访问频率有限,链路越长,真正走到目标页的概率越低。
跳转方式本身不保证蜘蛛会来,也不保证目标页会被收录。它只决定蜘蛛在入口页这一步之后,能不能顺畅地走到下一站。把这一步做干净,比把入口页做得花哨更有意义。
上线后看什么
上线后主要看两处日志:入口页的访问记录,和目标页的访问记录。如果入口页有蜘蛛访问、目标页几乎没有,多半是跳转这一环出了问题,可以先查响应头是否符合预期,再看入口页是否带了 noindex、robots 限制或脚本报错。