你能写一个只由GoogleBot触发的Firebase函数吗?



因此,我使用 Firebase 创建了一个单页网络应用,其中每个网页都有从 Firebase 数据库动态加载的内容。

但是,搜索引擎只会看到空白页,而不会看到动态内容。我创建了一个Firebase函数来预渲染每个页面以进行SEO目的,效果很好。

问题在于,这在很大程度上影响了用户体验,因为正在运行的函数会有一个额外的延迟,然后在动态内容与所有其他 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,每个插件都将所有内容报告为机器人

Cloud Functions for Firebase 使用 Express 中间件作为其 HTTP 触发器。因此,很有可能检测爬虫,如下所示 检测 Node Express 中的社交机器人 和 如何使用 Express 检测 SEO 的网络爬虫?。

但我想知道你是否朝着正确的方向前进。

虽然预呈现可能比提供原始内容花费更多时间,但该时间应通过立即呈现有意义的演绎来补偿。最近有一篇关于使用Cloud Functions和Express进行服务器端渲染的好文章。

此外(除非你的数据是非常动态的(,你的大多数用户应该点击大多数HTML的缓存版本。参见 David Easts 在 I/O 上谈论动态 HTTP,特别是他对在 Cloud Functions 中设置缓存标头的解释。

最新更新