Название страницы не изменяется с помощью history.pushState

Я только что открыл пустую HTML-страницу с небольшим количеством базовых тегов (таких как html, body, head и т. д.) в Google Chrome и попытался выполнить следующую команду в консоли:

history.pushState(null, 'my test title', '/test/url');

События истории работают нормально, но заголовок страницы остается неизменным. Это нормально? Должен ли я каждый раз менять его вручную? Если да, то почему в методе pushState() есть такой параметр, как заголовок?


person avasin    schedule 19.12.2012    source источник
comment
По-видимому, это известная проблема современных браузеров — ни один из них не поддерживает автоматическую замену. engineering.twitter.com/2012/12/   -  person Kirill    schedule 07.03.2013
comment
@Kirill, работает в Safari и Opera, см. stackoverflow.com/q/26316325/632951 . Но не работает в Chrome/FireFox, см. stackoverflow.com/q/26324990/632951.   -  person Pacerier    schedule 12.10.2014


Ответы (4)


Кажется, текущие браузеры не поддерживают атрибут заголовка pushState. Вы можете легко добиться того же, установив его в JS.

document.title = "This is the new page title.";
person Kirill    schedule 07.03.2013
comment
Как насчет того, когда вы нажмете кнопку «Назад»? Он остается таким же. - person siniradam; 16.07.2014
comment
@ Кирилл, как это получило 10 голосов? Это не работает. Не работает! Все записи истории будут иметь одинаковый заголовок, см. stackoverflow.com/q/ 26324990/632951 - person Pacerier; 12.10.2014
comment
Не рекомендуется устанавливать заголовок с помощью document.title, если вы хотите хорошего SEO. - person Rahul Desai; 27.03.2015
comment
Когда люди жалуются, что это не работает по нескольким причинам, это следует использовать в сочетании с pushState и replaceState. В частности, это должно работать в прослушивателе popstate, чтобы убедиться, что document.title обновляется соответствующим образом. - person Leonard; 06.11.2015
comment
@RahulDesai: Как правило, люди, которые используют заголовок/историю, делают это для оптимизации производительности (архитектура оболочки, бесконечное пейджинг и т. д.). Такие страницы уже невидимы для поисковых систем, поэтому в этот момент нет смысла беспокоиться о SEO. Обычно каждый URL-адрес, созданный с помощью API истории, также будет действительным автономным URL-адресом с правильным заголовком; document.title используется только при имитации навигации, чтобы избежать полного обновления страницы. - person Brian; 15.04.2019

Не рекомендуется устанавливать заголовок с помощью document.title, если вы хотите хорошего SEO.

Вы можете рассмотреть возможность использования History.js.

History.js изящно поддерживает API истории/состояния HTML5 (pushState, replaceState, onPopState) во всех браузеры. Включая постоянную поддержку данных, заголовков, replaceState. Поддерживает jQuery, MooTools и Prototype.

Демо

Источник

person Rahul Desai    schedule 27.03.2015
comment
Это, конечно, сработало намного лучше для меня... решило кучу проблем. - person Stonetip; 30.10.2015
comment
Какое отношение SEO имеет к javascript? У меня сложилось впечатление, что pushState следует использовать только для предотвращения перезагрузки при запуске JS на странице. - person Will S; 14.03.2016
comment
History.js был действительно большим усилием и хорошим проектом, но, к сожалению, он не развивается и даже не поддерживается в течение многих лет. У него куча проблем и багов. Я бы настоятельно рекомендовал против этого, если кому-то действительно не нужна широкая поддержка браузера (которая в настоящее время становится менее актуальной, IMO). - person Zoltán Tamási; 31.08.2016
comment
История делает то же самое... просто пытается изменить элементы заголовка, если нет, то устанавливает их с помощью DOM. - person Maxim; 26.05.2017

Следующий код изменит заголовок страницы при использовании history.pushState

$(document).prop('title','your page title');

Он также работает с IE.

person S.Akruwala    schedule 17.08.2016
comment
ненужное использование jQuery - person Zander Brown; 01.06.2017
comment
@AlexB: пожалуйста, предложите лучший способ, если у вас есть! требование также изменить заголовок страницы. теперь, если вы уже используете js с помощью history.push, то в чем проблема с использованием jquery для установки заголовка? - person S.Akruwala; 15.06.2017
comment
Поскольку jQuery не нужен для history.push, а document.title = 'your page title'; отлично справляется с этой задачей (и, по сути, это то, что jQuery делает внутри) - person Zander Brown; 15.06.2017

В настоящее время заголовок изменяется во всех современных браузерах с помощью history.push(), но вы должны изменить URL-адрес. Если вы добавите только «#locationhash», это не изменит заголовок, что имеет смысл.

person Martin Zvarík    schedule 19.11.2018