站点运营

站点运营:前端渲染与首屏 HTML,蜘蛛拿到的是不是空壳

浏览器里看着正常的页面,抓到的初始 HTML 可能只有一行容器标签。本文说明如何用源码视图、命令行抓取和搜索后台工具判断页面是否为“空壳”,哪些内容与内链应当直接写在 HTML 里,并给出懒加载、无限滚动、骨架屏等写法的改造与验证清单。

站点运营

站点运营:前端渲染与首屏 HTML,蜘蛛拿到的是不是空壳

同一个页面,在浏览器里正文、导航、评论都齐了,搜索引擎拿到的初始 HTML 里却只有一个空容器标签——这种情况在改版或前端框架升级之后很常见。搜索引擎确实能执行一部分 JavaScript,但渲染要排队、要额外消耗资源,能直接读到的内容,通常比渲染后才出现的内容更稳。这篇讲怎么判断自己的页面是不是空壳,以及哪些东西应该直接写进 HTML。

一、先确认蜘蛛到底拿到了什么

判断方式不复杂,关键是别用错工具。

  • 看网页源代码,而不是开发者工具里的元素面板。元素面板展示的是脚本执行后的结果,源码才是最初的 HTML,两者内容差得越多,依赖脚本的程度就越高。
  • 用命令行抓一次,只看返回的 HTML 里有没有正文标题、段落文字和链接,不执行任何脚本。如果返回内容接近空白,说明首屏 HTML 基本没内容。
  • 用搜索后台的 URL 检查工具,对比渲染后的 HTML 与截图,看正文、导航是否都出现,以及渲染是否报错。
  • 看服务器日志,同一 URL 是否出现多次抓取:一次取初始 HTML,隔一段时间再来一次做渲染。重复抓取本身不一定是问题,但如果渲染那次经常被放弃,内容就等于没被抓到。

二、哪些内容最好直接写在 HTML 里

不是所有模块都要求服务端输出,优先级可以这样排:

  • 文章的标题与正文主体、产品名称与关键参数、页面主标题与简介。
  • 主导航、面包屑、分类入口、文章之间的相关阅读链接。
  • 分页入口、上一篇下一篇、栏目列表的首屏若干条。
  • 图片的替代文本、外链的目标地址。

评论、推荐流、弹窗表单、个性化推荐位这类次要模块,晚一点出现影响不大。

一个简单的判断标准:关掉 JavaScript 之后,页面还剩多少对用户有用的信息和可点的链接。剩下的越多,抓取和收录就越省事。

三、容易踩空的几种写法

  1. 内链用按钮或脚本跳转。写成按钮、并绑定点击事件去跳转,抓取程序通常不会去点它;换成普通链接形式,带上目标地址,才是一条能被跟随的入口。
  2. 接口取数据后再拼页面。首屏 HTML 里只有一个根节点,正文全部由接口返回后注入。用户看到内容要等,抓取到的初始文档也几乎是空的。
  3. 骨架屏占位过久。骨架屏只是占位符,本身不含任何有效文字,如果内容长期不落地,多次抓取都只能看到同一套占位结构。
  4. 无限滚动没有可访问的分页地址。用户能一直往下滑,抓取程序却找不到第二页入口,列表尾部的内容就没有路径被发现。
  5. 懒加载图片用脚本换地址。图片放在 data 属性里、滚动时才写入 src,早期抓取可能取不到图,图集类页面的内容也容易残缺。

四、可行的折中办法

全站改成服务端渲染代价不小,也从不是唯一答案。比较务实的顺序是:

  • 首屏关键内容与导航、内链服务端输出,其余模块在客户端补齐。
  • 把接口请求提前,让正文在首次渲染时就能拿到数据,缩短空窗期。
  • 列表页保留传统的分页地址,无限滚动只是交互上的增强,两种入口并存并不冲突。
  • 图片懒加载同时保留原始地址,并在 HTML 中写好替代文本。
  • 重要链接避免依赖鼠标事件,用标准链接形式承载。

五、改完之后怎么验证

  • 关闭脚本再看一遍页面,正文标题和主要链接是否还在。
  • 用命令行抓取,确认返回 HTML 中能搜到正文里的独特词组。
  • 在搜索后台对比渲染前后的 HTML,看是否有渲染报错或超时。
  • 过一段时间看日志,同一个 URL 是否还在被反复抓取却迟迟不更新。

前端渲染和抓取并不对立,问题往往出在“把什么都推到客户端”。把对用户和搜索引擎都重要的那部分内容放回首屏 HTML,剩下的交给脚本去增强体验,是成本最低也最容易长期维持的做法。