如果我在head中插入一个display:none的div,然后使用JavaScript将其显示出来,这样能行吗?
编辑:
我有一些通过AJAX加载的内容。当我的AJAX更改了网站的“主要”部分时,我也想同时更改meta标签。
编辑:
我有一些通过AJAX加载的内容。当我的AJAX更改了网站的“主要”部分时,我也想同时更改meta标签。
是的,没错。
例如,设置元描述:
document.querySelector('meta[name="description"]').setAttribute("content", _desc);
property
属性,而不是name
属性,即 meta[property="og:title"]
。 - jayms是的,你可以这样做。
有一些有趣的用例:一些浏览器和插件解析meta元素,并根据不同的值改变它们的行为。
<meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE">
<meta name="format-detection" content="telephone=no">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
这里的内容可以通过 JavaScript 进行更改。参见:解决 iPhone 视口比例缩放 Bug 的方法
一些用户代理(例如 Opera)将描述用于书签。您可以在此处添加个性化内容。例如:
<!DOCTYPE html>
<title>Test</title>
<meta name="description" content="this is old">
<script type='text/javascript' src='http://code.jquery.com/jquery-1.8.2.js'></script>
<button>Change description</button>
<script type='text/javascript'>
$('button').on('click', function() {
// Just replacing the value of the 'content' attribute will not work.
$('meta[name=description]').remove();
$('head').append( '<meta name="description" content="this is new">' );
});
</script>
所以,这不仅仅是关于搜索引擎。
keywords
和description
。 - bobincedocument.write
来做到这一点,一旦页面加载完成,要改变它就太晚了,因为Skype已经破坏了DOM结构,真是可怕的事情! - bobince$('meta [property ="og:title"]').replaceWith('<meta property ="og:title" content ="New Title">');
- bdaninconst meta = document.querySelector('meta[name=theme-color]'); meta.setAttribute("content", colors[slideIndex]);
安卓上的Chrome会检测到更新并更改颜色。 - Dominic$('meta[name=author]').attr('content', 'New Author Name');
但这样做大多是毫无意义的,因为元标记通常只在加载文档时被抓取,通常不会执行任何JavaScript。
$('meta[property=og:somestuff]')
,我怀疑它会因为冒号而与jQuery的选择语法发生冲突。 - pau.moreno使用JavaScript更改页面的meta标签绝对是可行的。以下是一种仅使用JavaScript的方法:
document.getElementsByTagName('meta')["keywords"].content = "My new page keywords!!";
document.getElementsByTagName('meta')["description"].content = "My new page description!!";
document.title = "My new Document Title!!";
我已经验证了Google确实会为上述代码中的客户端更改编制索引。
element = collection[name]
语法。 - jayms您可以使用jQuery调用来更改元标记,例如:
$('meta[name=keywords]').attr('content', new_keywords);
$('meta[name=description]').attr('content', new_description);
我认为现在它确实很重要,因为 Google 表示他们将通过使用#!hashes
和_escaped_fragment_
来索引ajax内容,并且现在他们可以验证它(甚至自动地,使用无头浏览器,参见上面提到的“创建HTML快照”链接),所以我认为这是极客级别SEO人员的方法。
你可以使用更简单、更轻巧的解决方案:
document.head.querySelector('meta[name="description"]').content = _desc
你可以像下面这样做(或者使用jQuery,例如 $('meta[name=author]').attr("content");
):
<html>
<head>
<title>Meta Data</title>
<meta name="Author" content="Martin Webb">
<meta name="Author" content="A.N. Other">
<meta name="Description" content="A sample html file for extracting meta data">
<meta name="Keywords" content="JavaScript, DOM, W3C">
</head>
<body>
<script language="JavaScript"><!--
if (document.getElementsByName) {
var metaArray = document.getElementsByName('Author');
for (var i=0; i<metaArray.length; i++) {
document.write(metaArray[i].content + '<br>');
}
var metaArray = document.getElementsByName('Description');
for (var i=0; i<metaArray.length; i++) {
document.write(metaArray[i].content + '<br>');
}
var metaArray = document.getElementsByName('Keywords');
for (var i=0; i<metaArray.length; i++) {
document.write(metaArray[i].content + '<br>');
}
}
//--></script>
</body>
</html>
$(document).ready(function() {
$('meta[property="og:title"]').remove();
$('meta[property="og:description"]').remove();
$('meta[property="og:url"]').remove();
$("head").append('<meta property="og:title" content="blubb1">');
$("head").append('<meta property="og:description" content="blubb2">');
$("head").append('<meta property="og:url" content="blubb3">');
});
jQuery('meta[property="og:title"]').attr('content', "blubb1");
- Tobias Beuvingname属性允许您通过子元素列表引用一个元素的名称(类似于id),因此快速的方法是:
document.head.children.namedItem('description').content = '...'
- 或者仅仅是:
document.head.children.description.content = '...'
但是如果你不确定是否存在这样的元标记,那么最好添加以下检查:
let metaDescription = document.head.children.description
if (metaDescription == null) {
metaDescription = document.createElement('meta')
metaDescription.name = 'description'
document.head.append(metaDescription)
}
metaDescription.content = '...'