Как динамически изменять заголовок веб-страницы?

У меня есть веб-страница, на которой реализован набор вкладок, каждая из которых отображает различный контент. Щелчки вкладки не обновляют страницу, но скрывают / отображают содержимое на стороне клиента.

Теперь есть требование изменить заголовок страницы в соответствии с вкладкой, выбранной на странице (из соображений SEO). Это возможно? Может ли кто-нибудь предложить решение для динамического изменения заголовка страницы через javascript без перезагрузки страницы?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
558
0
571 343
20
Перейти к ответу Данный вопрос помечен как решенный

Ответы 20

Код
document.title = 'test'

Я использую top.document.title для ссылки на само окно (у меня есть наборы фреймов ...)

Dror 05.01.2009 18:29

@AdrianoVaroliPiazza не нужно идти -1, а как насчет приложений, которые не требуют SEO, или как насчет веб-сайтов, которые фактически используют некоторые функции HTML5. Я имею в виду, что если вы правильно настроите свой веб-сайт и используете ajax и у вас есть резерв для не-js / сканеров, это только ускорит взаимодействие с пользователем, а также сохранит видимость соответствующего заголовка. Мне кажется, это хорошая идея.

Mathijs Segers 07.08.2013 12:59

Разве в конец ; не надо добавлять?

MineCMD 04.03.2016 00:26

@MineCMD, точка с запятой (;) требуется только в том случае, если у вас есть несколько команд в одной строке. Предполагая, что у вас нет чего-то, что удерживает команду открытой (точка, кавычка, двойная кавычка, левая фигурная скобка и т. д.), Тогда символ новой строки считается концом команды. Я не уверен, насколько это верно в случае старых браузеров, но это подтвердилось в последних версиях Chrome и Firefox. (Я не использую IE или Edge, поэтому не могу сказать о них)

Wayne 27.03.2016 09:57

@Wayne В некотором роде правильно; есть некоторые крайние случаи, когда ASI приводит к неожиданному (большинству) поведению, особенно если вы возвращаете анонимный объект.

Dave Newton 07.05.2018 22:49

Используйте document.title.

Смотрите также эта страница для рудиментарного руководства.

очень нравится ссылка, у нее есть скриншоты навигатора netscape :)

Aran Mulholland 13.06.2012 08:43

Я бы хотел, чтобы пауки не использовали javascript. Хороший способ отправить вредоносный код Google?

Lee Louviere 03.08.2012 22:08

@AdrianoVaroliPiazza Это может быть бесполезно, но оно работает и поможет людям, пришедшим из поисковых систем. Не нужно отрицать, если это правильный ответ!

its_notjack 26.06.2015 22:24

@its_notjack Это не так. Возможно, это правильный ответ на другой вопрос.

Adriano Varoli Piazza 27.06.2015 00:27

Эта тема возникла для меня первой, когда я набрал в Google «изменение заголовка javascript». Я разрабатываю веб-приложение, поэтому меня не волнует SEO.

Maciej Krawczyk 27.05.2016 13:26

Вы делаете свой SPA, и если вы заботитесь о SEO, вы делаете серверные версии своих страниц.

MarsAndBack 13.12.2017 01:44

Я не понимаю, как изменение заголовка страницы с помощью Javascript поможет SEO. Большинство (или все) поисковых роботов не запускают Javascript и будут читать только изначально загруженный заголовок, который является разметкой.

Если вы хотите помочь SEO, вам нужно будет изменить заголовок страницы в серверной части и обслуживать разные версии страницы.

согласен - это совершенно не поможет SEO, так как краулеры ничего не сделают с вашим JS

annakata 05.01.2009 18:32

Может быть, им просто нужен один заголовок, но весь контент на SE, но затем более удобная организация данных, когда вы находитесь на странице?

Kev 05.01.2009 18:32

ну, тогда они сильно противоречат всей концепции SEO.

annakata 05.01.2009 18:39

Да, не очень хорошо для SEO, но хорошо для конечного пользователя при создании закладок и т. д., Например, при обновлении заголовка страницы при изменении хэша в URL-адресе или при использовании HTML5 / JS window.history хорошо обновлять заголовок страницы и URL

rmorse 29.04.2013 15:36

См. Собственную документацию Google по сканированию приложений JavaScript developers.google.com/webmasters/ajax-crawling

codewizard 29.10.2014 20:10

«Эта рекомендация официально устарела с октября 2015 года»

David Spector 21.01.2020 01:48
Ответ принят как подходящий

Обновлять: согласно комментариям и ссылке на SearchEngineLand большинство поисковых роботов проиндексируют обновленный заголовок. Ниже ответ устарел, но код все еще применим.

You can just do something like, document.title = "This is the new page title.";, but that would totally defeat the purpose of SEO. Most crawlers aren't going to support javascript in the first place, so they will take whatever is in the element as the page title.

If you want this to be compatible with most of the important crawlers, you're going to need to actually change the title tag itself, which would involve reloading the page (PHP, or the like). You're not going to be able to get around that, if you want to change the page title in a way that a crawler can see.

Если вы используете pushState HTML5 для изменения истории уже при обновлении страницы, почему бы не обновить и заголовок. При правильной настройке поисковые роботы по-прежнему будут получать правильные результаты, и вы по-прежнему хотите, чтобы пользователь видел заголовок, соответствующий его представлению. Для большинства веб-приложений и т. д. Кажется хорошим решением продолжать использовать это. Я мог не заметить другую функцию?

Mathijs Segers 07.08.2013 12:55

К сожалению, браузеры в настоящее время игнорируют аргумент 'title' в pushState () и replaceState () переполнение стекатвитер блог

mattsahr 15.11.2013 20:53

Сканер будет следовать ссылкам (или карте сайта), поэтому, если вы можете полностью загрузить страницу с новым URL-адресом, а также перейти в это состояние с помощью javascript, то для сканера все заголовки будут действительными.

Nick Cooper 09.06.2014 16:25

На самом деле это не повлияет на цель SEO, в зависимости от того, как ваше приложение передает контент в Google. Фактически вы можете перенаправить Google в браузер без головы, обслуживая html после загрузки вашей страницы. Для каждой вкладки потребуется собственный хэшбэнг или URL-адрес, см. Собственный контент googles, чтобы сделать приложения ajax доступными для сканирования developers.google.com/webmasters/ajax-crawling

codewizard 29.10.2014 20:09

Это не совсем так. Google индексирует изменения javascript в document.title. См. searchchengineland.com/…

CpnCrunch 29.10.2015 04:11

@CpnCrunch правильный! Google проиндексирует заголовок, который был изменен с помощью JavaScript. Я не тестировал других поисковых роботов. Не всегда предполагайте, что бот не выполняет JavaScript. Я создал новый ответ ниже, а затем понял, что простое отображение и скрытие вкладок без изменения URL-адреса делает эту задачу более сложной.

yazzer 26.11.2015 00:24

@CpnCrunch правильный. Это 2016 год. SEO сильно изменилось, и Google и другие поисковые системы адаптируются к одностраничным приложениям и javascript в целом.

pilau 05.01.2016 20:50

Значит, этот ответ устарел. StackOverflow теперь должен добавить функцию «Устаревшая» для ответов: D

Allen Linatoc 14.03.2016 10:42

Только что обнаружил, что если документ пуст, например document.write(''), то document.title = 'foo' не будет работать, потому что документ не содержит титровального элемента. В приведенном выше случае у меня это сработало: document.write('<html><head><title>zymbit</title></head><bod‌​y></body></html>')

berto 29.03.2016 22:02

Исходный вопрос, возможно, был задан по причинам SEO, но у меня были и другие причины, по которым нужно динамически обновлять тег заголовка, и это был первый результат, и он быстро ответил на вопрос. Если оставить теги заголовка неизменными, когда соответствующая информация в базе данных изменилась или когда пользователь перешел на новую страницу, это может вызвать неудобства для пользователя. Так что есть причины, по которым люди могут захотеть сделать это помимо SEO.

cazort 25.07.2017 17:35

Другой вариант использования - показать прогресс чего-либо, например, загрузки или задачи.

Sandwich 17.08.2017 20:29

Хорошая идея @AllenLinatoc :) Вы можете увидеть этот вопрос: meta.stackoverflow.com/questions/272651/…

simhumileco 06.06.2019 19:31

Я хочу добиться того же эффекта, но заголовок отображается как в документе, так и на веб-странице. Я хочу, чтобы он отображался только на веб-странице.

7guyo 15.02.2020 12:01

Использование document.title - это то, как вы могли бы сделать это в JavaScript, но как это должно помочь с SEO? Боты обычно не выполняют код javascript при просмотре страниц.

Но для того, чтобы добиться успеха в SEO,

Вам необходимо перезагрузить страницу при изменении страницы, чтобы поисковая система увидела разные заголовки и т. д.

Поэтому сначала убедитесь, что перезагрузка страницы работает, а затем добавьте изменения document.title.

Вам придется повторно подать страницу с новым заголовком, чтобы поисковые роботы заметили изменение. Выполнение этого через javascript принесет пользу только читателю, сканеры не будут выполнять этот код.

Один из способов, который может помочь с SEO и при этом сохранить ваши вкладки такими, какие они есть, - это использовать именованные якоря, соответствующие каждой вкладке, например:

http://www.example.com/mypage#tab1, http://www.example.com/mypage#tab2, etc.

Вам потребуется обработка на стороне сервера для анализа URL-адреса и установки начального заголовка страницы, когда браузер отображает страницу. Я бы также сделал эту вкладку «активной». Как только страница загружена и реальный пользователь переключает вкладки, вы должны использовать javascript для изменения document.title, как заявили другие пользователи.

Возможно, вы можете загрузить в свой заголовок все заголовки вкладок в одной строке, а затем, как только вы загрузите одну из вкладок, измените заголовок с помощью javascript

пример: сначала установите заголовок на

my app | description | contact | about us | 

после загрузки одной из вкладок запускается:

document.title = "my app | tab title";

Есть много способов изменить заголовок, два основных:

Сомнительный метод

Поместите тег заголовка в HTML (например, <title>Hello</title>), а затем в javascript:

let title_el = document.querySelector("title");

if (title_el)
    title_el.innerHTML = "World";

Очевидно правильный метод

Самый простой из них - использовать метод, предоставляемый объектной моделью документа (DOM).

document.title = "Hello World";

Первый метод - это обычно то, что вы сделали бы, чтобы изменить теги, найденные в тело документа. Использование этого метода для изменения тегов метаданных, подобных тем, которые находятся в голове (например, title), в лучшем случае является сомнительной практикой, не является идиоматическим, не очень хорошим стилем для начала и может даже быть непереносимым. Однако вы можете быть уверены в одном: это будет раздражать других разработчиков, если они увидят title.innerHTML = ... в коде, который они поддерживают.

хочу следует использовать во втором методе. Это свойство предоставлено в Спецификации DOM специально предназначено, как следует из названия, для изменения заголовка.

Также обратите внимание, что если вы работаете с XUL, вы можете проверить, загружен ли документ, прежде чем пытаться установить или получить заголовок, иначе вы вызываете undefined behavior (здесь драконы), что само по себе является пугающей концепцией. . Это может происходить, а может и не происходить через JavaScript, поскольку документация по DOM не обязательно относится к JavaScript. Но XUL - совсем другое дело, поэтому я отвлекся.

Кстати о .innerHTML

Следует иметь в виду, что использование .innerHTML обычно небрежно. Вместо этого используйте appendChild.

Хотя два случая, когда я по-прежнему считаю .innerHTML полезным, включают вставку простого текста в небольшой элемент ...

label.innerHTML = "Hello World";
// as opposed to... 
label.appendChild(document.createTextNode("Hello World"));
// example:
el.appendChild(function(){
    let el = document.createElement("span");
    el.className = "label";
    el.innerHTML = label_text;
    return el;
}());

... и очистка контейнера ...

container.innerHTML = "";
// as opposed to... umm... okay, I guess I'm rolling my own
[...container.childNodes].forEach(function(child){
    container.removeChild(child);
});

Я нашел идеальное слово для предупреждения с помощью метода 1: undefined behavior.

Braden Best 19.02.2014 22:17

Это абсолютно должен быть отвергнутым. Метод 1 - это неопределенное поведение, как указано выше (и никакие заявления об отказе от ответственности не оправдывают его упоминание); также, document.querySelector.apply, серьезно?

Andrey Tarantsov 29.02.2016 10:31

@AndreyTarantsov никакие оговорки не оправдают упоминания об этом? Как насчет того, чтобы упомянуть об этом, чтобы люди знали, чего НЕ делать? Мы учимся на своих ошибках, поэтому советовать кому-то не упоминать что-то ошибочное - плохой совет. Кроме того, это действительно старый ответ (буквально один из первых ответов, которые я написал на этом сайте), так что "серьезно?" было ненужным. Вы не можете знать, что изменилось в моих знаниях и опыте за последние три года.

Braden Best 29.02.2016 11:02

Я просто хочу кое-что добавить: изменение заголовка с помощью JavaScript действительно полезно, если вы обновляете базу данных с помощью AJAX, поэтому заголовок изменяется без необходимости обновлять страницу. Название на самом деле изменяется с помощью языка сценариев на стороне сервера, но изменение его с помощью JavaScript - это всего лишь удобство использования и элемент пользовательского интерфейса, который делает пользовательский опыт более приятным и плавным.

Теперь, если вы меняете заголовок с помощью JavaScript просто ради удовольствия, вам не следует этого делать.

Самый простой способ - удалить тег <title> из index.html и включить

<head>
<title> Website - The page </title></head>

на каждой странице в сети. Пауки найдут это и будут показаны в результатах поиска :)

Поскольку поисковые системы игнорируют большую часть javascript, вам нужно сделать так, чтобы поисковые системы могли сканировать с использованием вкладок без использования Ajax. Сделайте каждую вкладку ссылкой с href, которая загружает всю страницу с выбранной вкладкой. Тогда страница может иметь этот заголовок в теге.

Обработчик событий onclick по-прежнему может загружать страницы через ajax для просмотра людьми.

Чтобы просматривать страницы так, как их видят большинство поисковых систем, отключите Javascript в своем браузере и попробуйте сделать так, чтобы при нажатии на вкладки загружалась страница с выбранной вкладкой и правильным заголовком.

Если вы загружаете через ajax и хотите динамически изменять заголовок страницы только с помощью Javascript, выполните:

document.title = 'Put the new title here';

Однако поисковые системы не увидят это изменение в javascript.

«Чтобы увидеть страницы такими, какими их видит Google, отключите Javascript в своем браузере и постарайтесь сделать так, чтобы при нажатии на вкладки загружалась страница с выбранной вкладкой и правильным заголовком». - это хороший подход очень при разработке SEO-дружественных AJAX-сайтов.
John Weisz 14.03.2015 19:57

На одном из моих сайтов Google проиндексировал массу документов, которые можно было обнаружить только с помощью ajax. Хороший подход, но не полагайтесь на него как на неблагоприятное решение, если вы хотите скрыть его от роботов.

Alex Khimich 15.01.2021 22:12

Вы можете использовать JavaScript. Некоторые боты, включая Google, будут выполнять JavaScript в интересах SEO (показывая правильный заголовок в поисковой выдаче).

document.title = "Google will run this JS and show the title in the search results!";

Однако это более сложно, поскольку вы показываете и скрываете вкладки без обновления страницы или изменения URL-адреса. Возможно, добавление якоря поможет, как заявили другие. Возможно, мне придется отозвать свой ответ.

Статьи о положительных результатах: http://www.aukseo.co.uk/use-javascript-to-generate-seo-friendly-title-tags-1275/http://www.ifinity.com.au/2012/10/04/Changing_a_Page_Title_with_Javascript_to_update_a_Google_SERP_Entry

Не всегда предполагайте, что бот не будет выполнять JavaScript. http://searchengineland.com/tested-googlebot-crawls-javascript-heres-learned-220157 Google и другие поисковые системы знают, что лучшие результаты для индексации - это результаты, которые фактический конечный пользователь увидит в своем браузере, включая JavaScript.

Хочу передать привет из будущего :) Произошедшее недавно:

  1. Google теперь использует javascript, который есть на вашем веб-сайте.
  2. Теперь люди используют такие вещи, как React.js, Ember и Angular, для выполнения сложных задач javascript на странице, и он все еще индексируется Google1.
  3. вы можете использовать api истории html5 (pushState, response-router, ember, angular), который позволяет вам делать такие вещи, как иметь отдельные URL-адреса для каждой вкладки, которую вы хотите открыть, и Google будет индексировать это 1

Итак, чтобы ответить на ваш вопрос, вы можете безопасно изменить заголовок и другие метатеги из javascript (вы также можете добавить что-то вроде https://prerender.io, если хотите поддерживать поисковые системы, отличные от Google), просто сделайте их доступными как отдельные URL-адреса (иначе как Google узнает, что это разные страницы для отображения в результатах поиска?). Изменить теги, связанные с SEO (после того, как пользователь изменил страницу, щелкнув что-либо), очень просто:

if (document.title != newTitle) {
    document.title = newTitle;
}
$('meta[name = "description"]').attr("content", newDescription);

Просто убедитесь, что css и javascript не заблокированы в robots.txt, вы можете использовать службу Просмотреть как Google в Google Webmaster Tools.

1: http://searchengineland.com/tested-googlebot-crawls-javascript-heres-learned-220157

Привет будущему! Хотел спросить, почему вы все еще используете там jQuery и зачем это сравнение нужно (document.title != newTitle)

Volodymyr I. 04.12.2020 20:31

это было будущее в 2016 году, заметьте :) сравнение есть на тот случай, если заголовок не изменился при переходе между страницами, я думаю, описание могло остаться прежним, но оно было просто задумано как короткая демонстрация

JLarky 05.12.2020 08:56

Современные краулеры могут анализировать динамически сгенерированный контент в DOM, поэтому использование document.title = ... совершенно нормально.

для тех, кто ищет версию npm, для этого есть целая библиотека:

npm install --save react-document-meta


import React from 'react';
import DocumentMeta from 'react-document-meta';

class Example extends React.Component {
  render() {
    const meta = {
      title: 'Some Meta Title',
      description: 'I am a description, and I can create multiple tags',
      canonical: 'http://example.com/path/to/page',
      meta: {
        charset: 'utf-8',
        name: {
          keywords: 'react,meta,document,html,tags'
        }
      }
    };

    return (
      <div>
        <DocumentMeta {...meta} />
        <h1>Hello World!</h1>
      </div>
    );
  }
}

React.render(<Example />, document.getElementById('root'));

Используйте document.title. Это будет полезно для большинства вещей, но разрушит SEO на вашем сайте.

Пример:

document.write("title - " + document.title + "<br>");
document.title = "New title here!";
// Notice: this will defeat purpose of SEO. Not useful for SEO-friendly sites.
document.write("title - " + document.title + "<br>");
body {
  font-family: Consolas, 'Courier New', monospace;
}
<!DOCTYPE html>
<html>
  <head><title>Old title</title></head>
  <body><p>
    Lorem ipsum dolor sit amet, at movet detraxit mediocritatem eam, nam iusto abhorreant ne. Ei pro          debet adolescens voluptaria, eu minim scaevola conceptam vel. Vim ea torquatos constituto                complectitur, usu eu civibus insolens eleifend. Ex ubique quaerendum his.

  </p></body>
</html>

Google упомянул, что все файлы js визуализированы, но на самом деле я потерял свой заголовок и другие метатеги, которые были предоставлены Reactjs на этот сайт, и фактически потерял свою позицию в Google! Я много искал, но мне кажется, что все страницы должны быть предварительно обработаны или использовать SSR (серверный рендеринг), чтобы их протоколы были оптимизированы для SEO!
Он расширяется до Reactjs, Angularjs и т. д.
Короче говоря, каждая страница с просмотреть исходный код страницы в браузере индексируется всеми роботами, если это не возможно, Google может индексировать, но другие пропускают индексацию!

Я использую отдельный заголовок и включаю его с помощью php, в заголовке я использую:

<?php
if (!isset($title)){
    $title = "Your Title";
  }
  else {
    $title = $title;
  }
 ?>
<head>
<title><?php echo $title; ?></title>

Затем на каждой странице я использую:

<?php
  $title = "Your Title - Page";
  include( "./header.php" );
?>

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