入口页为了加载快、交互顺,常把链接和正文交给 JavaScript 渲染。人在浏览器里看着正常,但蜘蛛拿到的初始 HTML 里可能只有一个空壳。下面把蜘蛛到底看到什么拆开说。
蜘蛛抓取和浏览器打开不是一回事
蜘蛛发一个请求,服务器直接返回 HTML 源码,这就是它第一眼看到的东西。它不会像浏览器那样自动执行脚本、等接口返回、再把内容拼出来。部分搜索引擎具备渲染能力,但要排队、成本高、触发条件也不确定,不能默认它会替你把页面跑一遍。
几类常见写法的影响
- 链接由脚本生成:页面源码里看不到通往内层的链接,蜘蛛走到这里就断了。
- 正文靠接口拉取:初始 HTML 里没有有效文字,判断页面主题、决定是否继续抓取都缺依据。
- 用脚本做跳转:用户会被带到目标页,蜘蛛可能停在原页面,既看不到内容也看不到去向。
- 前端路由承载路径:路径变化只发生在浏览器端,蜘蛛拿到的仍是同一个地址的同一份内容。
哪些位置最容易被忽略
- 目录页和列表页的条目链接
- 正文里的相关推荐、上下篇
- 翻页与加载更多
- 面包屑与页脚导航
- 结构化数据里的目标地址
这些位置恰好吃掉大部分通往下一层的路径,一旦全靠脚本生成,入口页再多也串不起来。
想保留脚本体验,可以这样做
- 关键链接用 HTML 直接输出,脚本只做增强,比如点击统计、图片懒加载。
- 首屏正文直出,脚本负责后续交互和次要模块。
- 翻页优先用地址可直达的方式,加载更多作为补充而不是唯一入口。
- 需要跳转时用服务端跳转,并保证目标页面能单独打开。
- 不要把核心内容藏在必须点击或必须滚动到底才出现的位置。
怎么自查
取一次初始 HTML,把脚本执行关掉,看看还剩多少内容、还能不能找到通往下一层的链接;再对比渲染后的 HTML,看看多出来的部分是不是关键路径。配合访问日志,观察蜘蛛是否抓到了详情页,而不是只在入口页打转。
实际处理顺序
先把入口页到详情页的主干链路改成静态可抓,再处理正文直出,最后才是那些锦上添花的交互模块。顺序反了,容易把力气花在蜘蛛根本看不到的地方。
什么时候可以先不管
如果入口页本身就是静态列表,脚本只用在动效、统计这类和抓取无关的地方,那基本不用操心。真正需要留意的,是页面核心功能依赖脚本、离开脚本就没有内容和链接的情况。
一个简单的判断方法:把脚本关掉,页面还剩下多少内容,还找不找得到往下一层的路。