Rails 4 и Turbolinks - метатеки не меняются
У меня есть приложение 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"
хелперы/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')
Спасибо
Ответы
Ответ 1
Как работают Turbolinks
Turbolinks предназначен для сохранения тега <head>
того же самого и просто заменяет тег <body>
содержимым запрашиваемой страницы через запрос AJAX. Поскольку теги <meta>
расположены в <head>
, они не будут изменены с помощью запроса Turbolinks.
Как насчет SEO?
С точки зрения SEO вам не нужно беспокоиться о тегах <meta>
, которые обновляются в запросе Turbolinks, потому что поисковые роботы всегда будут выполнять полный запрос страницы и не будут запускать javascript Turbolinks.
С точки зрения пользователя единственным тегом в <head>
, который необходимо изменить для каждого запроса, является тег <title>
, поэтому специальная обработка для этого была встроена в Turbolinks.
Будет ли это изменение изменяться?
Эта "проблема" была поднята и сбита пару раз, каждый раз объявляя себя не самой проблемой самим DHH, поэтому я не буду рассчитывать на то, что это изменение изменится в ближайшее время.
Смотрите:
Ответ 2
Это проблема с TurboLinks
По дизайну Turbolinks в основном сохраняет <head>
вашей страницы одинаково и вызывает <body>
вашего документа через ajax, если он останется прежним (вы используете один и тот же контроллер/действие). Это безумие для поддержания производительности приложений
Вот хорошее объяснение Turbolinks
У меня была аналогичная проблема с Javascript, и я смог использовать Jquery-Turbolinks для сохранения JS-рендеринга
Для ваших метатег, хотя я не знаю решения от руки, мне удалось найти достойный камень, который вам может пригодиться: MetaMagic
. Это позволяет вам определять метатеги в представлении, вроде того, как работает объект content_block. Это должно быть загружено на каждый запрос http
Ответ 3
Я расширяю текущие турбонауки js;)
Он заменит метатеги и каноническую ссылку!
https://github.com/philklei/turbolinks
Ответ 4
Посмотрите метка метатег
"Использование с pjax"