草庐IT

seo - Firebase 为 SPA 托管 SEO

coder 2024-02-27 原文

对于单页应用,需要在您的服务器配置文件中实现一些高级重写规则,以代理网络爬虫和社交媒体机器人来缓存 JavaScript SPA 内容的预渲染版本。

使用类似 http://prerender.io 的服务

您会注意到此处模板化的各种服务器配置规则,这些规则演示了此代理: https://prerender.io/getting-started#install-it

使用 https://www.firebase.com/docs/hosting/guide/url-redirects-rewrites.html Firebase 是否支持这种复杂程度?

例如 - 我将如何实现 this nginx config使用 Firebase 重写规则:

server {
    listen 80;
    server_name example.com;

    root   /path/to/your/root;
    index  index.html;

    location / {
        try_files $uri @prerender;
    }

    location @prerender {
        #proxy_set_header X-Prerender-Token YOUR_TOKEN;

        set $prerender 0;
        if ($http_user_agent ~* "baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest") {
            set $prerender 1;
        }
        if ($args ~ "_escaped_fragment_") {
            set $prerender 1;
        }
        if ($http_user_agent ~ "Prerender") {
            set $prerender 0;
        }
        if ($uri ~ "\.(js|css|xml|less|png|jpg|jpeg|gif|pdf|doc|txt|ico|rss|zip|mp3|rar|exe|wmv|doc|avi|ppt|mpg|mpeg|tif|wav|mov|psd|ai|xls|mp4|m4a|swf|dat|dmg|iso|flv|m4v|torrent)") {
          set $prerender 0;
        }

        if ($prerender = 1) {
            rewrite .* /$scheme://example.com$request_uri? break;
            proxy_pass http://service.prerender.io;
        }
        if ($prerender = 0) {
            rewrite .* /index.html break;
        }
    }
}

作为旁注 - 我认为你们现在支持做以下事情真是太好了:

"rewrites": [ {
  "source": "**",
  "destination": "/index.html"
}]

但发现这实际上只解决了 SPA 面临的一半问题。

最佳答案

这里是 Firebase 核心开发人员

Firebase 在三月份的 ng-conf 2015 上宣布了基本的 SEO 支持,这使得它可以与 Googlebot 一起工作。参见 this presentation 16:30左右公布。

Firebase 仍然致力于在某个时候与预渲染工具(如 prerender.io 和 Brombone)合作,以便为 SEO 提供更复杂的选项。但是,如果您升级到最新版本的 Firebase 客户端(本文发布时为 2.2.4),这应该“正常工作”。

关于seo - Firebase 为 SPA 托管 SEO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25629060/

有关seo - Firebase 为 SPA 托管 SEO的更多相关文章

  1. Ruby(脱轨)托管 - 2

    很多人都问过这个网站上的Rails托管,但我对事情的后端不够熟悉,不知道是否有区别。我想托管一些RubyCGI“网络服务”,基本上只是从POST请求获取参数、访问MySQL数据库并返回数据的ruby​​方法。我查看了RoR,它似乎有点矫枉过正,据我所知,它是为了加速基于数据的CRUD站点的开发,而这根本不是我正在做的事情。所以我的问题是,这会影响我选择的托管服务提供商吗?有人为CGI操作推荐一个好的Ruby主机吗?我不熟悉FastCGI、mod_ruby、Passenger、Mongrel等,也不熟悉它们对性能、可伸缩性等的意义。我只想以相当好的性能托管我的ruby​​脚本,那里(和这

  2. ruby-on-rails - 无法将信用卡添加到 Stripe 上的托管帐户 - 2

    我正在使用Stripemanagedaccounts,我可以毫无问题地创建和检索帐户,但我无法将信用卡添加到任何Stripe帐户。我正在使用Stripe.js为了处理卡片创建过程,所以在View中我收集卡片字段并让Stripe.js完成验证和处理的肮脏工作。如果一切正常,我会从Stripe收到一个stripeToken,它在我的Controller中用于最终关联托管帐户和信用卡。但是我收到这个错误:创建卡时出错:(状态400)在将卡添加到Stripe帐户时,您必须提供一张设置了“货币”字段的卡。因此我假设我需要在Card表单中添加currency字段,所以我再次尝试,然后我遇到了这个错

  3. ruby - Firebase token 错误, "The custom token corresponds to a different audience." - 2

    我正在尝试在服务器上使用Ruby为Firebase生成JWTtoken。在3.0之前我们使用tokengenerator但升级后它停止工作。我用下面的代码得到的token给出了一个错误:Thecustomtokencorrespondstoadifferentaudience.我到处都找不到它的意思。private_key=OpenSSL::PKey::RSA.new谢谢 最佳答案 我也遇到了这个错误,我得到它是因为我使用了一个与firebase项目无关的服务帐户。在firebase项目下使用新key创建新服务帐户后,它开始工作。要

  4. ruby-on-rails - 知道@vendor.name 后如何使 Ruby on Rails 中的 URL 对 SEO 友好? - 2

    我的应用程序在RoR中我有一个名为showsummary的操作/View,其中ID已传递到URL,并且Controller使用它来实例化@vendor,其中@vendor.name是公司的名称。我希望URL是showsummary/1/而不是在URL中包含/vendor-name。我该怎么做? 最佳答案 所有这些解决方案都使用find_by_name,这肯定需要在该列上有一个索引并且要求它们是唯一的。我们使用的一个更好的解决方案是在供应商名称前加上其ID,但牺牲了一点美观。这意味着您不必在名称列上有索引和/或要求唯一性。供应商.rb

  5. ruby-on-rails - 我应该在 GitHub 还是 RubyGems 中托管 gems? - 2

    关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭9年前。Improvethisquestion我读到RubyGems实际上是gems的托管。我在GitHub上托管我所有的Rails项目。所以我的问题是:是否有任何理由将我的gem托管在GitHub而不是RubyGems上?RubyGems是否有像GitHub这样的私有(private)存储库?我听说珠宝商很擅长制作gem骨架。在他们的网页上,听起来像是将这些gems上传到GitHub而不是RubyGems。但是GitHub不是取消了对Gem的支持吗

  6. ruby-on-rails - 基于当前的托管服务,我应该将哪些数据库与 Ruby on Rails 一起使用? - 2

    我一直在寻找托管服务,但我仍然不知道哪种数据库最常见。好像是MySql和PostgreSql。所以,我不确定我的网站会有多少流量和数据(这只是一个项目),但我想做好准备。我曾在Oracle(PL/SQL)的一些项目中工作过,我对MySql有所了解。谢谢!附言。4年后,我主要使用PostgreSQL编写RoR。当我需要简单的应用程序时默认使用SQLite,否则使用PostgreSQL。 最佳答案 Rails的一个原则是你不应该真正关心你使用的是什么数据库:这些都是为你抽象的。所以我会说选择总体上最好的托管服务提供商,并相信他们会选择一

  7. ruby - 如何使托管在 Amazon S3 上的图像不那么公开但又不完全私有(private)? - 2

    我启动了一个使用AmazonS3进行图像托管的示例应用程序。我设法哄它开始工作。该应用程序托管在github.com.该应用程序允许您使用个人资料照片创建用户。当您上传照片时,Web应用程序会将其存储在AmazonS3而不是您的本地文件系统上。(如果您在heroku.com托管,则非常重要)但是,当我在页面的浏览器中执行“查看源代码”时,我注意到图片的URL是我分配给应用程序的S3存储桶中的AmazonS3URL。我剪切并粘贴了URL,并且能够在同一个浏览器和另一个浏览器中查看图片,在该浏览器中我没有打开我的Web应用程序或AmazonS3的session。有什么方法可以限制对该URL

  8. 如何以android中的数组的形式获取firebase中节点的数据 - 2

    以这种格式,我在Firebase中有一个数据库。我必须以阵列列表的形式显示所有部门,例如导演,体育。代码:mAuth=FirebaseAuth.getInstance();mdatabase=FirebaseDatabase.getInstance().getReference().child("Department");mdatabase.addValueEventListener(newValueEventListener(){@OverridepublicvoidonDataChange(DataSnapshotdataSnapshot){ListDepartment=(ArrayLis

  9. ruby-on-rails - 如何逐行读取 ruby​​ 中的文本文件(将其托管在 s3 上)? - 2

    我知道我以前做过这个并找到了一组简单的代码,但我不记得或找不到它:(。我有一个记录文本文件,我想导入到我的Rails3应用程序中。每一行代表一条记录。可能它可能是属性的制表符分隔,但也可以只使用一个值。我该怎么做? 最佳答案 File.open("my/file/path","r").each_linedo|line|#name:"Angela"job:"Writer"...data=line.split(/\t/)name,job=data.map{|d|d.split(":")[1]}.flattenend相关主题Whatare

  10. javascript - 在 Firebase 中处理关联帐户 - 2

    我正在遵循Firebase关于社交登录的说明。下面是我正在使用的示例,从登录身份验证的Angular来看,它一切正常。但是,我有独立工作的Google和Facebook登录。我现在希望能够做的是链接帐户。实际上,您可以在下面看到这可能发生的情况(请参阅评论):Ifyouareusingmultipleauthprovidersonyourappyoushouldhandlelinkingtheuser'saccountshere.我已经尝试了很多我认为应该放在这里的变体,但都无济于事。任何人都可以就他们认为应该放在这里的内容指导我吗?谢谢!functioninitFBApp(){//R

随机推荐