是否可以使用 JavaScript 来更改页面的元标记?

IT技术 javascript jquery meta-tags
2021-01-24 15:51:21

如果我在头部放置一个 div 并显示:none,而不是使用 JavaScript 来显示它,这行得通吗?

编辑:

我在 AJAX 中加载了东西。当我的 AJAX 更改站点的“主要”部分时,我也想更改元标记。

6个回答

是的。

例如设置元描述:

document.querySelector('meta[name="description"]').setAttribute("content", _desc);
嗨,杰姆斯。谢谢你的提示。但是我尝试了这种方法来尝试更改 og:title 标签,但是没有用。我是这样做的: document.querySelector('meta[name="og:title"]').setAttribute("content", "Example with title meta tag"); 有任何想法吗?
2021-03-14 15:51:21
很高兴有人用纯 js 给出了答案(按照问题的要求)!
2021-03-26 15:51:21
看来您需要查询property属性,而不是name属性,即meta[property="og:title"]
2021-04-09 15:51:21

是的,你可以这样做。

有一些有趣的用例:一些浏览器和插件解析元元素并针对不同的值改变它们的行为。

例子

Skype:关闭电话号码解析器

<meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE">

iPhone:关闭电话号码解析器

<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 视口比例错误

元描述

一些用户代理(例如 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>

所以,这不仅仅是关于搜索引擎。

你可以用它做一些很酷的事情。当标题中的幻灯片更改时,我会更改 Chrome 地址栏的颜色。const meta = document.querySelector('meta[name=theme-color]'); meta.setAttribute("content", colors[slideIndex]);Android 版 Chrome 检测到更新并更改颜色
2021-03-26 15:51:21
这对于 Facebook 等服务的社交共享非常有用。例如,要更改 og:title 元素: $('meta[property="og:title"]').replaceWith('<meta property="og:title" content="New Title">');
2021-03-27 15:51:21
@DaedalusFall:是的,我认为您只能document.write在标题中执行此操作,一旦加载页面就为时已晚,因为 Skype 已经损坏了 DOM,太可怕了!
2021-04-02 15:51:21
我怀疑大多数像这样的元具有在页面加载后不可更改的效果。但是,是的,meta 远不止keywordsand description
2021-04-06 15:51:21
@bobince:实际上,如果您使用 js 插入 SKYPE_TOOLBAR 仍然有效(这很有用,因为 html5 验证器不喜欢那个元标记)。
2021-04-07 15:51:21

你会使用类似的东西(使用 jQuery):

$('meta[name=author]').attr('content', 'New Author Name');

但这几乎毫无意义,因为元标记通常仅在加载文档时才被抓取,通常不会执行任何 JavaScript。

它甚至适用于诸如 之类的选择器$('meta[property=og:somestuff]'),我怀疑它会因为冒号而与 jQuery 选择语法发生冲突。
2021-03-13 15:51:21
确认它适用于元视口设置(需要它来启用/禁用 jQuery Mobile 上某些子页面的缩放)。谢谢!
2021-03-19 15:51:21
如果其他人正在寻找这个确切的解决方案,您需要在 og:somestuff 周围加上引号 - 我需要图像标签的内容,这是我的代码: var imgurl = $("meta[property='og:image ']").attr("内容");
2021-03-22 15:51:21
@yPhil 这是 javascript(或 jQuery),因此从浏览器查看源代码时,您对 DOM 所做的任何和所有更改都不会反映出来。它会在您使用开发人员工具查看源代码时反映出来。浏览器源仅在页面加载时加载一次。ajax 请求请求不是页面加载。
2021-04-01 15:51:21
@stealthcopter 我可以验证这不是 :( 等等,确实如此,但更改在 FFox 的“查看源”窗口中不可见..?
2021-04-05 15:51:21

绝对可以使用 Javascript 来更改页面的元标记。这是一种仅使用 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]语法。
2021-03-16 15:51:21
我测试了上面的代码,在头部和页脚附近被脚本标签包围(显然我知道),但它对我不起作用。我知道我是问题所在,但被难住了。
2021-03-24 15:51:21
user1469 在 codepen/similar 中模仿您的设置并发送链接。
2021-04-03 15:51:21
确保关键字和描述的元标记与标题一起存在,以上内容将起作用。codepen.io/tmoses/pen/RwaZOXo(参见 console.log 输出)
2021-04-09 15:51:21

例如,您可以使用 jQuery 调用来更改元数据,如下所示:

$('meta[name=keywords]').attr('content', new_keywords);
$('meta[name=description]').attr('content', new_description);

我认为这的确事现在,因为谷歌表示,他们将通过指数的Ajax内容#!hashes_escaped_fragment_电话。现在他们可以验证它(即使是自动的,使用无头浏览器,请参阅上面提到的页面上的“创建 HTML 快照”链接),所以我认为这是铁杆 SEO 人员的方式。

这次真是万分感谢。刚刚解决了我的问题。由于 facebook 有开放图。我正在开发的站点有一个 History jQuery 插件和哈希标签。因此,当出现哈希更改时,需要更改 FB 开放图 url 和描述。+1 是一个很好的答案,而不是对一个公平的问题持否定态度。
2021-03-18 15:51:21
实际上,现在 google 也可以运行 javascript,而无需创建页面快照,因此现在动态元标记非常重要!
2021-04-06 15:51:21