如果meta标签出现在文档主体中会发生什么?

我正在开发一个ASP应用程序,代码,模板和文件的组织方式不允许我在body标签外改变任何东西。 所以我正在考虑在身体内插入meta标签 – 就像这样:

<!-- 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> 

我想知道把meta标签放在HTML文档的正文里有多好。 它是如何影响的:

  1. search引擎
  2. 浏览器

按照HTML4.01,这当然是无效的 。 META标签只允许在HEAD (就像TITLE)一样,所以通过将它放到BODY中,实质上就是创build一个无效的标记。

从粗略的testing中,似乎有些浏览器(例如Firefox 3.5和Safari 4)在创build文档树时将这些元素实际放入HEAD中。 这并不奇怪:浏览器已知可以容忍并尝试解释各种破解的标记。

无效的标记很less是一个好主意 。 浏览器的非标准处理可能导致各种难以渲染的渲染(和行为)不一致。 而不是依靠浏览器猜测,最好遵循一个标准。

我不知道search引擎如何反应这样的标签汤,但我不会冒险尝试找出:)也许他们只parsingHEAD标签的某些信息,并会跳过你的BODY包含标签完全。 或者,也许他们认为这是一些恶意的赌博企图和黑名单页面包含这样的标记。 谁知道。

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

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

我不会这样做。 这不是标签去的地方,search引擎可能会将其视为垃圾邮件。 如果您可以重新组织主页面,则始终可以在head部分中添加一个contentplaceholder。 我已经完成了:

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

通过这种方式,您可以将任何您喜欢的内容添加到页面的头部:

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

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

我的testing结果:

Firefox 18,Firefox 3.6,Firefox Mobile,Chrome 24,Chrome for Mobile,Opera 12,IE6,IE8,IE10:

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

IE9:

  • 和上面一样,除了正文中的所有<title>标签被忽略。
  • IE9标准模式下的IE10也performance得如此。
  • IE8标准模式中的IE9与IE8的行为相同,在主体中允许有1个<title>标签。

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

search引擎的某些元标签不会被页面正文部分的search引擎所尊重。

例如,Google说,它不会在页面正文中承认rel = canonical,而只是在页面的头部。 Google的Matt Cutts说 :

我们不允许在BODY中使用rel = canonical(因为正如我所提到的那样,人们会垃圾邮件),

我会说你使用它。 我在各种网页上发现身体内的元标记,他们在谷歌前10名search之一。 这表明,至less对我来说,如果你使用了这种方法,search引擎不会介意。

如果没有别的办法,你必须继续前进。

我已经把一些元标签放到身体里,但那是因为Microdata技术。 当我没有信息的常规元素时,我需要根据schema.org词汇表描述对象,我用这个内容设置了一个元标记。 我宁愿这样做,而不是使用display:none来设置元素。 显示的方式:没有任何可能会导致更多的谷歌问题,而不是这个,据我所知。 我同意这不是最好的做法,但是当我validation我的文档(HTML5)时,我通过了无错误的validation。 此外,我已经做了几个项目的这个伎俩,没有一个与谷歌或其他search引擎的问题。 即使微数据提高了search引擎的排名。 我不知道你到底想把这个meta标签放到body里,因为我没有在代码中看到任何微数据。 如果你需要这种方法,我认为这是可以的,但在其他情况下元元素必须在头部分!

在网站中使用META描述标签是无效的标记,但是不是一个大问题,因为search引擎可以定期查找标签。 我的网站做到这一点,看看我的HTML

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

META位于BODY网站,但已被Google索引,页面元描述被设置为谷歌search结果中的点击文本。