您是否可以编写仅由GoogleBot

时间:2017-07-28 11:48:51

标签: javascript firebase firebase-realtime-database google-cloud-functions

因此,我使用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

,每个插件都报告为机器人

1 个答案:

答案 0 :(得分:3)

Firebase的云功能使用Express中间件作为其HTTP触发器。因此,检测抓取工具非常有可能,如Detect social bots in Node ExpressHow 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的解释。