【问题标题】:ActionView, Application.html.erb and HTML head tagsActionView、Application.html.erb 和 HTML 头标签
【发布时间】:2014-10-24 22:56:30
【问题描述】:

我有一个关于 Ruby on Rails、ActionView、Application.html.erb 和 HTML 头标签的使用的简单问题。

我知道 application.html.erb 用于在您网站的所有页面上显示内容。

<head>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta name="description" content="My desciprtion.">
  <meta name="robots" content="index,follow">
  <title><%= @title %></title>
    <%= stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true, :cache => "cache/all" %>
    <%= javascript_include_tag "application", :async => true, "data-turbolinks-track" => true, :cache => "cache/all" %>
    <%= csrf_meta_tags %>
</head>

也就是说,上面的代码显示在我所有的网页上。

现在,我一直在阅读有关 SEO 的文章,它建议为每个网页使用单独的描述元标记,以告诉搜索引擎页面是关于什么的。我的问题是

您是否允许在 Rails 中自定义单个页面,例如

page1.html.erb
page2.html.erb
page3.html.erb

并在其中包含 HTML head 标签?

我使用 Ruby on Rails 已经有一段时间了,但我从未在视图页面中看到 head 标签。

我还没有看到关于这个问题的正文标签。

我用过

<% @title = "Page Title" %>

为页面声明单独的标题。这相当于 HTML 标题标签。

为每个网页声明描述是否有类似的东西?

【问题讨论】:

    标签: ruby-on-rails ruby title meta actionview


    【解决方案1】:

    你可以使用meta-tag gem:

    <head>
      ...
      <%= display_meta_tags %>
    </head>
    

    举个例子:

    set_meta_tags site: 'Site Title', title: 'Member Login'
    # <title>Site Title | Page Title</title>
    
    set_meta_tags description: "All text about keywords, other keywords"
    # <meta name="description" content="All text about keywords, other keywords" />
    
    set_meta_tags canonical: "http://yoursite.com/canonical/url"
    # <link rel="canonical" href="http://yoursite.com/canonical/url" />
    
    set_meta_tags :twitter => {
      :card => "summary",
      :site => "@username"
    }
    # <meta name="twitter:card" content="summary"/>
    # <meta name="twitter:site" content="@username"/>
    
    set_meta_tags :author => "Dmytro Shteflyuk"
    # <meta name="author" content="Dmytro Shteflyuk"/>
    

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    • @SørenHoltenHansen,但是如果 gem 将被删除并且链接将不正确,这个答案也将是不正确的,不管我添加什么解释;)
    • 添加什么解释非常重要。高质量的问题和高质量的答案是 Stack Overflow 与几乎所有其他问答网站的不同之处。
    • 反正我改了
    【解决方案2】:

    您可以将标题更改为:

    <head>
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <%= yield :meta %>
      <meta name="robots" content="index,follow">
      <title><%= yield :title %></title>
        <%= stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true, :cache => "cache/all" %>
        <%= javascript_include_tag "application", :async => true, "data-turbolinks-track" => true, :cache => "cache/all" %>
        <%= csrf_meta_tags %>
    </head>
    

    那么在你看来你可以这样做:

    <% content_for :meta do %>
      <meta name="description" content="blah">
    <% end %>
    
    <% content_for :title, 'My title' %>
    

    【讨论】:

    • 天啊,我浪费了很多时间,你的回答就像一个冠军!!!!!!谢谢
    猜你喜欢
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 2020-12-13
    • 1970-01-01
    相关资源
    最近更新 更多