用前端框架做的站点,经常遇到一个现象:页面在浏览器里看完全正常,但搜索结果的收录情况不理想,快照里甚至只有框架外壳。这时候先别急着归因于“搜索引擎不喜欢 JS”,更常见的情况是,抓取、渲染、索引这三步里,有一步没有走完。
抓取、渲染、索引是三件事
搜索引擎处理一个 URL,大致会经历:抓取初始 HTML、执行页面中的 JavaScript 完成渲染、再把渲染后的内容送入索引。初始 HTML 里没有正文,并不等于一定不能被收录,但意味着后续必须依赖渲染成功。
如果渲染环节失败、超时,或者被 robots 规则挡住,最终进入索引的可能只是空壳。此时在工具里看到的“已抓取”,并不等于“已收录”。
常见卡点:内容在不在初始 HTML 里
- 接口数据依赖:正文通过前端请求接口后填充,初始 HTML 为空。渲染队列如果没执行或执行失败,索引里就没有内容。
- 渲染超时:页面脚本过多、接口响应慢,渲染器可能在内容出现前就结束了。
- JS/CSS 被屏蔽:robots.txt 误屏蔽了脚本或样式资源,渲染无法正常完成。
- 路由写法:使用 hash 路由、前端跳转,或者链接不是标准 a 标签,蜘蛛可能发现不了新 URL。
- 懒加载未触发:图片、正文在滚动后才加载,而渲染器不一定模拟滚动。
- noscript 为空:没有给禁用 JS 的环境留下任何可读内容。
怎么自查:看渲染后的 HTML,而不是只看源码
判断问题在哪一步,可以用几个动作交叉验证:
- 用 URL 检查工具查看“已渲染的 HTML”,和浏览器右键源码对比,看正文是否出现。
- 查看服务器日志里,Googlebot 是否抓取了 JS 和 CSS 文件;如果完全没有,渲染大概率不完整。
- 在 Search Console 中看该 URL 的抓取与索引状态,区分“已发现”“已抓取”“已编入索引”。
- 如果页面在索引里但快照空白,优先怀疑渲染失败或内容在交互后才出现。
抓取和收录不是一回事:抓到了不等于渲染成功,渲染成功也不等于一定进入索引,但前两步不通,后面基本无从谈起。
改善顺序:先兜底,再优化渲染
如果确认关键内容依赖 JS,可以按下面的顺序处理:
- 首屏内容服务端输出:标题、正文、主要链接尽量在初始 HTML 中就有,SSR、预渲染或静态化都可以作为兜底。
- 保证脚本可抓取:检查 robots.txt 和 meta 规则,不要让 JS、CSS 资源被误挡。
- 链接用真实 URL:站内导航和列表使用标准链接,避免只有点击事件没有 href。
- 减少不必要的渲染依赖:重要内容不要等到用户交互后才出现。
- 提交站点地图:帮助发现 URL,但不要把它当成收录保证。
JS 渲染本身不是问题,问题在于把收录完全押在渲染成功上。先让关键内容在初始 HTML 中可见,再逐步优化渲染和交互,收录的稳定性通常会好很多。最后提醒一句:本文讲的是收录路径,不承诺任何页面一定被收录或获得排名,具体仍需以实际抓取和索引状态为准。