所以我使用 Firebase 创建了一个单页 Web 应用程序,其中每个页面都有从 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 触发器。所以很有可能检测到爬虫,如下所示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 的解释.
关于javascript - 你能写一个只被 GoogleBot 触发的 Firebase 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45372771/