做站点运营时,我们习惯在浏览器里看页面:排版正常、图文齐全、点得动。但搜索蜘蛛拿到的是另一份东西,通常是原始 HTML,未必执行脚本。如果关键内容都靠 JS 在浏览器里生成,蜘蛛看到的可能就是一张空壳。这不是收录与否的问题,而是它连内容都没读到,自然也无从判断这个地址值不值得留。
先搞清楚:蜘蛛到底拿到了什么
判断方法很直接:禁用 JavaScript,或者用抓取工具查看原始响应源码,看正文、内链、主要文字是否还在。
- 源码里能看到标题、正文、内链,基本没问题。
- 源码里只有 script 和空的 div,说明内容靠前端渲染,需要进一步确认。
- 源码里有内容但与前端显示不一致,要留意首屏与兜底内容的关系。
三种常见渲染方式
服务端渲染
HTML 在服务器端拼好再返回,蜘蛛拿到的和用户看到的差别不大,最省心。代价是服务器压力更高,对缓存和响应时间更敏感。运营侧要留意首字节时间和缓存策略,别让渲染变慢反过来影响抓取。
客户端渲染
页面返回一个壳,内容由浏览器执行 JS 后拉接口填充。蜘蛛未必完整执行脚本,也未必愿意等接口返回。列表页、详情页如果都用这种方式,容易出现地址能打开、内容却抓不到的情况。
混合渲染与预渲染
首屏服务端输出,后续交互交给前端;或者对蜘蛛返回预渲染版本。这是折中方案,但要保证两条路径产出的标题、链接、正文一致,否则容易变成两个版本各说各话。
自查清单
- 关闭 JS 打开几个代表页面,包括首页、栏目页和一篇内容页,对比内容差异。
- 查看原始 HTML,确认正文首段和主要内链是否出现在源码里。
- 检查分页、筛选、加载更多:这些内容是否只存在于按钮中,而没有可抓取的地址。
- 确认重要导航和内链是真正的 a 标签,而不是由脚本触发的跳转。
- 检查渲染所依赖的接口是否被 robots.txt 或权限规则挡住,接口被禁,蜘蛛同样拿不到内容。
- 对比抓取快照与当前页面,看是否存在长期停留在旧版本的情况。
别踩的几个坑
- 只做脚本跳转:用 JS 代替超链接,蜘蛛不一定跟着走,URL 发现会变差。
- 懒加载没有兜底:图片和长列表靠滚动触发加载,源码里没有地址,等于对内链没有贡献。
- 给蜘蛛和用户看不同内容:一旦被识别,信任度很难恢复。
- 忽略渲染耗时:脚本体积过大、接口串行,蜘蛛可能提前放弃,页面只被读了一半。
运营层面怎么配合
渲染是前端和运维的事,但运营要把要求说清楚:哪些页面必须能在源码里读到,哪些链接必须可点可抓。上线新栏目或改版时,把关闭 JS 看一遍加进检查流程,比事后排查省力得多。
蜘蛛看到的内容,才是你真正对外发布的版本。浏览器里的效果是给用户的,源码里的内容才是给抓取的。