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

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

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



답변

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

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

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


답변

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

  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


답변

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

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


답변

사용하십시오 document.title.

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


답변

코드는
document.title = 'test'


답변

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

의심스러운 방법

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


답변

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