阅读本文只须要2分钟 html
谷歌已经明确表示,他们会在抓取你的网站以前运行你的JavaScript代码。准确地说,他们的爬虫(crawler)中运用 Chrome 41
浏览器打开网站,和真实用户用浏览器打开同样!可是还有其余搜索引擎和社交媒体网站可能并不会这么作。react
我知道人们太关心搜索引擎优化了,老是试图尽量地提升。很天然的,每一个人都想在不运行任何JavaScript的状况下直接显示搜索引擎的内容。这不是一个坏主意,相信不少人都这么尝试过。git
*这不只有利于搜索引擎优化 *,并且还具一些性能优点。浏览器没必要等待JS文件加载后才开始渲染,首次有效渲染(First Contentful Paint)
的时间会更短。github
原理其实很简单,在咱们使用npm run build
构建React App后,咱们用真实浏览器渲染build
目录(一般是index.html
), 而后获取产生的HTML
代码保存到一个文件中,只是全部的内部页面都须要重复相同的操做。npm
感谢react-snap 让这一切变得简单。json
dev
依赖中安装 npm i -D react-snap
package.json
的 scripts
中添加"postbuild": "react-snap"
npm run build
What it will do is after the normal build, it will run react-snap which will render them in a Puppeteer browser, scrape content and generate new build.浏览器
在build
以后,将运行react-snap
,在无头浏览器(Puppeteer browser)中渲染,抓取内容并产生新的build
。bash
{
"scripts": {
"postbuild": "react-snap"
},
"reactSnap": {
"skipThirdPartyRequests": true
},
"devDependencies": {
"react-snap": "^1.23.0"
}
}
复制代码
和原做者同样,我在尝试react-snap
的时候,也碰到了一些问题,例如著名的'Protocol error (Runtime.callFunctionOn): Object reference chain is too long' }
, 通常在官方问题都能找到相应的解决方案,或者你选择StackOverFlow
。app
因此当咱们在使用第三方脚本的时候,应该尽量对他们多一些了解,好比有哪些限制或者是options
, 请参考文档。post
原文地址:coffeencoding.com/prerender-r… 感谢做者 Gijo Varghese