СоХабр закрыт.

С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.

H HTML. Обязательные мета-теги в теге head и их последовательность в черновиках Из песочницы

Предисловие


Несколько дней назад мне пришлось изрядно «поковыряться» на форумах в поисках нужной информации. В процессе, я наткнулся на некоторые регулярно повторяющиеся вопросы новичков типа: «Какие обязательные мета-теги должны присутствовать в head?» или «В какой последовательности нужно использовать мета-теги?». Каким же было мое удивление, когда достаточно опытные верстальщики, «великие гуру» форумов, давали такие скомканные ответы, как: «Не имеет значения», «Обязательных тегов нет» и т. п.


И когда у меня изрядно «подгорело», я решил написать эту статью, чтобы «открыть глаза юным падаванам».


Вникаем в спецификацию


Следует сразу сказать, что если отталкиваться от спецификации HTML, то обязательных мета-тегов, помимо charset, title и description, вообще нет.

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


Начинаем


Прежде чем начинать разбираться с тегами, разберемся с последовательностью.
Последовательность, по большому счету, не важна, если целью является «Просто, чтобы работало». Но следует знать, что .html файл читается последовательно. Это значит, что при написании .html документа нужно «предоставлять» браузеру данные в последовательности, которая будет соответствовать последовательности формирования отображаемой страницы.


Начнем с 3 обязательных тегов. Следующие теги указывают кодировку, поддержку максимально доступной версии IE, настройки viewport.


<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,width=device-width">

Сначала мы указываем кодировку, чтобы при браузер понимал, какая кодировка у страницы, чтобы он мог правильно ее читать дальше. Затем, мы указали настройку для поддержки максимально доступной версии IE, т.к. первым делом, после кодировки, нам нужно задать правила для обработки сайта самим браузером. И в самом конце мы задаем настройки viewport'а.


Далее просто приведу всю разметку в теге head, а затем уточню некоторые нюансы.

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=Edge">
  <meta name="viewport" content="initial-scale=1,minimum-scale=1,maximum-scale=1,width=device-width">
  <!--3 meta-тега выше должны быть использованы первыми-->

  <!--OpenGraph | http://ogp.me
  Для подключения нужно использовать атрибут prefix="og: http://ogp.me/ns#" в теге html.
  
  Шаблон:
  <meta property="og:type" content="website">
  <meta property="og:url" content="адрес сайта">
  <meta property="og:title" content="заголовок">
  <meta property="og:description" content="описание">
  <meta property="og:image" content="адрес изображения">
  -->

  <title></title>
  <meta name="description" content="">
  <meta name="keywords" content="">
  <link rel="icon" href="" type="image/x-icon">
  <link rel="apple-touch-icon" href="" type="image/png">

  <!--Apple iOS | https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html-->
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">

  <!--CSS-->
  <link href="" rel="stylesheet">

  <!--JS-->
  <!--Скрипты положено добавлять перед закрывающим тегом body, но при необходимости, например, если вы хотите сделать импровизированный загрузочный экран для сайта, вы можете вставить скрипт здесь.-->
  <script src=""></script>

  <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
  <![endif]-->

  <!--Custom Windows Start Screen Tile | http://www.buildmypinnedsite.com-->
</head>


Нюансы


OpenGraph


Прошу заметить, что данная интеграция, как и следующая, которую я приведу, действительно, не являются обязательными. Но отталкиваясь от спецификации Yahoo!, которая была сделана много лет назад и до сих пор является действительной, можно сделать вывод, что эта интеграция необходима, чтобы повысить «карму» сайта.

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


OpenGraph Protocol — это протокол, который изначально был придуман для социальной сети Facebook. Он содержит в себе информацию о странице, на которую пользователь дает ссылку в сообщении. Думаю, каждый из Вас отправлял ссылки в соц. сетях и видел, как ссылка преобразуется в картинку, под ней добавляется заголовок и описание.
Ссылка на документацию добавлена в комментарий в коде.


Windows


Тут у некоторых опытных верстальщиков может вспыхнуть вопрос: «При чем здесь Windows и RSS Канал и какое отношение он может иметь к, например, сайту-визитке?» Но, тут тоже есть своя особенность. Этот протокол нужен для того, чтобы при добавлении сайта в «закладки» в меню Пуск на Windows, туда добавлялось не только название сайта, но и читалась информация с RSS и постоянно обновлялась. Вы можете заметить пример работы протокола, зайдя в меню Пуск на Windows 10 и посмотрев на плитку новостей, которая регулярно обновляется.

Действительно, зачем сайту, который не нуждается в подобном функционале, нужен этот протокол?

Все просто! Это для того е самого плюсика в «карму». Но есть небольшая хитрость. Вам не обязательно действительно создавать RSS канал для сайта. Вы можете просто вставить разметку протокола, а ссылку в последней строке указать несуществующую (ведущую на несуществующий канал вашего сайта).


Заключение


Надеюсь, эта информация пригодится начинающим верстальщикам. Это основная информация. Если будут возникать какие-то вопросы, то задавайте их в комментариях. Всем удачи!


Бонус


Шаблонное копирование разметки из проекта в проект- это не всегда хорошая идея. Выше я привел самые необходимые мета-теги, которые помогут идеально соответствовать критериям хорошего сайта, отталкиваясь от спецификации.

Для таких же дотошных кодеров, как я, я оставляю ссылку на хорошую документацию, где указаны все актуальные теги, описаны случаи, в которых их необходимо использовать и просто полезная информация по ним. (Ссылка)

+4
~4300

комментарии (15)

+4
stepmex ,   * (был изменён)
Может стоит назвать статью «моё видение мета тегов...»
Как и обязательные теги ни разу не обязательные.
Так и вся разметка в шапке далеко не идеальна.
Приведу пример из одного из проектов:
<head>
    <meta charset="utf-8">
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    <title>Title</title>
    <meta name="generator" content="TYPO3 CMS">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <meta name="format-detection" content="telephone=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="mobile-web-app-capable" content="yes">
    <meta name="msapplication-tap-highlight" content="no">
    <meta name="application-name" content="Title">
    <meta name="msapplication-config" content="browserconfig.xml">
    <meta name="msapplication-TileColor" content="#e1000f">
    <meta name="mstile-70x70logo" content="mstile-70x70.png">
    <meta name="mstile-144x144logo" content="mstile-144x144.png">
    <meta name="mstile-150x150logo" content="mstile-150x150.png">
    <meta name="mstile-310x150logo" content="mstile-310x150.png">
    <meta name="mstile-310x310logo" content="mstile-310x310.png">

    <link rel="stylesheet" type="text/css" href="merged-84b7b836f4d069f6da680cc8a662888b.css?1509618573" media="all">

    <link rel="icon" href="favicon-16x16.png" sizes="16x16" type="image/png">
    <link rel="icon" href="favicon-32x32.png" sizes="32x32" type="image/png">
    <link rel="icon" href="android-chrome-36x36.png" sizes="36x36" type="image/png">
    <link rel="icon" href="android-chrome-48x48.png" sizes="48x48" type="image/png">
    <link rel="icon" href="android-chrome-72x72.png" sizes="72x72" type="image/png">
    <link rel="icon" href="android-chrome-96x96.png" sizes="96x96" type="image/png">
    <link rel="icon" href="android-chrome-144x144.png" sizes="144x144" type="image/png">
    <link rel="icon" href="android-chrome-192x192.png" sizes="192x192" type="image/png">

    <link rel="apple-touch-icon" href="apple-touch-icon.png">
    <link rel="apple-touch-icon" sizes="57x57" href="apple-touch-icon-57x57.png">
    <link rel="apple-touch-icon" sizes="60x60" href="apple-touch-icon-60x60.png">
    <link rel="apple-touch-icon" sizes="72x72" href="apple-touch-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="76x76" href="apple-touch-icon-76x76.png">
    <link rel="apple-touch-icon" sizes="114x114" href="apple-touch-icon-114x114.png">
    <link rel="apple-touch-icon" sizes="120x120" href="apple-touch-icon-120x120.png">
    <link rel="apple-touch-icon" sizes="144x144" href="apple-touch-icon-144x144.png">
    <link rel="apple-touch-icon" sizes="152x152" href="apple-touch-icon-152x152.png">
    <link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon-180x180.png">
    <link rel="apple-touch-icon-precomposed" href="apple-touch-icon-precomposed.png">
    <meta name="description" content="Description">
    <meta name="robots" content="index,follow">
    <link rel="canonical" href="http://www.site.com/">
    <meta property="og:site_name" content="Title">
    <meta property="og:title" content="Title">
    <meta property="og:image" content="http://www.site.com/ShareIcon_314x314.jpg">
    <meta property="og:type" content="article">
    <meta property="og:description" content="Description">
    <link rel="alternate" href="http://www.site.fr/" hreflang="fr-FR">
    <link rel="alternate" href="http://www.site.de/" hreflang="de-DE">
    <link rel="alternate" href="http://www.site.ch/" hreflang="de-CH">
    <link rel="alternate" href="http://www.site.si/" hreflang="sl-SI">
    <link rel="alternate" href="http://www.site.at/de/" hreflang="de-AT">
    <link rel="alternate" href="http://www.site.it/de/" hreflang="de-IT">
    <link rel="alternate" href="http://www.site.it/" hreflang="it-IT">
    <link rel="alternate" href="http://www.site.ch/fr/" hreflang="fr-CH">
    <link rel="alternate" href="http://www.site.se" hreflang="sv-SE">
    <link rel="alternate" href="http://cz.site.com/" hreflang="cs-CZ">
    <link rel="alternate" href="http://www.site.hu/" hreflang="hu-HU">
    <link rel="alternate" href="http://www.site.hr/" hreflang="hr-HR">
    <link rel="alternate" href="http://www.site.dk/" hreflang="da-DK">
    <link rel="alternate" href="http://pl.site.com/" hreflang="pl-PL">
    <link rel="alternate" href="http://sk.site.com/" hreflang="sk-SK">
    <link rel="alternate" href="http://sk.site.com/" hreflang="sk-SK">
    <link rel="alternate" href="http://uk.site.com/" hreflang="en-GB">
    <link rel="alternate" href="http://no.site.com/" hreflang="no-NO">
    <link rel="alternate" href="http://www.site.be/" hreflang="nl-NL">
    <link rel="alternate" href="http://www.site.be/fr/" hreflang="fr-BE">
    <link rel="alternate" href="http://www.site.be/de/" hreflang="de-DE">
    <link rel="alternate" href="http://no.site.com/" hreflang="no-NO">
</head>


И это ещё не полная!
–3
Pertinax ,  
Доброго времени суток!
Специально, чтобы не поднималась тема «обязательных необязательных» мета-тегов, я в нескольких местах, в статье, уточнил, что эти мета теги являются обязательными лишь с точки зрения SEO. Как я уже сказал, обязательный тег один- это title :)
Здесь собраны теги, котоые позволят просто сделать страницу идеальной с точки зрения спецификации. Никто не говорит о языковых связках и мелкой настройке.
Спасибо за комментарий.
+3
stepmex ,   * (был изменён)
Вы уж определитесь:
если отталкиваться от спецификации HTML, то обязательных мета-тегов, помимо charset, title и description, вообще нет.

обязательный тег один- это title


Ну и доносите тогда верную информацию:
3 meta-тега выше должны быть использованы первыми

Не правда. Позиция вообще никак не влияет на их работу.
Для подключения нужно использовать атрибут prefix=«og: ogp.me/ns#» в теге html.

Не нужно.
Скрипты положено добавлять перед закрывающим тегом body

Не правда.
–3
Pertinax ,  
Знаете, спорить не буду. По поводу title я сказал немного утрированно. Я имел в веду, что для какой-то задачи хватит и только этого тега. Ну еще кодировки, пожалуй.
По поводу позиции. Работать будет в любом случае. Но, например, я заметил, что при большом количестве мета-тегов и медленном соединении с интернетом, тот же самый OG соц. сети загружают медленнее. Модет, довод притяну ый за уши, но, даже отталкиваясь от логиги обработчика в браузере, то, что я написал Выше- это не лишено смысла.
Так же, по поводу Вашего уточнения, что не обяазтельно добавлять prefix дя OG. Я отталкиваюсь от документации протокола. Документацию пишут не для дураков. Я следую всегда этому принципу. В документации на первой же странице присутствует указание о добавлении prefix в html тег.
В любом случае, предлагаю не продолжать спор по той причине, что это лишь рекомендации, которые, действительно, сказываются на «карме» сайта. Статья несет познавательный характер. От того, что коллеги будут придерживаться (или нет) этих рекомендаций, то хуже не станет. Даже, наоборот.
0
Arik ,  
3 meta-тега выше должны быть использованы первыми
Не правда. Позиция вообще никак не влияет на их работу.
bootstrap таким грешил в 3 версии, как минимум в своих примерах, в 4 уже тишина по этому поводу
+1
nazarpc ,  

Страница c одним лишь <!doctype html><title>Hello</title> идеальная с точки зрения спецификации, если не верите на слово — вставьте в валидатор: https://validator.w3.org/nu/#textarea


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


Так что указанные вами обязательные (согласно громкому заголовку статьи) мета-тэги обязательными не являются даже близко, а порядок и правда не имеет никакого значения с точки зрения спецификации из практических соображений, как то блокирование отрисовки страницы.


Вердикт — гуру, которых вы упомянули в самом начале, были совершенно правы.

–1
+1 –2
Pertinax ,  
Обновил статью. Читайте последний абзац для лучшего восприятия статьи.
0
+1 –1
Pertinax ,  
Перенес предупреждение в начало.
+2
Akuma ,   * (был изменён)
Ух, жесть. Особенно порадовало «В какой последовательности нужно использовать мета-теги».
На то они и опытные верстальщики, что «Не имеет значения».

P.S. Перенесите последний абзац нверх что-ли, чтоб не пугать людей.
0
Denai ,  
Тип image/x-icon устарел в 2003 году после стандартизации типа для ICO. Где иконки для android, почему именно эти для яблочников, где они же для виндофонов? Почему OG обязателен, а твиттер нет?
0
Pertinax ,  
Возможно он и устарел, но, по факту, в документации для веб-разработчиков от компании Yandex и Google до сих пор уместен этот тип. Вот тому доказательство (ссылка).
OG универсален. Его достаточно.
0
Denai ,   * (был изменён)
А зачем вообще указывать путь к дефолтным иконкам, если они лежат в корне сайта и называются по умолчанию? Их какие-то браузеры/системы не будут в этом случае подхватывать?
0
Pertinax ,  
Мое мнение- не зачем. Но вот, к сожалению, снова упираемся в документацию, спецификацию, выпущенную Yahoo!, которой до сих пор придерживаются современные поисковые системы, и понимаем, что ответом является слово «Так надо». Вообще, немного странную реакцию заметил на статью. Ведь, я отталкиваюсь от информации, собранной за последний год, со свежих источников, из документаций для веб-разработчиков, а так же, от собственного опыта.
0
Denai ,  
Опыт должен быть чем-то обоснван, иначе в него верить не хочется. Чем, например, спецификация Yahoo! лучше других? Тема достаточно противоречивая, а вы утверждаете всё так, как будто может быть единое мнение.
0
Pertinax ,  
Не совсем так. По факту, тема была достаточно давно противоречивой и таковой остается. Теги, которые я привел, не важно, какой в них тип указывать, использовать keywords или нет, в целом, корректируют отображение сайта и позволяют улучшить SEO. Я подобрал именно необходимые с этой точки зрения теги. Я же не предлагаю исписать 2000 строк. В них нет лишних. Так как, даже тот же самый keywords, может учитываться поисковиками.