因此,我使用Firebase创建了单页网页应用,其中每个网页都有从Firebase数据库动态加载的内容。
然而,搜索引擎只会看到空白页而不是动态内容。我创建了一个Firebase函数来预渲染每个页面用于搜索引擎优化目的,这已经很有效。
问题在于,这对用户体验产生了重大影响,因为正在运行的功能有一个额外的延迟,当动态内容加载了所有其他JS时,就会出现FOUC。
是否可以仅为GoogleBot(以及其他已知的抓取工具/机器人)触发预渲染功能,从而为用户提供正常的网站体验,并为机器人提供预先呈现的html页面。
由于
编辑:
exports.helloWorld = functions.https.onRequest((request, response) => {
// console.log(request.useragent)
}
预期的用户代理是:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
但是附加了片段:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 AppEngine-Google; (+http://code.google.com/appengine; appid: s~gcf-http-proxy)"
我已经尝试了几个检测机器人的插件,但是由于AppEngine-Google
答案 0 :(得分:3)
Firebase的云功能使用Express中间件作为其HTTP触发器。因此,检测抓取工具非常有可能,如Detect social bots in Node Express和How to detect web crawlers for SEO, using Express?所示。
但我想知道你是否正朝着正确的方向转向。
虽然预渲染可能比提供原始内容需要更多时间,但应该通过立即渲染有意义的渲染来补偿该时间。最近有一个很棒的article about server-side rendering with Cloud Functions and Express。
此外(除非您的数据非常动态),您的大多数用户都应该使用大多数HTML的缓存版本。请参阅David Easts talk about dynamic HTTP at I/O,特别是他对setting cache headers in Cloud Functions的解释。