웹 페이지 제목을 동적으로 변경하는 방법은 무엇입니까?


510

각기 다른 내용을 보여주는 일련의 탭을 구현하는 웹 페이지가 있습니다. 탭 클릭은 페이지를 새로 고치지 않지만 클라이언트 측에서 내용을 숨기거나 숨기기 해제합니다.

이제 페이지에서 선택한 탭에 따라 페이지 제목을 변경해야합니다 (SEO 이유로). 이것이 가능한가? 누군가 페이지를 다시로드하지 않고 자바 스크립트를 통해 페이지 제목을 동적으로 변경하는 솔루션을 제안 할 수 있습니까?

답변:


709

업데이트 : SearchEngineL 에 대한 의견과 참조에 따라 대부분의 웹 크롤러는 업데이트 된 제목을 색인합니다. 아래 답변은 더 이상 사용되지 않지만 코드는 여전히 적용 가능합니다.

, 같은 일을 할 수 document.title = "This is the new page title.";있지만 SEO의 목적을 완전히 상실합니다. 대부분의 크롤러는 처음에 자바 스크립트를 지원하지 않으므로 요소에있는 모든 것을 페이지 제목으로 가져갑니다.

이것이 대부분의 중요한 크롤러와 호환되도록하려면 실제로 제목 태그 자체를 변경해야합니다. 여기에는 페이지 다시로드 (PHP 등)가 포함됩니다. 크롤러가 볼 수있는 방식으로 페이지 제목을 변경하려는 경우이 문제를 해결할 수 없습니다.


29
이미 페이지를 업데이트 할 때 html5의 pushState를 사용하여 기록을 변경하는 경우 제목도 업데이트하십시오. 크롤러를 올바르게 설정하면 여전히 올바른 결과를 얻을 수 있으며 사용자는 여전히 자신이보고있는보기와 일치하는 제목을 볼 수 있습니다. 대부분의 웹 응용 프로그램 등에서는 이것을 계속 사용하는 것이 좋습니다. 그래도 다른 기능을 간과했을 수 있습니까?
Mathijs Segers

31
이것은 사실이 아닙니다. Google은 javascript 변경 사항을 document.title에 색인화합니다. 참조 searchengineland.com/...
CpnCrunch

7
@CpnCrunch가 정확합니다! Google은 JavaScript에 의해 변경된 제목을 색인합니다. 다른 검색 로봇에서는 테스트하지 않았지만 항상 로봇이 JavaScript를 실행하지 않는다고 가정하지는 마십시오. 아래에 새 답변을 만든 다음 URL을 변경하지 않고 탭을 표시하거나 숨기면 더 복잡해집니다.
yazzer

10
@CpnCrunch가 정확합니다. SEO는 많은 변화를 겪었으며 Google 및 기타 검색 엔진은 일반적으로 단일 페이지 앱 및 자바 스크립트에 적응하고 있습니다.
pilau

34
따라서이 답변은 매우 쓸모가 없다는 것을 의미합니다. StackOverflow는 이제 답변에 "사용되지 않는"기능을 추가해야합니다. D
Allen Linatoc

167

나는 미래에서 인사하고 싶다 :) 최근에 일어난 일들 :

  1. 구글은 이제 귀하의 웹 사이트에있는 자바 스크립트를 실행 1
  2. 사람들은 이제 페이지에서 복잡한 자바 스크립트 작업을 실행하기 위해 React.js, Ember 및 Angular와 같은 것을 사용하며 여전히 Google에서 색인을 생성합니다 1
  3. html5 기록 API (pushState, react-router, ember, angular)를 사용하면 열려는 각 탭에 대해 별도의 URL을 갖는 것과 같은 작업을 수행 할 수 있으며 Google은 색인을 생성합니다 1

따라서 귀하의 질문에 대답하기 위해 자바 스크립트에서 제목 및 기타 메타 태그를 안전하게 변경할 수 있습니다 ( Google 검색 엔진 이외의 엔진을 지원하려면 https://prerender.io 와 같은 것을 추가 할 수 있음 ), 별도의 URL로 액세스 할 수있게하십시오 ( 그렇지 않으면 Google이 검색 결과에 표시 할 다른 페이지임을 어떻게 알 수 있습니까?). SEO 관련 태그 변경 (사용자가 무언가를 클릭하여 페이지를 변경 한 후)은 간단합니다.

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

robots.txt에서 CSS와 자바 스크립트가 차단되지 않도록 하세요. Google 웹 마스터 도구에서 Fetch as Google 서비스를 사용할 수 있습니다 .

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


47

Javascript를 통해 페이지 제목을 변경하면 SEO에 어떻게 도움이되는지 알 수 없습니다. 대부분의 (또는 모든) 검색 봇은 Javascript를 실행하지 않으며 마크 업인 처음로드 된 제목 만 읽습니다.

SEO를 돕고 싶다면 백엔드에서 페이지 제목을 변경하고 다른 버전의 페이지를 제공해야합니다.


3
동의-크롤러가 JS와 아무런 작업을 수행하지 않으므로 SEO에 전혀 도움이되지 않습니다.
annakata

어쩌면 그들은 하나의 제목을 원하고 SE의 모든 내용을 원하지만 페이지에 있으면 더 친숙한 데이터 구성을 원할 것입니다.
Kev

그럼 그들은 SEO의 전체 개념에 대해 매우 많이 가고 있습니다
annakata

4
예, 실제로 SEO에는 좋지 않지만 URL 등의 해시가 변경 될 때 window.history페이지 제목을 업데이트 하거나 HTML5 / JS를 사용하여 페이지 제목과 URL을 업데이트하는 데 유용 할 때와 같이 북마크 할 때 최종 사용자 에게 적합
acSlater

자바 스크립트 애플리케이션 크롤링에 대한 Google 자체 문서를 참조하십시오 developers.google.com/webmasters/ajax-crawling
codewizard

43

사용하십시오 document.title.

기초 튜토리얼 도이 페이지 를 참조하십시오 .


10
링크를 사랑, 그것은 넷스케이프 네비게이터 스크린 샷 : 있어요
아란 멀홀랜드을

스파이더가 자바 스크립트를 사용하지 않기를 바랍니다. Google 악성 코드를 보내는 좋은 방법?
Lee Louviere

@AdrianoVaroliPiazza 쓸모는 없지만 작동하지만 검색 엔진에서 오는 사람들을 도울 것입니다. 정답이라면 공감할 필요가 없습니다!
its_notjack

@its_notjack 아닙니다. 다른 질문에 대한 정답 일 수 있습니다.
Adriano Varoli Piazza

1
이 주제는 Google에서 "자바 스크립트 변경 제목"을 입력했을 때 가장 먼저 나왔습니다. SEO에 관심이 없도록 웹 앱을 개발 중입니다.
Maciej Krawczyk

36

코드는
document.title = 'test'


3
창 자체를 참조하기 위해 top.document.title을 사용합니다 (프레임 세트가 있습니다 ...)
Dror

2
@AdrianoVaroliPiazza -1로 갈 필요는 없습니다. SEO가 필요없는 응용 프로그램이나 실제로 일부 HTML5 기능을 사용하는 웹 사이트는 어떻습니까? 웹 사이트를 올바르게 설정하고 아약스를 사용하고 비 JS / 크롤러를 대체하는 경우 사용자 경험을 가속화하고 일치하는 제목을 계속 표시합니다. 나에게 좋은 생각 인 것 같습니다.
Mathijs Segers

;끝에 a 를 추가 할 필요가 없습니까?
MineCMD

1
@MineCMD, 세미콜론 (;)은 한 줄에 여러 명령이있는 경우에만 필요합니다. 명령을 열어 놓은 항목 (점, 따옴표, 큰 따옴표, 왼쪽 괄호 등)이 없다고 가정하면 줄 바꿈이 명령의 끝으로 간주됩니다. 오래된 브라우저의 경우 이것이 사실인지 확실하지 않지만 최신 버전의 Chrome 및 Firefox에서는 사실임이 입증되었습니다. (나는 IE 또는 Edge를 사용하지 않으므로 말할 수 없습니다)
Wayne

@ 웨인 다소 수정; 특히 익명 개체를 반환하는 경우 ASI가 예기치 않은 (대부분의) 동작으로 이어지는 일부 경우가 있습니다.
Dave Newton

18

제목을 변경할 수있는 방법은 여러 가지가 있습니다. 주요 두 가지는 다음과 같습니다.

의심스러운 방법

HTML (예 <title>Hello</title>:)에 자바 스크립트에 제목 태그를 넣습니다 .

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

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

분명히 올바른 방법

가장 간단한 방법은 DOM (Document Object Model)에서 제공하는 방법을 실제로 사용하는 것입니다

document.title = "Hello World";

전자의 방법은 일반적으로 문서 본문 에있는 태그를 변경하기 위해 수행하는 방법입니다 . 이 방법을 사용하여 머리에서 발견되는 것과 같은 메타 데이터 태그를 수정하는 title것은 기껏해야 의심스러운 관행이 아니며, 관용적이지 않으며, 스타일이 좋지 않으며, 휴대하기가 쉽지 않을 수도 있습니다. 그러나 당신이 확신 할 수있는 한 가지는 다른 개발자 title.innerHTML = ...들이 그들이 관리하고있는 코드에서 볼 경우 성가 시게된다는 것입니다 .

당신 가고 싶은 것은 후자의 방법입니다. 이 속성은 이름에서 알 수 있듯이 제목을 변경하기 위해 DOM 사양에 구체적으로 제공됩니다 .

XUL로 작업하는 경우 제목을 설정하거나 가져 오기 전에 문서가로드되었는지 확인해야합니다. 그렇지 않으면 undefined behavior자체적으로 무서운 개념 인 호출 (여기서는 용)이 있습니다. DOM의 문서가 반드시 JavaScript와 관련이있는 것은 아니므로 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
방법 1로 경고에 대한 완벽한 단어를 찾았습니다 undefined behavior.
Braden Best

1
이것은 절대적 으로 downvoted 해야 합니다. 방법 1은 위에서 언급 한 바와 같이 정의되지 않은 동작입니다 (면책 조항에 대한 언급은 정당하지 않습니다). 또한 document.querySelector.apply진심으로?
Andrey Tarantsov

3
@AndreyTarantsov 면책 조항에 대해 언급하지 않을 것입니까? 사람들이하지 말아야 할 것을 알 수 있도록 언급하는 것은 어떻습니까? 우리는 우리의 실수로부터 배우므로, 실수 인 것을 언급하지 말라고 말하는 것은 나쁜 조언입니다. 또한 이것은 실제로 오래된 답변 (문자 그대로이 사이트에 쓴 첫 번째 답변 중 하나)이므로 "정말입니까?" 불필요했습니다. 지난 3 년간 제 지식과 경험에 어떤 변화가 있었는지 알 수 없습니다.
Braden Best

11

document.title을 사용하는 것이 JavaScript에서이를 수행하는 방법이지만 SEO를 어떻게 지원합니까? 봇은 일반적으로 페이지를 통과 할 때 자바 스크립트 코드를 실행하지 않습니다.



4

크롤러가 변경 사항을 알 수 있도록 새 제목으로 페이지를 예약해야합니다. 자바 스크립트를 통해 그것을하는 것은 인간 독자에게만 이익이되며 크롤러는 해당 코드를 실행하지 않을 것입니다.


4

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

3

어쩌면 제목에 모든 탭 제목을 하나의 문자열로로드 한 다음 탭 중 하나를로드하면 자바 스크립트를 통해 제목을 변경하십시오

예 : 처음에 제목을

my app | description | contact | about us | 

탭 중 하나를로드하면 다음을 실행하십시오.

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

2

SEO에 도움이되고 탭 페이지가있는 것처럼 생각할 수있는 한 가지 방법은 다음과 같이 각 탭에 해당하는 명명 된 앵커를 사용하는 것입니다.

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

브라우저가 페이지를 렌더링 할 때 URL을 구문 분석하고 초기 페이지 제목을 설정하려면 서버 측 처리가 필요합니다. 또한 그 탭을 "활성"탭으로 만듭니다. 페이지가로드되고 실제 사용자가 탭을 전환하면 document.title다른 사용자가 언급 한대로 javascript를 사용하여 변경 합니다.


2

사용하십시오 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>


1

JavaScript를 사용할 수 있습니다. Google을 포함한 일부 봇은 SEO를 위해 JavaScript를 실행합니다 (SERP에 올바른 제목 표시).

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

검색 엔진은 대부분의 자바 스크립트를 무시하므로 검색 엔진이 Ajax를 사용하지 않고 탭을 사용하여 크롤링 할 수 있도록해야합니다. 각 탭을 해당 탭이 선택된 전체 페이지를로드하는 href와의 링크로 만듭니다. 그런 다음 페이지는 태그에 해당 제목을 가질 수 있습니다.

onclick 이벤트 핸들러는 여전히 사람 뷰어를 위해 ajax를 통해 페이지를로드 할 수 있습니다.

대부분의 검색 엔진에서 보는 것처럼 페이지를 보려면 브라우저에서 Javascript를 끄고 탭을 클릭하면 해당 탭이 선택된 페이지와 제목이 올바른 페이지가로드되도록하십시오.

ajax를 통해로드하고 Javascript만으로 페이지 제목을 동적으로 변경하려면 다음을 수행하십시오.

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

그러나 검색 엔진에는 이러한 변경 사항이 자바 스크립트로 표시되지 않습니다.


2
"Google에서 보는 것처럼 페이지를 보려면 브라우저에서 Javascript를 끄고 탭을 클릭하면 해당 탭이 선택된 페이지와 제목이 올바른 페이지가로드되도록하십시오." -이것은 SEO 친화적 인 AJAX가 많은 웹 사이트를 개발할 때 매우 좋은 접근법입니다.
John Weisz

0

그러나 SEO의 이익을 얻으려면

검색 엔진이 다른 제목 등을 볼 수 있도록 페이지가 변경되면 페이지를 다시로드해야합니다.

따라서 페이지 새로 고침이 먼저 작동하는지 확인한 다음 document.title 변경 사항을 추가하십시오.


0

여기에 무언가를 추가하고 싶습니다 .AJAX를 통해 데이터베이스를 업데이트하는 경우 JavaScript를 통해 제목을 변경하면 실제로 유용하므로 페이지를 새로 고치지 않아도 제목이 변경됩니다. 제목은 실제로 서버 측 스크립팅 언어를 통해 변경되지만 JavaScript를 통해 변경되는 것은 사용자에게보다 즐겁고 유동적 인 경험을 제공하는 유용성과 UI입니다.

이제 JavaScript를 통해 제목을 변경하는 경우에는 그렇게하지 않아야합니다.


0

Google은 모든 js 파일이 렌더링되었지만 실제로는 이 웹 사이트에서 Reactjs가 제공 한 제목과 다른 메타 태그를 잃어 버렸으며 실제로 Google에서 내 위치를 잃어 버렸다고 언급했습니다 ! 많은 것을 검색했지만 SEO 친화적 인 프로토콜을 사용하려면 모든 페이지가 사전 렌더링되거나 SSR (Server Side Rendering)을 사용해야합니다!
Reactjs, Angularjs 등으로 확장됩니다.
간단히 말해, 브라우저에서 페이지 소스보기 페이지 가있는 모든 페이지는 Google이 색인을 생성 할 수는 없지만 다른 사람은 색인을 건너 뛰는 경우 모든 로봇에 의해 색인됩니다!


-1

가장 간단한 방법은 <title>index.html에서 태그 를 삭제 하고 포함하는 것입니다.

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

웹의 모든 페이지에서 거미는 이것을 찾아서 검색 결과에 표시됩니다 :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.