你能写一个只被 GoogleBot 触发的 Firebase 函数吗?
Can you write a Firebase Function that only get triggered by GoogleBot
所以我使用 Firebase 创建了一个单页 Web 应用程序,其中每个页面都有从 Firebase 数据库动态加载的内容。
然而,搜索引擎只会看到空白页面,而看不到动态内容。我创建了一个 Firebase 函数来预呈现每个页面以用于 SEO 目的,效果很好。
问题在于,这主要影响了用户体验,因为函数 运行 存在额外延迟,随后在动态内容与所有其他 JS 一起加载时出现 FOUC。
是否可以只触发 GoogleBot(和其他已知 crawlers/bots)的预呈现功能,从而为用户提供正常的网站体验并为机器人预呈现 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 触发器。所以检测爬虫是很有可能的,如图 and 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, specifically his explanation of setting cache headers in Cloud Functions。
所以我使用 Firebase 创建了一个单页 Web 应用程序,其中每个页面都有从 Firebase 数据库动态加载的内容。
然而,搜索引擎只会看到空白页面,而看不到动态内容。我创建了一个 Firebase 函数来预呈现每个页面以用于 SEO 目的,效果很好。
问题在于,这主要影响了用户体验,因为函数 运行 存在额外延迟,随后在动态内容与所有其他 JS 一起加载时出现 FOUC。
是否可以只触发 GoogleBot(和其他已知 crawlers/bots)的预呈现功能,从而为用户提供正常的网站体验并为机器人预呈现 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 触发器。所以检测爬虫是很有可能的,如图
但我想知道您的方向是否正确。
虽然预渲染可能比提供原始内容花费更多时间,但应该通过立即渲染有意义的再现来补偿这段时间。最近article about server-side rendering with Cloud Functions and Express真是太棒了。
此外(除非您的数据非常动态)您的大多数用户应该访问大多数 HTML 的缓存版本。参见 David Easts talk about dynamic HTTP at I/O, specifically his explanation of setting cache headers in Cloud Functions。