如何dynamic更改网页的标题?

我有一个网页,实现了一组标签,每个显示不同的内容。 标签点击不会刷新页面,而是隐藏/取消隐藏客户端的内容。

现在需要根据页面上select的标签更改页面标题(出于search引擎优化的原因)。 这可能吗? 有人可以build议一个解决scheme,通过JavaScriptdynamic改变页面标题,而无需重新加载页面?

你可以做一些像document.title = "This is the new page title."; ,但这将完全击败search引擎优化的目的。 大多数爬虫不会首先支持JavaScript,所以他们会将元素中的任何内容作为页面标题。

如果您希望这与大多数重要抓取工具兼容,您将需要实际更改标题标签本身,这将涉及重新加载页面(PHP等)。 如果您想以抓取工具可以看到的方式更改页面标题,则无法解决该问题。

我想从未来问好:)最近发生的事情:

  1. 谷歌现在运行您的网站上的JavaScript 1
  2. 人们现在使用像React.js,Ember和Angular的东西在页面上运行复杂的JavaScript任务,它仍然被Google 1索引
  3. 你可以使用html5的历史api(pushState,react-router,ember,angular),它允许你为每个你想要打开的标签做一些独立的url,Google会把它编入索引

所以要回答你的问题,你可以安全地改变标题和其他元标签(如果你想支持非谷歌search引擎,你也可以添加类似https://prerender.io的东西),只需将它们作为单独的URL(否则谷歌会如何知道这些是不同的页面显示在search结果?)。; 改变search引擎优化相关的标签(用户改变页面后,点击某件事情)很简单:

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

只要确保在robots.txt中未封锁css和javascript,您就可以在Google网站站长工具中使用Google抓取方式

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

我看不到如何通过JavaScript更改页面标题将有助于search引擎优化。 大多数(或全部)search漫游器不运行Javascript,只会读取最初加载的标题,即标记。

如果你想帮助search引擎优化,那么你将需要在后端更改页面标题,并为不同版本的页面提供服务。

使用document.title

看到这个页面也是一个基本的教程。

代码是
document.title = 'test'

使用document.title是你如何在JavaScript中完成它,但这应该如何协助search引擎优化? 机器人通常不会在浏览页面时执行JavaScript代码。

有很多方法可以改变标题,主要的两个是这样的:

可疑方法

把一个标题标签放在HTML中(例如<title>Hello</title> ),然后在javascript中:

 let title_el = document.querySelector("title"); if(title_el) title_el.innerHTML = "World"; 

显然是正确的方法

最简单的是实际使用由文档对象模型(DOM)提供的方法,

 document.title = "Hello World"; 

前一种方法通常会改变在文档正文中find的标签。 使用这种方法来修改元数据标签,就像title发现的元数据标签一样,这个问题实际上是有问题的,不是惯用的,不是很好的风格,甚至可能不是可移植的。 但是有一点你可以确定的是,如果他们看到title.innerHTML = ... ,他们正在维护的代码会激怒其他开发者。

想要的是后一种方法。 这个属性是在DOM规范中专门提供的,顾名思义就是改变标题。

还要注意的是,如果您正在使用XUL,您可能需要在尝试设置或获取标题之前检查文档是否已经加载,否则您将调用undefined behavior (这里是龙),这是一个非常恐怖的概念对。 这可能会或可能不会通过JavaScript发生,因为DOM上的文档不一定与JavaScript有关。 但是XUL是一个完整的兽,所以我离题了。

说到.innerHTML

一些好的build议要记住,使用.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); }); 

现代的抓取工具能够parsing DOM中dynamic生成的内容 ,所以使用document.title = ...是完全正确的。

您必须使用新标题重新提供页面,以便所有抓取工具都能注意到这一更改。 通过JavaScript做它只会使读者受益,爬虫不会执行该代码。

也许你可以加载你的标题所有的标签在一个string中,然后一旦你加载其中一个选项卡通过JavaScript更改标题

例如:首先将您的标题设置为

 my app | description | contact | about us | 

一旦你加载其中一个标签运行:

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

一个想到的方式可能有助于search引擎优化,并仍然有你的标签页,因为它们将使用与每个标签对应的命名锚点,如下所示:

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

您需要进行服务器端处理来parsingurl,并在浏览器呈现页面时设置初始页面标题。 我也会继续,使这个标签是“积极的”。 一旦页面加载,一个实际的用户切换标签,你会使用JavaScript来改变document.title其他用户已经表明。

你可以使用JavaScript。 一些机器人,包括谷歌,将执行JavaScript的利益的search引擎优化(在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

不要总是假设bot不会执行JavaScript。 http://searchengineland.com/tested-googlebot-crawls-javascript-heres-learned-220157 Google和其他search引擎知道索引的最佳结果是实际最终用户在浏览器中看到的结果,包括JavaScript。

由于search引擎忽略了大部分的JavaScript,因此您需要使search引擎可以在不使用Ajax的情况下使用标签进行爬网。 使每个标签的链接与加载与该选项卡的整个页面的href。 然后,页面可以在标签中包含该标题。

onclick事件处理程序仍然可以通过ajax为人类观众加载页面。

要查看大多数search引擎看到的页面,请在浏览器中closuresJavascript,然后尝试进行设置,以便单击这些标签可以加载所选的标签页和正确的标题。

如果你正在通过ajax加载,你想用Javascript来dynamic改变页面标题,那么做:

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

但是,search引擎不会看到在JavaScript中做出的这种改变。

但为了得到SEO的好处

您需要在页面更改时重新加载页面,以便search引擎查看不同的标题等

因此,请确保页面重新加载,然后添加document.title更改

我只是想在这里添加一些东西:如果您通过AJAX更新数据库,通过JavaScript更改标题实际上是非常有用的,所以标题更改,而不必刷新页面。 标题实际上是通过您的服务器端脚本语言改变的,但通过JavaScript改变它只是一个可用性和用户界面的事情,使用户体验更愉快和stream畅。

现在,如果你只是通过JavaScript改变标题,那么你就不应该这样做。

最简单的方法是从index.html中删除<title>标签,然后包含

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

在网页的每一页。 蜘蛛会发现这个,并会显示在search结果:)