很多蜘蛛池搭好之后抓取量上不去,常见原因不是入口页数量不够,而是入口页的链接藏在 JavaScript 里——蜘蛛拿到的只是一张空壳,能看到的只有容器和几个 script 标签。入口页的第一使命是让蜘蛛在原始 HTML 里就读到通往目标站的链接,渲染方式直接决定这件事能不能成立。
不同搜索引擎对 JS 的处理能力不一样
Googlebot 会执行 JS,但有渲染队列和渲染预算,链接发现往往要延迟数小时甚至更久;百度蜘蛛对 JS 的支持有限且不稳定,多数情况下只解析服务器返回的原始 HTML;Bingbot 介于两者之间。入口页要面对的是尽可能多的搜索引擎,所以最稳的做法是按最保守的假设设计:蜘蛛只读原始 HTML,凡是不执行 JS 就看不到的内容,都不算数。
三种常见做法对比
1. 纯静态 HTML
- 源码里就有完整链接、文本和标题
- 可以用模板批量生成,成本低
- 缺点是内容更新要重新生成或增量刷新
2. 服务端渲染(SSR)
- 蜘蛛请求时服务端拼好 HTML 再返回,源码可读
- 适合入口页内容由数据库驱动、需要变化的场景
- 要留意首屏耗时,TTFB 过高会拖慢抓取节奏
3. 客户端 JS 渲染(SPA)
- 源码里只有挂载容器,链接由 JS 生成
- 对不执行 JS 的蜘蛛等于空白页
- 只有在对 Googlebot 有明确需求时才考虑,并且要做无 JS 降级
链接必须是 a 标签
入口页指向目标站的链接,用 <a href="..."> 输出最稳妥。onclick 跳转、window.location 赋值、button 绑定事件,对不执行 JS 的蜘蛛来说都不是链接;即使是会渲染的蜘蛛,这类跳转也容易被当成软跳转,抓取价值打折。
URL 形态同样影响发现
hash 路由(#/path)后面的内容不会发送给服务器,蜘蛛基本不会单独抓取,入口页尽量用干净路径或少量查询参数。同一入口页被跟踪参数拆成多个 URL,只会把有限的抓取预算摊薄,不如统一到一个规范地址。
怎么自查
- 关闭浏览器 JS,或用 curl、查看网页源代码,确认源码里能看到目标站链接
- 在搜索资源平台的抓取诊断中对比抓取到的 HTML 和渲染后的 HTML,两者差异越大越危险
- 翻入口页访问日志,如果蜘蛛只来一次就不再回访,通常是没解析到有效链接
- 检查控制台是否有 JS 报错导致渲染中断
实践建议
- 入口页优先静态化,链接写在源码里
- 必须动态时用 SSR,把链接渲染进首屏 HTML
- 不要在同一入口页混用多种渲染方案,容易出现内容不一致
- meta refresh 可以跳转,但不如 a 标签稳定,也更容易被当作跳转页处理
- 模板改动后,用无 JS 环境再抽查一遍
蜘蛛池解决的是链接能不能被看到,渲染方式决定的是这条链路上最基础的门槛。先把这一步做扎实,再谈入口页数量和抓取配额才有意义。