在SPA(单页面应用程序)中使用node.js + express.js在服务器端dynamic生成内容的SEO
我的客户端代码是一个单独的页面应用程序(写在knockout.js)与自己的路由系统,所以当谷歌爬虫机器人将尝试访问链接(这与后端请求新的页面无关,但只是客户端的一部分它会要求服务器(node.js + express.js)服务页面(例如'mywebsite / about'),当然服务器将返回404,因为它不知道客户端路由系统。 这是我目前的服务器代码:
router.get('*', function(req, res, next) { res.sendFile(path.resolve('../dist/index.html')); });
我的想法是定义与客户端相同的路由结构,并在search参数中传递客户端路由系统的路由:
router.get('/about', function(req, res, next) { res.sendFile(path.resolve('../dist/index.html?tab=about')); });
然后在客户端,我可以在JavaScript中捕捉并select正确的路线。 在这里当然我有另一个问题 – 据我所知,谷歌机器人不运行JavaScript ..但在这里,我可以使用prerender.io中间件,我猜。
1)这是一个正确的方式去与单页面应用程序生成的内容和search引擎优化?
2)如何从express.js传递search参数?
使用prerender.io作为pipe道的第一个中间件:
app.use(require('prerender-node').set('prerenderToken', 'YOUR_TOKEN')); app.get('*', (req, res) => res.render('index.html'))
app.use(require('prerender-node').set('prerenderToken', 'YOUR_TOKEN')); app.get('*', (req, res) => res.render('index.html'))
;
如果您有查询string,Googlebot可以用来调用一致的内容,那么您可以在网站站长中注明: https : //support.google.com/webmasters/answer/6080548?rd = 1
这是我的一个例子:
Google只想索引具有一致内容的网页。 如果每个用户的内容都不一样 – 那么你想在每个页面上设置一个rel =“canonical”标签,指出这个dynamic生成内容的“开始”位置。
这个想法是让网站pipe理员适应你的应用程序,而不是相反。 试图“欺骗”机器人在search引擎优化可能会有可怕的后果,因为谷歌确实有人类检查,偶尔给域名评级。 如果他们发现search索引的URL与他们在浏览器中看到的内容不一致,您将从懒惰的操作员那里获得一个标志。 这里是手册操作员遵循 。
- 如何使用node.js比symfony更好地应对前端?
- 多个SPA与node.js和AngularJS
- 为Node.js服务器+ SPA javascript框架设置自动化BDDtesting环境的简单方法?
- 使用React Router 4进行服务器端渲染时,上下文为未定义
- 我的第一个Node.js服务器:无法加载资源:net :: ERR_INCOMPLETE_CHUNKED_ENCODING
- Webpack – 如何在基础HTML中要求结果文件(最佳实践)
- 为什么使用Bower.js如果npm工作正常?
- 如何用Express后台构build多个布局的Angular JS
- 用于生成PDF的React JS / Node JS / Java RESTful API