入口页能被蜘蛛抓到,前提是蜘蛛拿到的 HTML 里确实有可解析的内容。渲染方式决定了这件事的难易程度:静态 HTML 是直接把结果交给蜘蛛,SSR 是服务端先算好再输出,前端渲染(CSR)则是把渲染工作留给浏览器。三者对抓取的影响差别很大,方向选错,后面补多少链接都很难拉回来。
先搞清楚蜘蛛拿到的是什么
多数搜索引擎蜘蛛的第一轮抓取只处理 HTTP 响应体里的 HTML。遇到需要 JS 才能出内容的页面,会被放进渲染队列,由渲染服务执行后再解析。这个队列的优先级通常低于普通 HTML 抓取,延迟可能是数小时到数天,而且不保证一定执行——尤其当页面本身看起来像低价值内容时。
判断标准很简单:把页面的 HTML 源码(不是浏览器里的 DOM)抓下来,链接和目标内容在不在里面。在,就是安全的;不在,就依赖渲染队列。
三种方案的取舍
纯静态 HTML
入口页的主要任务是让蜘蛛顺着链接继续走,内容结构本来就简单,静态 HTML 往往是最省事的选择。它的优势是确定的:不依赖渲染、响应快、抓取成本低、出问题容易排查。
- 适合链接列表、分类目录、简单聚合页这类结构固定的页面;
- 页面体积可以压得很小,几 KB 就能装下几十条链接;
- 变更时重新生成即可,不需要额外维护渲染服务。
需要注意的是别把静态页做成「生成后就再也不动」的死页——蜘蛛回访时长期零变化,回访频率会慢慢降下来。
服务端渲染(SSR)
当入口页需要读数据库、按条件组合链接,又不想让蜘蛛面对空 HTML 时,SSR 是折中方案。服务端把数据拼成完整 HTML 返回,蜘蛛看到的就是最终结果。
- 代价是每次请求都要执行一次渲染逻辑,QPS 高时 CPU 和响应时间会吃紧;
- 建议对蜘蛛 UA 与普通访客走同一条渲染路径,避免出现「专门给蜘蛛的版本」这种容易出问题的分叉;
- 渲染超时会直接变成 5xx 或半截页面,超时阈值要留足余量。
前端渲染(CSR)
纯 JS 渲染的入口页对蜘蛛不友好。链接写在 JS 里、内容靠接口异步拉取,第一轮抓取基本只能看到一个空壳。即使渲染队列执行了,也常因为接口超时、鉴权、跨域等原因拿不到完整内容。
如果技术栈已经是前端框架,至少要做到:关键链接用 a 标签加 href 输出到初始 HTML,而不是点击事件绑定;内容区块做服务端预渲染或提前静态化;避免把整站导航放在客户端路由里。
怎么验证渲染有没有生效
- 用 curl 或关闭 JS 的浏览器请求入口页,对比看到的链接数量;
- 查看服务器日志里蜘蛛是否额外请求了 JS、CSS、接口文件——有,说明它在尝试渲染;
- 检查这些资源的响应状态和耗时,接口返回 403 或超过几秒,渲染基本会失败;
- 如果发现蜘蛛频繁拉取但目标 URL 始终没被抓,优先怀疑渲染环节,而不是链接本身。
落地建议
- 入口页优先级最高的内容,一律以静态或 SSR 形式出现在初始 HTML 中;
- 不追求页面的视觉效果,把预算花在响应稳定和链接可解析上;
- 减少渲染层级,能用 HTML 表达的列表不要用 JS 拼;
- 上线前固定做一次「关 JS 检查」,把它当作入口页的基本验收项。
渲染方式不是性能优化话题,而是抓取可行性问题。先保证蜘蛛第一轮就能读到东西,再谈更新频率、链接结构和数量规划,顺序颠倒会把后面的工作全部变成无用功。