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

Спасибо


person vladCovaliov    schedule 19.10.2013    source источник
comment
Я знаю, что на самом деле это не помогает и не отвечает на вопрос, но большинство поисковых систем больше не используют мета-ключевые слова.   -  person    schedule 30.12.2013
comment
зачем вам нужны метатеги (кроме токена csrf) для обновления на стороне клиента?   -  person nurettin    schedule 02.10.2014


Ответы (4)


Как работает Турболинкс

Turbolinks предназначен для сохранения тега <head> и просто заменяет тег <body> содержимым запрошенной страницы через запрос AJAX. Поскольку ваши теги <meta> расположены в <head>, они не будут изменены через запрос Turbolinks.

Как насчет SEO?

С точки зрения SEO вам не нужно беспокоиться об обновлении тегов <meta> в запросе Turbolinks, потому что поисковые роботы всегда будут выполнять запрос на полную страницу и не будут выполнять javascript Turbolinks.

С точки зрения пользователя, единственный тег в <head>, который нужно менять для каждого запроса, — это тег <title>, поэтому в самой Turbolinks встроена специальная обработка для этого.

Изменится ли когда-нибудь это поведение?

Эта «проблема» поднималась и отбрасывалась пару раз, каждый раз сам DHH объявлял ее неактуальной, поэтому я бы не стал рассчитывать на то, что это поведение изменится в ближайшее время.

Видеть:

person Carlos Ramirez III    schedule 27.02.2014
comment
Я отключил турболинки. Но все же моя страница не перезагружается полностью. Он не изменяет тег head и не загружает css для конкретной страницы через тег content_for. Не подскажете, в чем может быть проблема? - person Sonali Gupta; 06.03.2015
comment
Я был бы рад помочь вам с вашей проблемой, но вы должны опубликовать ее в виде отдельного сообщения SO, чтобы остальная часть сообщества также могла помочь. Пожалуйста, предоставьте как можно больше подробностей, включая то, как вы отключили турбо-ссылки. Опубликуйте ссылку на новый вопрос, и я сделаю все возможное, чтобы помочь. - person Carlos Ramirez III; 06.03.2015
comment
Другой затронутый тег в <head> — это <meta property="og:image" content="... . никто не меняет этот тег, чтобы получить хороший разделитель для фейсбука? - person Albert Català; 06.04.2016
comment
Верно ли это и сегодня? сканеры поисковых систем всегда будут выполнять полный запрос страницы и не будут выполнять javascript Turbolinks - person bryanus; 12.08.2016
comment
В отличие от более ранних версий, версии Turbolinks, начиная с версии 5, обновляют метатеги и любые другие временные элементы в документе ‹head›. Источник: github.com/turbolinks/turbolinks/issues/ - person Sbbs; 28.12.2020

Это проблема TurboLinks

По дизайну Turbolinks в основном сохраняет <head> вашей страницы одинаковым и вызывает <body> вашего документа через ajax, если он останется прежним (вы используете тот же контроллер/действие). Это какая-то сумасшедшая вещь для поддержания производительности приложений

Вот хорошее объяснение Turbolinks


У меня была аналогичная проблема с Javascript, и я смог использовать Jquery-Turbolinks гем, чтобы сохранить JS-рендеринг

Для ваших мета-тегов, хотя я не знаю решения навскидку, мне удалось найти достойную жемчужину, которая может вам пригодиться: MetaMagic. Это позволяет вам определять метатеги в представлении, подобно тому, как работает средство content_block. Это должно быть загружено при каждом HTTP-запросе.

person Richard Peck    schedule 19.10.2013
comment
Я пробовал метамагию, но это не помогает. Насколько я понимаю, метамагия делает в основном то же самое, yield в шапке, а content_for в представлениях, так что метатеги из шапки пока без изменений. В любом случае спасибо за ответ :) - person vladCovaliov; 19.10.2013
comment
Нет проблем - если я что-нибудь найду, я обновлю ответ для вас! - person Richard Peck; 19.10.2013
comment
У меня сейчас аналогичная проблема. Что-то новое по этой теме? - person MarkoHiel; 21.10.2013
comment
Как дела? Может быть, мы можем помочь - person Richard Peck; 21.10.2013
comment
Ничего нового, у меня до сих пор нет ответа. В любом случае, хорошая новость заключается в том, что Google берет все ссылки с веб-страницы и отображает каждую отдельно, поэтому с точки зрения SEO метатеги по-прежнему выполняют свою работу. - person vladCovaliov; 22.10.2013

Продлеваю текущие турболинки js ;)

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

https://github.com/philklei/turbolinks

person Philip Kleimeyer    schedule 27.05.2014
comment
Большое спасибо, что поделились этим. Хотя ссылки на сторонние страницы могут стать недействительными, рассмотрите возможность добавления или объяснения вашего расширения здесь. - person Sebastian Lange; 27.05.2014

Взгляните на метатеги

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

person paxer    schedule 27.02.2014