很多站点把入口都放在 JavaScript 里:点击按钮加载列表、前端路由跳转、滚动到底部再请求下一页。从用户角度看没问题,但搜索蜘蛛的抓取管道分成两步,源码和渲染后的 DOM 之间可能存在时间差。
抓取管道:先拿源码,再排渲染
搜索引擎请求一个 URL 时,通常先拿到服务器直接返回的 HTML,这一步是抓取。如果页面关键内容或链接需要执行 JS 才出现,就进入渲染阶段。渲染比抓取消耗更多资源,队列也往往更长,所以两者之间存在延迟。
这意味着:链接写在源码里,通常当次抓取就能看到;靠脚本生成的链接,可能要等到渲染完成才被发现。渲染不是不会做,而是不一定和抓取同时发生。
链接在源码里和 JS 里,差别在哪
- 源码中的普通链接(a 标签带 href 属性):蜘蛛解析 HTML 时即可提取,进入待抓队列。
- 点击事件绑定:源码里往往没有可解析的地址,需要渲染并模拟交互才可能发现。
- 前端路由切换:地址变化可能不产生新的服务器请求,蜘蛛未必把它当成新 URL。
- 滚动加载、点击「加载更多」:后续内容不在首屏源码中,发现时间可能被推迟。
不是所有情况都坏,但入口越依赖脚本,进入抓取路径的时间就越不确定。
渲染阶段容易出问题的几处
- 资源被挡:robots.txt 屏蔽了 JS 或 CSS 文件,渲染时页面可能拼不出来,链接和内容都看不到。
- 接口依赖:渲染需要调用站内接口,如果接口需要登录、频繁超时或按 UA 拦截,渲染结果可能是空壳。
- 脚本报错:一个未捕获的异常就可能中断后续渲染,导致本该出现的链接没有出现。
- 内容放进框架或影子 DOM:解析和提取的难度更高,链接发现更慢。
- 懒加载:图片、列表的懒加载在真实浏览器里会触发,但在渲染资源有限时不一定全部执行。
怎么确认蜘蛛看到的是哪一版
- 关闭浏览器 JS,直接访问关键页面,看导航和正文是否还在。
- 查看渲染后的 HTML(浏览器检查元素,或使用搜索平台提供的 URL 检查工具),对比源码里有没有链接。
- 看服务器日志:静态资源有没有被抓取记录,缺失说明渲染可能不完整。
- 用抓取模拟工具对比源码与渲染结果,找出只在渲染后才出现的链接。
让关键入口更早被看到
- 主导航、面包屑、分页,尽量用真实 href 的链接,按钮只做补充。
- 「下一页」要有可抓取的地址,别只留一个 JS 按钮。
- 首屏内容尽量服务端渲染或预渲染,重要链接不要等脚本执行完才出现。
- 保持 JS、CSS 可被抓取,不要用 robots.txt 一刀切屏蔽静态目录。
- 用 Sitemap 给重要 URL 兜底,但它替代不了站内链接的发现作用。
- 列表页分批输出,配合分页地址,避免全部塞进无限滚动。
把关键链接放回源码,是成本较低的 URL 发现手段。渲染可以锦上添花,但别把它当成唯一的入口。
最后提醒一句:抓取和渲染的节奏由搜索引擎决定,调整之后不要期待立刻见效。可以隔一段时间回看日志里静态资源的抓取记录,以及渲染后页面的链接情况,再判断是否改善。