68

我正在开发一个 ASP 应用程序,代码、模板和文件的组织方式不允许我更改 body 标记之外的任何内容。所以我正在考虑在正文中插入元标记——像这样:

<!-- FEW ASP INCLUDES -->
<html>
    <head>
    <!-- FALLBACK TITLE AND DESCRIPTION -->
    <title>Default Title</title>
    <meta name="description" content="Default Description">
</head>
<body>
    <!-- SOME HTML MARKUP -->
    <div class="dynamic-content">
        <!-- InstanceBeginEditable name="dynamic-content" -->
        <!-- THIS IS WHERE I CAN WRITE ASP CODE -->
        <title><%= Page.Meta.GetTitle( yada, yada ) %></title>
        <meta name="description" content="<%= Page.Meta.GetDescription( yada, yada ) %>">
        <!-- InstanceEndEditable -->
    </div>
    <!-- SOME MORE HTML MARKUP -->
</body>
</html>

我想知道将元标记放在 HTML 文档的正文中有多好。它如何影响:

  1. 搜索引擎
  2. 浏览器
4

9 回答 9

51

根据 HTML4.01 ,这当然是无效的。META 标记只允许在 HEAD中使用(就像 TITLE 一样),因此通过将其放入 BODY 中,您实际上是在创建无效标记。

从粗略的测试来看,似乎某些浏览器(例如 Firefox 3.5 和 Safari 4)在创建文档树时实际上将这些元素放入了 HEAD。这并不奇怪:众所周知,浏览器可以容忍并尝试解释各种损坏的标记。

使用无效标记很少是个好主意。浏览器的非标准处理可能会导致各种难以固定的呈现(和行为)不一致。与其依赖浏览器猜测,不如遵循一个标准。

我不知道搜索引擎对这种标签汤的反应如何,但我不会冒险尝试找出答案:) 也许他们只解析 HEAD 标签以获取某些信息,并且会完全跳过包含 BODY 的标签。或者他们认为这些是一些恶意赌博尝试和包含此类标记的黑名单页面。谁知道。

底线——尽可能避免这种情况。

于 2009-09-19T06:11:39.630 回答
32

底线是在 DOCTYPE 禁止时尽可能避免这种情况。我认为这在 HTML5 中绝对是允许的,并且在使用微数据的情况下非常有用。示例:http: //schema.org/Event

于 2011-10-04T08:36:53.543 回答
9

如果您的目标是搜索引擎优化,那么遵循标准并将所有元标记放在<head>. 但是,就浏览器行为而言,如果您将<meta>标签放入您的标签中,<body>它们仍然会起作用。我决定在一个符合标准的文档中使用多个<meta http-equiv="refresh"/>标签和标签来测试它。<title>

我的测试结果:

Firefox 18、Firefox 3.6、Firefox 移动版、Chrome 24、移动版 Chrome、Opera 12、IE6、IE8、IE10:

  • 正文中的所有<meta>标签都已处理。
  • 文档中的第一个<title>标签已被处理,即使它在正文中。随后<title>的标签被忽略。
  • 最早的元刷新指令生效,意味着两者都被处理了。

IE9:

  • 与上面相同,除了正文中的所有<title>标签都被忽略了。
  • IE9 标准模式下的 IE10 也有这样的行为。
  • IE8 标准模式下的 IE9 的行为与 IE8 相同,允许<title>在正文中添加 1 个标签。

那么,当您在正文中使用元标记时会发生什么?总的来说,它们似乎工作正常。元标签可能会被处理,所以如果你不能把它们放在头上,那么我不会太担心。

于 2013-01-24T17:01:21.547 回答
6

我不会这样做的。这不是这些标签所在的地方,搜索引擎可能会将其视为垃圾邮件。如果您可以重新组织母版页,则始终可以在 head 部分中添加一个 contentplaceholder。我已经通过以下方式轻松完成了它:

<asp:ContentPlaceHolder ID="HeadTags" runat="server" />

这样,您可以在页面的 head 部分中添加您喜欢的任何内容:

<asp:Content ID="Whatever" ContentPlaceHolderID="HeadTags" runat="server" >

    <meta ... >

</asp:Content>
于 2009-09-19T06:03:49.880 回答
3

我会说你使用它。我在各种网页的正文中发现了元标记,它们是前 10 名搜索之一(在谷歌上)。它表明,至少对我来说,搜索引擎不介意你是否使用了这种方法。

如果没有其他办法,你必须继续前进。

于 2013-01-05T10:29:50.357 回答
3

某些用于搜索引擎的元标记将不会被页面正文部分的搜索引擎认可。

例如,Google 表示它不会在页面正文中使用 rel=canonical,而只会在页面头部使用。 以下是 Google 的 Matt Cutts 所说的

我们不允许 rel=canonical 在 BODY 中(因为正如我提到的,人们会发送垃圾邮件),

于 2013-03-19T23:56:47.173 回答
2

元标记可以添加到 HTML 中的任何位置。

网络爬虫可以读取它们,但唯一的问题是当您必须通过 facebook messenger、whatsapp 等应用程序共享您的页面时。

这些应用程序只读取存在于head 标签内的标签。因此,如果放置在body 标记内,则元标记的og:image、og:description属性不会被读取,因此在此类应用程序中共享时不会显示。

如果仅用于 SEO 目的,您可以在任何地方添加元标记,但建议仅添加内部头部标记

于 2019-01-18T05:32:06.223 回答
0

我在正文中添加了一些元标记,但那是因为微数据技术。当我没有包含信息的常规元素时,我需要根据 schema.org 词汇来描述对象,我为此内容设置了一个元标记。我更喜欢这样做,用 display:none 设置元素。据我所知, display:none 的方式可能会导致更多的谷歌问题而不是这个。我同意这不是最佳实践,但是当我验证我的文档 (HTML5) 时,我通过了验证且错误为零。我也为几个项目做过这个技巧,他们都没有遇到谷歌或其他搜索引擎的问题。甚至微数据也提高了搜索引擎的排名。我不知道你到底想用这个元标记做什么,因为我没有在你的代码中看到任何微数据。

于 2013-06-21T09:44:15.610 回答
0

在网站中使用 META 描述标签是无效的标记,但这并不是一个大问题,因为搜索引擎可以定期找到该标签所在的位置。我的网站就是这样做的,看看我的 HTML

http://cameras.specced.co.uk/compare/268/Canon_EOS_200D

META 在网站 BODY 中,但它已被谷歌索引,并且页面元描述已设置为谷歌搜索结果中的点击文本。

于 2017-07-22T13:03:58.003 回答