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