javascript - 你能写一个只被 GoogleBot 触发的 Firebase 函数吗?

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

所以我使用 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 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 的解释.

关于javascript - 你能写一个只被 GoogleBot 触发的 Firebase 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45372771/

相关文章:

javascript - 获取 AJAX 请求并仅创建一次 div

firebase - 用户 UUID 删除后是否会重新使用? (Firebase 身份验证)

Firebase 电子邮件验证 Flutter

javascript - 统计一下有多少用户注册了?

android - 无法从 ondatachange 方法中获取值

javascript - 如何在 SailsJS/Waterline 中使用带有 Promise 的 Model.query()

javascript - 如何在自定义javascript对象中设置标签onclick?

javascript - Angular 不会更改 json 中的音频源

ios - 让条件在 Firebase Observer 中工作

java - 在 Firebase 实时数据库中插入数据时,它会删除以前的数据