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;)

Он заменит метатеги и каноническую ссылку!

https://github.com/philklei/turbolinks

Посмотрите на мета-теги драгоценный камень

Раздел "Использование с pjax"

Другие вопросы по тегам