当前位置:  开发笔记 > 编程语言 > 正文

如何动态更改网页的标题?

如何解决《如何动态更改网页的标题?》经验,为你挑选了8个好方法。

我有一个网页,实现了一组标签,每个标签显示不同的内容.选项卡单击不刷新页面,但隐藏/取消隐藏客户端的内容.

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



1> Alex Fort..:

更新:根据SearchEngineL上的评论和参考, 大多数网络抓取工具将索引更新的标题.以下答案已过时,但代码仍然适用.

你可以做一些像,document.title = "This is the new page title.";但这完全会破坏SEO的目的.大多数抓取工具首先不会支持javascript,所以他们会将元素中的任何内容作为页面标题.

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


所以这意味着这个答案已经过时了.StackOverflow现在应该为答案添加"过时"功能:D
如果您在更新页面时使用html5的pushState来更改历史记录,为什么不更新标题呢?如果设置正确,爬虫仍会获得正确的结果,您仍然希望用户看到与他所在视图相匹配的标题.对于大多数网络应用程序等,使用它似乎是一个很好的解决方案.我可能忽略了一个不同的功能呢?
这不是真的.谷歌确实将javascript更改索引到document.title.见http://searchengineland.com/tested-googlebot-crawls-javascript-heres-learned-220157
@CpnCrunch是正确的.这是2016年.搜索引擎优化已经发生了很大变化,谷歌和其他搜索引擎正在适应单页应用和javascript.
@CpnCrunch是对的!谷歌将索引由JavaScript更改的标题.我没有在其他搜索机器人上测试过.不要总是假设机器人不执行JavaScript.我在下面创建了一个新的答案,然后意识到只是显示和隐藏选项卡而不更改URL会使这更复杂.
刚刚发现如果文档是空的,例如`document.write('')`,那么`document.title ='foo'`将不起作用,因为该文档不包含title元素.在上面的例子中,这对我有用:`document.write(' zymbit </ title> </ head> <body> </ body> </ html>') <br><br><b>2> JLarky..:</b><hr><p>我想从未来打招呼:)最近发生的事情:</p> <ol> <p>Google现在运行您网站上的javascript <sup>1</sup></p> <p>人们现在使用像React.js,Ember和Angular这样的东西在页面上运行复杂的javascript任务,它仍然被Google索引<sup>1</sup></p> <p>你可以使用html5历史api(pushState,react-router,ember,angular),它允许你为你想要打开的每个标签创建单独的URL,Google会将其编入索引<sup>1</sup></p> </ol> <p>因此,要回答您的问题,您可以安全地从javascript更改标题和其他元标记(如果您想支持非Google搜索引擎,您还可以添加类似https://prerender.io的内容),只需将它们作为单独的网址进行访问(否则Google会如何知道这些是在搜索结果中显示的不同页面?).更改SEO相关标签(用户通过点击某些内容更改页面后)很简单:</p> <pre class="brush:bash;">if (document.title != newTitle) { document.title = newTitle; } $('meta[name="description"]').attr("content", newDescription); </pre> <p>只需确保在robots.txt中未阻止css和javascript,您就可以在Google网站站长工具中使用<strong>Google抓取方式作为Google</strong>服务.</p> <p>1:http://searchengineland.com/tested-googlebot-crawls-javascript-heres-learned-220157</p></p> <br><br><b>3> 小智..:</b><hr><p>我看不出如何通过Javascript更改页面标题将有助于SEO.大多数(或所有)搜索机器人不运行Javascript,只会读取最初加载的标记,即标记.</p> <p>如果您想帮助SEO,那么您需要更改后端的页面标题并提供不同版本的页面. </p></p> <hr>是的,对于搜索引擎优化不是很好,但对于最终用户书签等有用,例如当URL中的哈希值发生变化时更新页面标题,或者使用HTML5/JS`window.history`时更新页面标题以及网址 <hr>同意 - 这根本不会帮助SEO,因为爬虫不会对你的JS做任何事情 <br><br><b>4> lc...:</b><hr><p>使用<code>document.title</code>.</p> <p>请参阅此页面以获取基本教程.</p></p> <hr>喜欢这个链接,它有netscape导航截图:) <br><br><b>5> Kev..:</b><hr><p>代码是<br> <code>document.title = 'test'</code></p></p> <hr>我使用top.document.title来引用窗口本身(我有框架集......) <hr>@AdrianoVaroliPiazza不需要去-1,那些不需要SEO的应用程序或实际使用某些HTML5功能的网站呢?我的意思是,如果你正确地设置你的网站并使用ajax并且对非js/crawler有一个后备,这只会加速用户体验并保持匹配的标题可见.对我来说似乎是一个好主意. <br><br><b>6> Braden Best..:</b><hr><p>您可以通过多种方式更改标题,主要有两种,如下所示:</p> <h2>可疑方法</h2> <p>将标题标记放在HTML(例如<code><title>Hello)中,然后在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);
});


@AndreyTarantsov没有多少免责声明会提到它吗?如何提及它让人们知道什么不该做?我们从错误中吸取教训,告诉别人不要提出错误的东西,这是一个糟糕的建议.此外,这是一个非常古老的答案(字面上我在这个网站上写的第一个答案之一),所以"认真?" 没必要.你不可能知道过去三年我的知识和经验发生了什么变化.

7> TheTXI..:

使用document.title是如何在JavaScript中完成它,但是这应该如何帮助SEO?机器人通常不会在遍历页面时执行javascript代码.



8> dimanyc..:

现代爬虫能够解析 DOM中动态生成的内容,因此使用document.title = ...完全正常.

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有