首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用云函数的Firebase预录制页面的搜索引擎优化?

如何使用云函数的Firebase预录制页面的搜索引擎优化?
EN

Stack Overflow用户
提问于 2017-06-01 08:10:07
回答 3查看 7K关注 0票数 8

Firebase文档的云函数() 这里指出,这可以使用云函数来完成-

预览单页应用程序,以提高SEO。这允许您创建动态元标记,以便在各种社交网络之间共享。

我有两个问题:

  • 有人能用一个例子来解释预渲染是如何实现的吗?
  • 这是如何与Firebase主机一起工作的?因此,假设我在xyz.com/salon/43有一个网页,在Firebase托管中,我有一个salon.html,它是响应这个请求提供的。现在,为了能够预录制,我应该从托管到云功能来呈现网页吗?换句话说,我是从 “重写”:{“源”:“/沙龙/*”,“目的地”:"/salon.html"} 至 “重写”:{“源”:"/salon",“函数”:“沙龙”}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-03 19:18:53

两个任务:-将函数添加到宿主重写中,如示例所示-编写函数以生成html页面

本教程提供了一个很好的示例,下面的函数作为一个较长片段的示例:

代码语言:javascript
复制
const admin = require('firebase-admin');

function buildHtmlWithPost (post) {
  const string = '<!DOCTYPE html><head>' \
    '<title>' + post.title + ' | Example Website</title>' \
    '<meta property="og:title" content="' + post.title + '">' \
    '<meta property="twitter:title" content="' + post.title + '">' \
    '<link rel="icon" href="https://example.com/favicon.png">' \
    '</head><body>' \
    '<script>window.location="https://example.com/?post=' + post.id + '";</script>' \
    '</body></html>';
  return string;
}

module.exports = function(req, res) {
  const path = req.path.split('/');
  const postId = path[2];
  admin.database().ref('/posts').child(postId).once('value').then(snapshot => {
    const post = snapshot.val();
    post.id = snapshot.key;
    const htmlString = buildHtmlWithPost(post);
    res.status(200).end(htmlString);
  });
};
票数 10
EN

Stack Overflow用户

发布于 2018-07-07 22:00:12

首先,为我糟糕的英语感到抱歉。

在搜索了Deep (开玩笑)之后,我找到了解决方案。最酷的解决方案是,我能够使用云功能将我的先锋Ionic应用程序与Firebase主机集成起来。

在阅读以下主题之后:

https://github.com/firebase/firebase-tools/issues/33

@TheRoccoB用户解释了如何在Firebase中托管静态Web应用程序,并将流量从URL重定向到云函数。

我所做的就是把我必须索引的路线绘制成:

代码语言:javascript
复制
{
    "source": "/ shop / **",
    "function": "ssr"
},
{
    "source": "/ * / promotions / **",
    "function": "ssr"
}

因为"ssr“是我在云函数中函数的名称。因此,我使用库https://github.com/prerender/prerender-node检查请求是否来自google,以防我将请求重定向到https://github.com/prerender/prerender服务器。

代码语言:javascript
复制
const prerender = express ();
prerender.use (cors);
prerender.use (
    require ('prerender-node')
    // .set ('prerenderServiceUrl', 'http: // localhost: 3000')
    .set ('prerenderToken', '** TOKEN **')
);
prerender.use (require ('prerender-node'). set ('beforeRender', function (req, done) {
    // do you need to do?
    console.log ('Rendering URL:', req.path);
done ();
}));
prerender.use (require ('prerender-node') set ('afterRender', function (err, req, prerender_res) {
    // do you need to do?
    console.log (req.path + 'rendering completed!');
    console.log ('Errors:', err);
}));
prerender.get ('*', (req, res) => {
    console.log ('Calling function for URL:', req.path);
    res.set ('Cache-Control', 'public, max-age = 300, s-maxage = 600');
    res.status (200) .send (fs.readFileSync ('./ www / index.html'). toString ());
});
exports.ssr = functions.https.onRequest (prerender);
票数 6
EN

Stack Overflow用户

发布于 2017-06-02 00:18:13

您是正确的,您可以有效地重写应用程序的HTML页面,以指向函数而不是静态文档。然后,当访问该页面时,您的函数将有效地生成被发送回浏览器的HTML。您正在利用这个机会来决定,在这个时刻,HTML的内容应该是什么。

如果不需要在每一次访问上生成内容(根据定价页面上显示的计费率,每个访问都要花钱),那么您也可能希望使用缓存来消除在Firebase托管CDN中为缓存的、预呈现的内容服务。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44301989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档