SEO 百科

渲染

本页目录

渲染指的是搜索引擎像浏览器那样把网页跑一遍,执行其中的 JavaScript,从而看到最终生成的内容[2][4]。这一步既不属于纯粹的抓取,也不属于纯粹的索引,而是夹在两者之间:抓取拿到的是初始 HTML,渲染之后才能看到由脚本生成的那部分。

渲染的时机

对 JavaScript 网站,搜索引擎的处理流程分三个阶段[2]:

  1. 抓取
  2. 呈现
  3. 编入索引

渲染排在中间,用的是常青版 Chromium[2];官方在另一处也把它描述成用最新版 Chrome 渲染网页,并运行网页上的 JavaScript[3]。

初始 HTML 里是否包含内容,决定了渲染的分量。服务器端渲染的网页,HTTP 响应里的 HTML 就带着全部内容,解析一遍就可以;而有些 JavaScript 网站用的是应用外壳模型,初始 HTML 里没有实际内容,必须执行 JavaScript 之后才看得到[2]。

渲染队列

并不是每个抓到的网页都会立刻渲染。Googlebot 会把所有返回 200 状态码的网页加入渲染队列,除非 robots meta 标记或 HTTP 标头告诉它不要索引这一页[2]。比如 <meta name="robots" content="noindex">,这一行就是告诉引擎不要索引这一页的标记。

排队等待的时间并不固定。可能只有几秒,也可能长得多,要看搜索引擎的资源什么时候允许[2]。这一条也解释了一种现象:同一个页面,抓取时拿到的版本和最终收录的版本,内容偶尔会不一致。

渲染与索引

渲染完成之后,Googlebot 会再次解析渲染后的链接 HTML,把新发现的网址加入抓取队列[2]。也就是说,由 JavaScript 生成的链接同样能被发现。

索引用的也是渲染后的 HTML[2]。所以脚本生成的内容,只要渲染时能看到,就有机会被编入索引;反过来,渲染时看不到的部分,对索引而言等于不存在。

被屏蔽页面与 JavaScript

还有一条容易被忽略:网页或文件一旦被屏蔽,搜索引擎就不会渲染其中的 JavaScript[2]。因为 Googlebot 在抓取之前会先读 robots.txt,如果某个网址被标记为禁止抓取,它就会跳过这个请求[2]。

也就是说,robots.txt 挡掉的不只是一个请求,还包括这个页面上脚本可能带来的一切。

JavaScript 的代价

即便渲染能做,官方仍然建议采用服务器端渲染或预渲染[1][2]。理由有两条:

  1. 能让用户和抓取工具更快地看到网站内容。
  2. 并非所有漫游器都能运行 JavaScript。

这两条说的其实是同一件事。把内容交给 JavaScript 生成,就等于把可见性托付给一种未必人人都具备的能力。

附录

参见

参考资料

官方(境外)

  1. 《bingbot Series: JavaScript, Dynamic Rendering, and Cloaking》,Bing 网站管理员博客。
  2. 《了解 JavaScript SEO 基础知识》,Google 搜索中心。
  3. 《关于 Google 搜索运作方式的深度指南》,Google 搜索中心。

第三方

  1. 《Google Explains Rendering and Impact on SEO》,Search Engine Journal。

外部链接

无。