【问题标题】:Rails 4 and Turbolinks - Meta Tags not changingRails 4 和 Turbolinks - 元标记不变
【发布时间】:2013-10-28 03:24:56
【问题描述】:

我有一个启用了 turbo-links 的 Rails 4 应用程序,但是在更改页面时我无法刷新元标记(不是完全刷新)。我读到需要在加载涡轮链接的 javascript 之前包含元标记,但它没有效果。完全刷新可以完成这项工作,但不幸的是,这不是我要搜索的内容。

布局/application.html.haml

%html
  %head
    %title= "Title"
    - if content_for?(:meta_description)
      %meta{content: (yield :meta_description), name: "description"}/
      %meta{content: (yield :meta_keywords), name: "keywords"}/
    = stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true 
    = javascript_include_tag "application", "data-turbolinks-track" => true

    = csrf_meta_tags
  %body{class: params[:controller].gsub("/", "-"), id: 'top'}
    = render "shared/header"
    .body-content
      = render "shared/flash"
      = yield
    = render "shared/footer"
    = render "shared/analytics"

helpers/application_helper.rb

def meta_tag(标题,描述)

content_for :meta_keywords do
  title
end

content_for :meta_description do
  description
end   

结束

我就是这样称呼他们的

= meta_tag('here s my title', 'and the keywords')

谢谢

【问题讨论】:

  • 我知道这并没有真正帮助或回答问题,但大多数搜索引擎不再使用元关键字。
  • 为什么需要元标记(除了 csrf 令牌)在客户端刷新?

标签: ruby-on-rails ruby-on-rails-4 turbolinks


【解决方案1】:

这是一个 TurboLinks 问题

根据设计,Turbolinks 基本上保持页面的<head> 不变,如果要保持不变(您使用相同的控制器/操作),则通过 ajax 调用文档的<body>。保持应用程序性能是一件很疯狂的事情

这是good explanation of Turbolinks


我在使用 Javascript 时遇到过与此类似的问题,并且能够使用 Jquery-Turbolinks gem 来保持 JS 渲染

对于您的元标记,虽然我不知道手头的解决方案,但我设法找到了一个不错的宝石,您可能会从中受益:MetaMagic。它允许您在视图中定义元标记,有点像 content_block 工具的工作方式。这应该在每个 http 请求上加载

【讨论】:

  • 我试过 metamagic 但没有帮助。据我了解, metamagic 基本上做同样的事情,标题中的“yield”和视图中的“content_for”,所以标题中的元标记仍然没有改变。无论如何,谢谢你的回答:)
  • 没问题 - 如果我发现了什么,我会为你更新答案!
  • 我现在也有类似的问题。这个话题有什么新东西吗?
  • 怎么了?也许我们可以提供帮助
  • 没什么新鲜的,我还是没有答案。无论如何,好消息是 google 从网页中获取所有链接,并分别呈现每个链接,因此从 SEO 的角度来看,元标记仍然可以发挥作用。
【解决方案2】:

看看meta-tags gem

“与 pjax 一起使用”部分

【讨论】:

    【解决方案3】:

    Turbolinks 的工作原理

    Turbolinks 旨在保持<head> 标记相同,并且仅将<body> 标记替换为通过AJAX 请求请求页面的内容。由于您的 <meta> 标签位于 <head> 中,因此不会通过 Turbolinks 请求更改它们。

    SEO 怎么样?

    从 SEO 的角度来看,您无需担心 Turbolinks 请求会更新 <meta> 标签,因为搜索引擎爬虫将始终执行整页请求并且不会执行 Turbolinks javascript。

    从用户的角度来看,<head> 中唯一需要为每个请求更改的标记是<title> 标记,因此 Turbolinks 本身内置了对此的特殊处理。

    这种行为会改变吗?

    这个“问题”已经被提出并驳回了几次,每次都被 DHH 自己宣布为非问题,所以我不会指望这种行为会很快改变。

    见:

    【讨论】:

    • 我已禁用 turbolinks。但是,我的页面仍然没有完全重新加载。它不会更改 head 标签,也不会通过 content_for 标签加载特定于页面的 css。你能提出可能是什么问题吗?
    • 我很乐意帮助您解决您的问题,但您应该将其作为单独的 SO 帖子发布,以便社区的其他成员也能提供帮助。请提供尽可能多的详细信息,包括您如何禁用 turbo 链接。发布新问题的链接,我会尽力提供帮助。
    • <head> 中受影响的另一个标签是 <meta property="og:image" content="...。没有人更改此标签,为 facebook 获得一个不错的“共享者”?
    • 今天仍然如此吗? “搜索引擎爬虫将始终执行整页请求,并且不会执行 Turbolinks javascript”
    • 与早期版本不同,从 v5 开始的 Turbolinks 版本会更新元标记,以及文档 中的任何其他临时元素。来源:github.com/turbolinks/turbolinks/issues/…
    【解决方案4】:

    我扩展了当前的 turbolinks js ;)

    它将替换元标记和规范链接!

    https://github.com/philklei/turbolinks

    【讨论】:

    • 非常感谢您分享这个。尽管指向非现场页面的链接可能会失效,但请考虑在此处添加或解释您的扩展程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 2015-08-21
    相关资源
    最近更新 更多