用前端框架搭站点的团队越来越多,页面打开之后由脚本去请求接口,再把内容塞进 DOM。对访客来说这没什么问题,看起来和普通页面一样。但对搜索蜘蛛来说,情况可能完全不同:它拿到的 HTML 里没有标题、没有正文、没有内链,只有几个空的容器节点。
这类问题最麻烦的地方在于它不会报错。站点监控显示 200,页面能正常打开,日志里也看不到异常,于是渲染问题可以安静地存在好几年。
蜘蛛看到的内容和你看到的不一样
几种常见的情况:
- 整站客户端渲染:HTML 只是一层壳,所有内容等脚本执行完才出现。搜索引擎的渲染能力有限,排队也长,很多页面可能等不到渲染那一步。
- 关键信息靠脚本注入:正文是静态的,但标题、描述、canonical 由脚本改写,蜘蛛读到的还是默认值。
- 内链写在脚本里:导航、相关推荐通过点击事件跳转,没有真正的 a 标签,蜘蛛顺着链接爬不下去。
- 懒加载过了头:图片和列表在滚动或交互之后才出现,蜘蛛不滚动就看不到。
- 标签页与折叠内容:默认只渲染第一个标签的内容,其余内容对访客点开可见,对蜘蛛不可见。
怎么快速判断
- 打开页面源码(不是开发者工具里的 Elements 面板,那个显示的是渲染后的结果),直接看服务器返回的 HTML。
- 在浏览器里关闭 JavaScript 再刷新,看还剩多少内容。
- 用命令行请求一次页面,检查响应体里有没有正文文字和真实的链接。
- 在搜索资源平台或第三方工具里看抓取快照,对比和真实页面的差异。
- 抽查不同类型的模板:首页、栏目页、详情页、分页,模板不同,问题也不同。
能做的调整
优先保证关键内容在 HTML 里
不必一步到位改成服务端渲染。先把最重要的部分静态输出:页面标题、正文主体、面包屑、主要导航、分页链接。这些内容占了页面价值的大部分,剩下的交互模块继续用脚本也没关系。
给链接用真正的链接
列表页、相关阅读、翻页这类需要被发现的入口,用 a 标签写 href,而不是靠点击事件跳转。蜘蛛只认链接,不认按钮。
谨慎使用无限滚动
无限滚动对访客体验不错,但内容没有独立 URL,也就无法单独被抓取和引用。可以考虑保留分页链接作为兜底,让每批内容都有一个真实地址。
别把 canonical 交给脚本
canonical、robots 元标签、hreflang 这类指令,最好在服务端输出。脚本注入的版本,蜘蛛不一定读得到。
自查清单
- 关闭 JS 后,页面是否还有可读的标题和正文?
- 源码里是否存在指向其他页面的 a 标签?
- 列表页分页是否是可点击的真实链接?
- canonical 与 meta robots 是否直接写在返回的 HTML 里?
- 图片是否有 alt 与可解析的地址?
- 不同模板的渲染情况是否都抽查过?
需要说明的是,渲染方式只是抓取链路上的一环。如果页面地址本身没有被暴露出来,蜘蛛连来都不会来,那属于 URL 发现的问题,蜘蛛池这类工具通常是在这个环节被讨论的。两者解决的不是同一件事,不要指望其中一个能补上另一个的缺口。
判断标准很简单:把 JavaScript 关掉,页面还剩什么。剩得越少,风险越大。