Javascript 如何动态更改网页';谁的头衔?

Javascript 如何动态更改网页';谁的头衔?,javascript,html,Javascript,Html,我有一个网页,它实现了一组选项卡,每个选项卡显示不同的内容。选项卡单击不会刷新页面,而是在客户端隐藏/取消隐藏内容 现在需要根据页面上选择的选项卡更改页面标题(出于SEO原因)。这可能吗?有人能提出一个解决方案,通过javascript动态更改页面标题而不重新加载页面吗?代码是 document.title='test'使用document.title 请参阅,以获取基本教程。我看不出通过Javascript更改页面标题将如何帮助SEO。大多数(或全部)搜索机器人不运行Javascript,只读

我有一个网页,它实现了一组选项卡,每个选项卡显示不同的内容。选项卡单击不会刷新页面,而是在客户端隐藏/取消隐藏内容

现在需要根据页面上选择的选项卡更改页面标题(出于SEO原因)。这可能吗?有人能提出一个解决方案,通过javascript动态更改页面标题而不重新加载页面吗?

代码是

document.title='test'
使用
document.title


请参阅,以获取基本教程。

我看不出通过Javascript更改页面标题将如何帮助SEO。大多数(或全部)搜索机器人不运行Javascript,只读取最初加载的标题(即标记)


如果你想帮助SEO,那么你需要在后端更改页面标题并提供不同版本的页面

更新:根据 大多数网络爬虫将索引更新的标题。下面的答案已经过时,但代码仍然适用

您可以执行如下操作,
document.title=“这是新的
页面标题。“,但这将完全违背搜索引擎优化的目的。最
爬虫程序一开始不会支持javascript,所以
他们将以元素中的任何内容作为页面标题

如果你想让它与大多数重要的爬虫兼容, 您需要实际更改标题标签本身,这 可能需要重新加载页面(PHP等)。你不去吗 如果您想在中更改页面标题,则可以绕过此问题 爬虫可以看到的一种方式


使用document.title是在JavaScript中实现它的方法,但是这对SEO有什么帮助呢?机器人通常不会在遍历页面时执行javascript代码。

但是为了获得合适的搜索引擎优化

当页面更改时,您需要重新加载页面,以便搜索引擎可以看到不同的标题等


因此,请确保先重新加载页面,然后添加文档。标题更改

您必须使用新标题重新服务页面,以便任何爬虫都能注意到更改。通过javascript这样做只会使人类读者受益,爬虫程序不会执行该代码。

想到的一种方法可能有助于SEO,并且仍然保持选项卡页面的原样,那就是使用与每个选项卡对应的命名锚,如:

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


当浏览器呈现页面时,您需要进行服务器端处理以解析url并设置初始页面标题。我也会继续,使该选项卡成为“活动”选项卡。一旦页面加载并且实际用户正在切换选项卡,您将使用javascript更改
document.title
,正如其他用户所述。

也许您可以在标题上加载一个字符串中的所有选项卡标题,然后在加载其中一个选项卡后,通过javascript更改标题

首先把你的头衔设为

my app | description | contact | about us | 
加载其中一个选项卡后,请运行:

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

有很多方法可以更改标题,主要的两种方法如下:

可疑的方法 在HTML中放置一个标题标记(例如,
Hello
),然后在javascript中:

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

if(title_el)
    title_el.innerHTML = "World";
显然正确的方法 最简单的方法是实际使用文档对象模型(DOM)提供的方法


前一种方法通常是更改文档主体中的标记所要做的。使用这种方法来修改元数据标记,比如在头部找到的那些标记(比如
title
),充其量是有问题的做法,不是惯用的,一开始不是很好的风格,甚至可能不可移植。不过,您可以肯定的一点是,如果其他开发人员在他们维护的代码中看到
title.innerHTML=…
,他们会感到恼火

你想要的是后一种方法。正如名称所示,此属性专门用于更改标题

另外请注意,如果您使用XUL,您可能希望在尝试设置或获取标题之前检查文档是否已加载,否则您将调用
未定义行为
(这里是龙),这本身就是一个可怕的概念。这可能通过JavaScript实现,也可能不通过JavaScript实现,因为DOM上的文档不一定属于JavaScript。但XUL完全是另一头野兽,所以我就跑题了

说到
.innerHTML
要记住的一些好建议是,使用
.innerHTML
通常是草率的。改用

虽然有两种情况我仍然认为
.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);
});

我只想在这里添加一点:如果您通过AJAX更新数据库,那么通过JavaScript更改标题实际上很有用,这样您就可以在不刷新页面的情况下更改标题。标题实际上是通过服务器端脚本语言更改的,但通过JavaScript更改标题只是一个可用性和UI问题,可以让用户体验更愉快、更流畅


现在,如果您只是为了好玩而通过JavaScript更改标题,那么您不应该这样做

最简单的方法是从index.html中删除
标记,并包括

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

网站-网页

在网页的每一页上。爬行器将找到这一点,并显示在搜索结果中:)

由于搜索引擎忽略了大多数javascript,您需要这样做,以便搜索引擎可以在不使用Ajax的情况下使用选项卡进行爬行。使每个选项卡成为一个带有href的链接,该href加载选中该选项卡的整个页面。然后页面可以在标签中包含该标题

onclick事件处理程序仍然可以通过ajaxforhum加载页面
<head>
<title> Website - The page </title></head>
document.title = 'Put the new title here';
document.title = "Google will run this JS and show the title in the search results!";
if (document.title != newTitle) {
    document.title = newTitle;
}
$('meta[name="description"]').attr("content", newDescription);
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'));
<?php
if (!isset($title)){
    $title = "Your Title";
  }
  else {
    $title = $title;
  }
 ?>
<head>
<title><?php echo $title; ?></title>
<?php
  $title = "Your Title - Page";
  include( "./header.php" );
?>