2009-09-19 3 views
46

Я работаю над 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. браузеры

ответ

37

Это, конечно недействительным согласно HTML4 +0,01. Теги META: only allowed within HEAD (так же, как, например, TITLE), поэтому, помещая его в BODY, вы по существу создаете недопустимую разметку.

Из беглых тестов кажется, что некоторые браузеры (например, Firefox 3.5 и Safari 4) фактически помещают эти элементы в HEAD при создании дерева документов. Это не удивительно: браузеры, как известно, терпят и пытаются интерпретировать все виды разломанной разметки.

Неверная разметка редко является хорошей идеей. Нестандартная обработка браузерами может привести к различным несогласованностям, связанным с переносом (и поведенческим). Вместо того, чтобы полагаться на угадывание браузера, лучше следовать стандарту.

Я не знаю, как поисковые системы реагируют на такой суп-суп, но я бы не рискнул экспериментировать, чтобы узнать. Возможно, они просто анализируют тег HEAD для определенной информации и вообще пропускают теги, содержащиеся в BODY. Или, может быть, они считают, что это некоторые попытки злоумышленных азартных игр и черных списков, содержащих такую ​​разметку. Кто знает.

Суть - избегать этого, когда это возможно.

+2

Вздох, я перестрою весь код. Любые предложения, которые помогут сделать этот процесс менее болезненным, будут оценены. –

+32

Если вы используете HTML5 **, то ** допускается использовать теги '' внутри тега '', если присутствует атрибут 'itemprop'. См. [Spec] (http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#the-meta-element). – Husky

+1

Невозможно найти его в спецификации, но w3.org validator также позволяет использовать метатеги с атрибутами свойства (rdfa-lite) при использовании html5 –

7

Я бы не сделать это. Здесь не те теги, и поисковые системы могут рассматривать их как спам. Если вы можете реорганизовать главную страницу, вы всегда можете добавить владельца контента в раздел главы. Я сделал это тривиально с:

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

Таким образом, вы можете добавить любой контент вы любите в головной части обратно на странице:

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

    <meta ... > 

</asp:Content> 
+0

Не классический ASP-решение, хотя – AnthonyWJones

+1

Нет, возможно, нет. Но, как дерьмовые ответы идут, он не только работает в производстве, он имеет четыре голоса. –

+0

Классический ASP-решение ... вот в чем суть вопроса! –

27

Суть заключается в том, чтобы избежать этого, когда это возможно , когда DOCTYPE запрещает его. Я думаю, что это определенно разрешено в HTML5 и очень полезно в случаях с использованием микроданных. Пример: http://schema.org/Event

+0

W3S утверждает, что '' всегда должен находиться в '': http: // www .w3schools.com/tags/tag_meta.asp, но я не вижу, что это правда в спецификации HTML5: https://www.w3.org/TR/html5/document-metadata.html#the-meta-element. Тем не менее я использую их по одной и той же причине: добавлять метаданные (в сообщения в блогах). Кажется, достаточно обоснованно утверждать. –

+0

... хотя я только что понял, что вынужден использовать XHTML, поэтому я действительно не знаю. Я определенно предпочитаю простой HTML5! –

+0

Если HTML5 допускает тэг 'x' в теге' y', то XHTML5 разрешает тег 'x' в теге' y' тоже. Большая разница заключается в том, что XHTML5 должен быть действительным XML (т. Е. Без закрытых тегов), что упрощает анализ, чем HTML. – RavuAlHemio

2

Я бы сказал, что вы его используете. Я нашел метатеги внутри тела на разных веб-страницах, и они находятся в одном из первых 10 поисков (в google). Это показывает, по крайней мере, для меня, что поисковые системы не против, если вы использовали этот подход.

Вы должны идти вперед, если нет другого пути.

5

Если ваша цель - поисковая оптимизация, то, вероятно, неплохо следовать стандартам и поместить все ваши метатеги в <head>. Однако, что касается поведения браузера, если вы разместите <meta> тегов в своем <body>, они все равно будут работать.Я решил протестировать это, используя несколько тегов <meta http-equiv="refresh"/> и теги <title> в другом стандартном документе.

Результаты моих тестов:

Firefox 18, Firefox 3.6, Firefox Mobile, Chrome 24, Chrome для мобильных устройств, Opera 12, IE6, IE8, IE10:

  • Все <meta> теги в тела были обработаны.
  • Первый тег <title> в документе был обработан, даже если он был в корпусе. Последующие <title> теги были проигнорированы.
  • Самая ранняя директива meta refresh вступила в силу, подразумевая, что оба обработаны.

IE9:

  • То же, что и выше, за исключением всех <title> тегов в теле были проигнорированы.
  • IE10 в режиме стандартов IE9 также ведет себя следующим образом.
  • IE9 в режиме стандартов IE8 ведет себя так же, как IE8, позволяя теге 1 <title> в теле.

Итак, что происходит, когда вы используете метатеги в теле? По большому счету, они, похоже, работают нормально. Мета-теги, вероятно, будут обработаны, поэтому, если вы не можете поместить их в голову, я не буду слишком беспокоиться.

+0

Обратите внимание, что вы должны окружать фрагменты кода HTML обратными выводами \ ', чтобы они отображались буквально. –

3

Некоторые метатеги, предназначенные для поисковых систем, не будут выполняться поисковыми системами в разделе тела страницы.

Например, Google говорит, что он не будет соблюдать rel = canonical в теле страницы, но только в начале страницы. Here is what Matt Cutts from Google says:

Мы не допускаем отн = каноническими в ТЕЛЕ (потому что, как я уже говорил, люди будут спамить, что),

0

Я поставил некоторые мета-теги в тело, но это из-за технологии Microdata. Когда у меня нет регулярного элемента с информацией, которую мне нужно описать в соответствии с словарем schema.org, я установил метатег с этим контентом. Вместо этого я предпочитаю делать это, чтобы установить элемент с отображением: none. Как с дисплеем: ничто не может вызвать больше проблем с Google вместо этого, насколько я знаю. Я согласен, что это не лучшая практика, но когда я проверяю свой документ (HTML5), я прохожу проверку с нулевыми ошибками. Также я сделал этот трюк для нескольких проектов, и ни у кого из них не было проблем с Google или другой поисковой системой. Даже микроданные улучшают рейтинг поисковой системы. Я не знаю, что именно вы хотите делать с этими метатегами в теле, потому что я не видел никаких микроданных в вашем коде. Если вам это нужно для этого подхода, я думаю, что все в порядке, но в других случаях мета-элементы должны находиться в главном разделе!

0

Наличие тега META Description на веб-сайтах является недопустимой разметкой, однако это не является большой проблемой, поскольку поисковые системы могут регулярно находить тег, где бы он ни находился.Мой сайт делает это, посмотри на моем HTML

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

МЕТА находится в сайте ТЕЛЕ однако он был проиндексирован Google и страница меты описания было установлен как щелчок, хотя текст в поиске Google Результаты.