不少站点遇到过这样的情况:在浏览器里打开页面,标题、正文、价格、评论都正常显示,用抓取工具请求同一个地址,返回的 HTML 里却只有导航骨架和一段脚本引用。搜索引擎蜘蛛拿到的第一版内容如果就是这个空壳,后续能否看到完整内容,就变成了一件不确定的事。
这并不意味着必须把整站改成服务端渲染。先做一次自查,把问题范围缩小,再决定改哪里,成本会低很多。
一、先确认蜘蛛拿到的是什么
查看初始 HTML
用浏览器的“查看网页源代码”,而不是“检查元素”。前者是服务器返回的原始内容,后者是脚本执行后的 DOM,两者经常差别很大。如果源代码里找不到正文段落、主要标题或商品描述,说明这些内容依赖前端生成。
用请求工具对照
用 curl 或站点自带的抓取模拟工具请求几个代表性 URL,把返回内容与浏览器渲染结果对照。重点看三处:主标题、正文主体、列表页的条目链接。列表页尤其容易被忽略,条目往往由接口返回后再拼进页面。
对照日志与抓取记录
如果服务器日志里能看到蜘蛛请求,可以按 URL 抽样,看它抓取后是否回头再抓、抓取频次是否明显低于同类页面。抓取行为只是参考,不直接等于收录结果,但异常冷清通常值得看一眼。
二、常见让内容迟到的写法
- 正文由接口拉取,脚本在页面底部执行,首屏 HTML 里只有占位容器。
- 栏目导航、分页按钮由点击事件驱动,没有真实的链接地址。
- 图片、图集、评论、价格等模块异步填充,且没有服务端兜底。
- 整站依赖客户端路由,直接请求某个路径时返回统一的空模板。
- 内容放在内嵌框架里,或需要二次交互才展开的折叠面板中。
三、可以优先做的小调整
关键内容尽量前置
标题、正文首段、主要栏目链接、面包屑,这些对判断页面主题最有用的部分,尽量由服务器直接输出。次要模块,比如推荐位、相关阅读、评论区,继续用异步加载问题不大。
链接使用真实可点地址
导航和列表条目建议使用带地址属性的链接标签,而不是给普通容器元素绑定点击事件。这样既方便蜘蛛顺着走,也方便用户复制、分享和在新标签页打开。
给异步模块留兜底
折叠内容、懒加载区块可以提供无脚本时的提示或静态摘要。至少让页面在没有执行脚本时,仍能表达这一页讲的是什么。
不要把重要的页头信息交给脚本注入
规范地址、robots 指令、多语言标注这类信息,尽量写在服务器输出的 HTML 里。脚本注入的版本有时会晚于蜘蛛读取的时点,容易和已有配置互相打架。
四、上线前后留意节奏
- 改动前记录一批代表性 URL 的初始 HTML 快照。
- 发布后重新抓取同一批地址,比对正文是否出现在源码中。
- 观察一两周内服务器日志里这些地址的抓取次数变化,不必期待立刻上扬,先确认没有继续走低。
- 把检查动作并入日常的站点结构巡检,避免新模板上线后重新引入问题。
提示:渲染方式的选择要和站点规模、团队维护能力匹配。前端渲染本身不是错误做法,问题在于关键内容是否只在脚本执行之后才存在。
把“蜘蛛看到的第一版内容”当成一个固定检查项,很多看似玄学的抓取问题,会先在这里露出线索。