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

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

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

Предисловие


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


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


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


Следует сразу сказать, что если отталкиваться от спецификации HTML, то обязательных мета-тегов, действительно, нет. Для правильной работы страницы достаточно указать кодировку и написать заголовок.
Но как мы все знаем, на деле, каждый проект (почти каждый) имеет цель- привлечь пользователей/посетителей. Поэтому мы будем рассматривать полезные (я бы даже сказал слово «необходимые»), почти универсальные, мета-теги, которые помогут оптимизировать отображение Вашего сайта, улучшить совместимость и сделать его максимально «дружелюбным» для поисковых систем с точки зрения SEO.


Внимание! Шаблонное копирование мета-тегов из проекта в проект- это неправильно. Но, по моему мнению, это необходимый «минимальный» комплект. Данная статья является моим субъективным мнением, каждый пункт которого отталкивается строго от документаций для веб-мастеров Google и Yandex, а так же, спецификации HTML.


Начинаем


Прежде чем начинать разбираться с тегами, разберемся с последовательностью.
Последовательность, по большому счету, действительно, не важна. Документ будет корректно и быстро открываться при любом порядке написания мета-тегов.
Но нужно учитывать то, что первыми должны идти общие теги, а после них- уникальные для каждой страницы. Это обосновано просто опытом моей работы по доделыванию и переделыванию проектов. Так комфортнее читать код. Также, нужно учитывать то, что .html файл читается последовательно. Поэтому, желательно, кодировку указывать в первую очередь. Также не стоит забывать о простой логике и не разбрасывать теги, приближенные по области применения, по всему head. Например, языковые связки следует держать в одном месте, друг за другом, а заголовок и описание- в другом.


Начнем с 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>


Нюансы


Устаревшие типы и теги


Речь и дет о таких мета-тегах, как keywords и таких типах файлов, как image/x-icon.
Большинство людей считают, что, например, тег keywords безсмысленно использовать, так как он уже давно устарел. Или, тип x-icon.
Отвечу раз и навсегда на это. Нужно всегда отталкиваться от документациий для веб-разработчиков, созданными (и регулярно обновляемыми) поисковыми системами. Документацию пишут не дураки. Например, в документации Яндекс до сих пор указано, что «keywords МОЖЕТ использоваться поисковой системой для формирования сниппета», а тип x-icon указан вообще первым и ничего не сказано про то, что он устарел.


OpenGraph


Прошу заметить, что данная интеграция, как и следующая, которую я приведу, действительно, не являются обязательными. Но отталкиваясь от спецификации Yahoo!, которая была сделана много лет назад и до сих пор является действительной, можно сделать вывод, что эта интеграция необходима, чтобы повысить «карму» сайта.
Связано это с тем, что с точки зрения SEO, да и здравого смысла, рейтинг сайта зависит от того, на сколько он «универсальный солдат». Иными словами, зависит он от того, на сколько он удобен для пользователя на разных устройствах, какие дополнительные полезные возможности он в себя включает и т.п. И в это входит адаптация по iOS устройства, интеграция двух протоколов, которые я привел в этой статье, отсутвие атрибута alt в изображениях и много чего другого.
Лично я пользуюсь уже несколько лет данным ресурсом-плагином для браузера, чтобы проверять соответствие сайта этим требованиям. Прошу заметить, что, нами всеми любимый, Хабрахабр и Тостер отвечают, почти на каждой странице (на некоторых страницах это просто невозможно или ненужно) всем пунктам этого чеклиста.


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, может учитываться поисковиками.