Так уж вышло, что веб-страницы просматриваются не только людьми, но и роботами. При всей своей умности, роботы не всегда точно понимают смысл контента. По этому специально для них были придуманы различные форматы мета-данных.
<title> и <meta name="description">
Эти мета-данные были одними из самых первых, которые помогали роботам понять суть страницы.
В теге <title>
размещают заголовок страницы. Для каждой страницы должен быть указан заголовок и лучше всего, если он будет уникальным для всего сайта. На размер строки заголовка нет явных ограничений, но из практических соображений не стоит делать его длиннее 70-80 символов.
В атрибуте content
тега <meta name="description">
размещают кратное описание страницы. Длину стоит ограничить 150-160 символами потому, что оно активно используется для построения сниппета в поисковой выдаче и более длинное описание будет автоматически укорочено. Явного ограничения в спецификациях нет. Содержимое, как и в случае с заголовком страницы, должно быть уникальным для всего сайта.
Ещё одним классическим тегом считается <link rel="canonical">
. Он нужен для того, чтобы сообщить роботам какая из страниц с одинаковым содержимым, если таковые имеются, считается основной. Адрес задаётся в атрибуте href
.
Протокол Open Graph
С появлением социальных сетей и кнопок «Like» простого заголовка и описания стало недостаточно. Социальные сети хотели отображать у себя на страницах картинку, видео или аудио материалы, которые отметили пользователи.
Facebook разработал на основе RDFa упрощенный протокол Open Graph
, который работает в одном пространстве имён og
и имеет ограниченный набор типов данных (музыка, видео, статья, книга, персона и сайт).
<html prefix="og: http://ogp.me/ns# article: http://ogp.me/ns/article#">
<head>
<title>Больше семантики для логотипа :: Хранитель заметок</title>
<meta property="og:title" content="Больше семантики для логотипа">
<meta property="og:type" content="article">
<meta property="og:url" content="http://noteskeeper.ru/945/">
<meta property="og:image" content="http://noteskeeper.ru/assets/img/nk-logo-200.png">
<meta property="og:description" content="Разметке логотипа можно добавить семантики с помощью microdata. Тип Brand позволяет указать логотип для продуктов и людей">
<meta property="og:site_name" content="Хранитель заметок">
<meta property="article:published_time" content="2013-08-26T03:31:18+00:00">
<meta property="article:section" content="Вёрстка">
<meta property="article:tag" content="microdata">
...
Протокол получил поддержку у множества социальных сервисов и поисковых систем. Некоторые из них, например, Twitter и Вконтакте, адаптируют его для своих нужд, используя часть полей Open Graph и дополняя необходимыми данными.
Microdata и RDFa
Почти одновременно в 2009 году появились черновики двух спецификаций, оперирующих со сложными типами объектов и поддерживающие их глубокую вложенность:
- Microdata – HTML Microdata Nightly и HTML Living Standard
- RDFa – RDFa Core и HTML+RDFa
Оба формата используют дополнительные атрибуты HTML-элементов, чтобы указать тип объекта и его свойства. Значения свойств за некоторым исключением берётся из текстового содержимого элемента.
RDFa позволяет указывать значение свойства с помощью атрибута content
у любого элемента:
<span property="dc:modified"
content="2013-09-16T15:00:00+00:00"
datatype="xsd:dateTime">16 сентября 2013 года</span>
В то время как парсерам Microdata требуются дополнительные элементы <meta>
или <link>
:
<span>16 сентября 2013 года</span>
<meta itemprop="dateModified" content="2013-09-16T15:00:00+00:00">
Разметка с помощью Microdata или RDFa позволяют сообщить роботам о семантике контента независимо от того какими тегами он размечен в HTML. Более того, форматы позволяют обозначить данные, невидимые пользователю в силу внешнего дизайна страницы.
“Shaken, not stirred”
При всём разнообразии мета-данных, которые можно впихнуть на страницу, складывается ситуация, когда одни и те же данные будут повторяться в HTML-коде несколько раз.
Например, описание страниц, которое фигурирует во всех форматах, можно передать в одном теге:
<meta content="Разметке логотипа можно добавить семантики с помощью microdata. Тип Brand позволяет указать логотип для продуктов и людей"
name="description"
property="og:description"
itemprop="description"
id="_articleDescription">
В этом примере свойство description
типа http://schema.org/Article
подключается в объект с помощью ссылки по id
в атрибуте itemref
. Если это позволяет разметка, то тип самого важного объекта на странице можно объявить у корневого элемента документа. Тогда все теги meta
естественным образом окажутся в области видимости этого объекта.
<html prefix="og: http://ogp.me/ns# article: http://ogp.me/ns/article#" itemscope itemtype="http://schema.org/Article">
<head>
<title>Больше семантики для логотипа :: Хранитель заметок</title>
<meta property="og:title" content="Больше семантики для логотипа" itemprop="name">
<meta property="og:type" content="article">
<meta property="og:url" content="http://noteskeeper.ru/945/" itemprop="url">
<meta property="og:image" content="http://noteskeeper.ru/assets/img/nk-logo-200.png" itemprop="image">
<meta property="og:description" content="Разметке логотипа можно добавить семантики с помощью microdata. Тип Brand позволяет указать логотип для продуктов и людей" itemprop="description">
<meta property="og:site_name" content="Хранитель заметок">
<meta property="article:published_time" content="2013-08-26T03:31:18+00:00" itemprop="dateCreated">
<meta property="article:section" content="Вёрстка" itemprop="articleSection">
<meta property="article:tag" content="microdata" itemprop="keywords">
...
Так как привязка нового объекта к «родителю» осуществляется только наличием у него атрибута itemprop
, то при его отсутствии новый объект помещается на самый верхний уровень иерархии. Получается, что на странице можно безопасно размещать несколько независимых объектов.
Атрибуты role и aria-*
Особняком стоят атрибуты Web Accessibility Initiative (WAI). Они используются вспомогательными технологиями для обеспечения доступности контента для пользователей с ограниченными возможностями.
Скринридерам часто приходится специально сообщать о назначении элемента (атрибут role
), его названии (атрибуты aria-label, aria-labelledby, aria-describedby
) или состоянии, так как у него нет другого способа передать эту информацию пользователю.
Заключение
- Старайтесь сообщить как можно больше полезной информации о содержимом страницы для роботов даже если она останется невидимой для человека.
- Избегайте повторения одних и тех же мета-данных в разных форматах. Чаще всего их можно объединить, используя разные техники.
- Проверяйте качество разметки с помощью соответствующих парсеров и валидаторов.