我有一个启用了turbo-links的Rails 4应用程序,但是我无法在更改页面时刷新元标记(不是完全刷新)。我读到在加载turbo-links的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"
助手/ 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')
由于
答案 0 :(得分:21)
Turbolinks旨在使<head>
标记保持相同,并仅通过AJAX请求将<body>
标记替换为所请求页面的内容。由于您的<meta>
代码位于<head>
,因此不会通过Turbolinks请求更改这些代码。
从SEO的角度来看,您无需担心在Turbolinks请求中更新<meta>
标签,因为搜索引擎抓取工具将始终执行完整页面请求,并且不会执行Turbolinks javascript。
从用户的角度来看,<head>
中唯一需要为每个请求更改的标记是<title>
标记,因此对Turbolinks本身内置了特殊处理。
这个“问题”已被提出并被击落几次,每次被DHH自己宣布为非问题,所以我不会指望这种行为很快就会改变。
见:
答案 1 :(得分:2)
这是一个TurboLinks问题
根据设计,Turbolinks基本上保持您网页的<head>
相同&amp;如果它将保持不变(您使用相同的控制器/操作),则通过ajax调用文档的<body>
。保持应用程序性能是一件疯狂的事情
这是good explanation of Turbolinks
我在使用Javascript时遇到了类似的问题,并且能够使用Jquery-Turbolinks gem来保持JS渲染
对于你的meta标签,虽然我不知道手头的解决方案,但我设法找到了一个可以从中受益的体面宝石:MetaMagic
。它允许您在视图中定义元标记,类似于content_block工具的工作方式。这应该加载到每个http请求
答案 2 :(得分:1)
答案 3 :(得分:0)
“使用pjax”部分