蜘蛛池入口页的作用很单一:让抓取端顺着链接继续往前走。页面好不好看不是重点,重点是链接有没有出现在返回的 HTML 里、需不需要额外请求才能拿到。渲染方式的选择不是技术偏好问题,而是抓取成本问题。
抓取端到底拿到了什么
多数搜索引擎爬虫不会像真实浏览器那样把页面完整跑一遍脚本。它先请求 HTML,从源码里找链接和文本,再判断是否值得继续渲染。同一套模板,用不同方式渲染,抓取端看到的可能是两回事。
三种渲染方式的差别
- 静态 HTML:链接和文本直接写在源码里,一次请求就能拿到。抓取成本最低,改动最直接,适合结构简单的入口页。
- 服务端渲染(SSR):HTML 在服务端拼好再返回,抓取端看到的和静态页接近,但渲染开销由服务器承担。入口页多的时候,要留意响应时间和并发压力。
- 前端渲染(CSR):源码里只有骨架和脚本,链接要等脚本执行完才出现。对抓取端来说,这等于多了一层不确定:有的渲染,有的不渲染,有的是延迟渲染。
怎么快速判断自己的入口页属于哪种
- 用命令行直接抓源码:curl -s 页面地址 | head -c 2000,看链接是否已经出现在返回内容中。
- 关掉浏览器脚本,或者直接看 view-source,页面结构和链接还在不在。
- 对照抓取日志:入口页有访问记录,但目标页长期没有到达,常常说明链接不在首屏 HTML 里。
- 检查首屏内容是不是异步接口填进去的,比如列表数据靠前端请求返回。
渐进增强是更稳的做法
如果必须用前端框架,优先把链接和关键文本放在服务端输出的 HTML 里,脚本只负责交互增强。这样即使渲染没被执行,抓取端也能顺着链接走。列表页可以静态输出第一页,翻页和筛选再交给脚本接管。
预渲染与动态渲染的适用场景
页面数量可控、模板变化不频繁时,可以用预渲染把结果提前生成好;请求来源比较复杂时,也可以考虑对抓取端返回渲染完成的版本。这类方案维护成本更高,需要保证不同版本内容一致,否则容易出现页面内容对不上、链接失效的情况。
常见误区
- 认为浏览器能看到,爬虫就能看到。执行环境不同,不能直接画等号。
- 入口页引入大量第三方脚本和统计代码,拖慢首屏输出,把预算耗在等待上。
- 用前端路由拼链接,没有可抓取的 href,只能靠脚本点击触发。
- 正文和链接全靠异步接口返回,抓取时拿到的只是空壳。
落地建议
- 入口页尽量用静态 HTML 或服务端渲染输出,链接写成标准 a 标签。
- 控制页面体积,把非必要脚本去掉或改为延迟加载。
- 新做的入口页先小批量上线,对照日志确认目标页有到达,再考虑扩大规模。
- 定期抽查线上源码,确认渲染方式在上线后没有被改坏。
渲染方式本身不会带来收录,它只决定抓取端能不能顺畅发现链接。把入口页做“能被读到”,比做“看起来很完整”更实际。
把渲染方式当抓取链路上的一环来看,和响应速度、状态码、入口页规模一起考虑,通常比单独优化某一项更有用。