Использование тега ‹meta› HTML5+Microdata в ‹body›

Я хочу указать, находится ли Продукт в наличии, используя тег <meta> HTML5+Microdata, используя Schema.org.

Я не уверен, что это правильный синтаксис:

<div itemscope itemtype="http://schema.org/Product">
  <h2 itemprop="name">Product Name</h2>
  <dl itemprop="offers" itemscope itemtype="http://schema.org/Offer">
    <dt itemprop="price">$1</dt>
    <meta itemprop="availability" itemscope itemtype="http://schema.org/ItemAvailability" itemid="http://schema.org/InStock">
  </dl>
</div>

person jacko333    schedule 03.09.2011    source источник
comment
Вы проверили, как это выглядит в Инструмент тестирования расширенного описания?   -  person Oded    schedule 03.09.2011
comment
@Oded Не могу проверить, потому что мой сайт не загружен. Кроме того, иногда инструменты правильно извлекают содержимое, даже если синтаксис неверен! Итак... синтаксис правильный?   -  person jacko333    schedule 03.09.2011
comment
Я думаю, что путаница может быть связана с этим разделом справки Google Merchant Center. Это показывает это: <meta itemprop="availability" itemtype="http://schema.org/ItemAvailability" content="http://schema.org/InStock"/>   -  person bluescrubbie    schedule 14.11.2014
comment
@bluescrubbie Я удивлен, что Google поддерживает этот синтаксис. Хотя itemtype технически является глобальным атрибутом, я никогда не видел, чтобы элемент meta использовал его в дикой природе. developer.mozilla.org/en-US/docs/Web/ HTML/элемент/мета   -  person chharvey    schedule 15.02.2016


Ответы (6)


Тег meta нельзя использовать с таким itemscope. Правильный способ выразить это через каноническую ссылку с использованием тега link:

<div itemscope itemtype="http://schema.org/Product">
  <h2 itemprop="name">Product Name</h2>
  <dl itemprop="offers" itemscope itemtype="http://schema.org/Offer">
    <dt itemprop="price">$1</dt>
    <link itemprop="availability" href="http://schema.org/InStock">
  </dl>
</div>
person Lawrence Woodman    schedule 09.09.2011
comment
Хорошая разметка. Я хотел бы узнать больше об этом смысле реализации, я не знаю, как это работает. У вас или у кого-то еще, читающего это, есть источник? - person superhero; 29.04.2012
comment
Это в документации на schema.org: Перечисления и канонические ссылки: используйте ссылку с href - person Michaël Hompus; 27.02.2013

Я сделал то же самое, что и OP, и получил то же самое, где доступность инструмента тестирования связана с подпунктом... Наконец-то я смог правильно проверить его с помощью этого:

<meta itemprop='availability' content='http://schema.org/InStock'>

Вот структурированный вывод Google для предложения:

Item 1
type:   http://schema.org/offer
property:   
price:  Price: $139.00
pricecurrency:  USD
availability:   http://schema.org/InStock
person Fourth Wave    schedule 01.08.2013

Хотя разрешено использовать meta (если используется для микроданных!) в body, ваш пример неверен по нескольким причинам. :

  • Элемент dl может содержать только элементы dt или ddscript/template). Вы должны либо поместить meta внутрь dt/dd, либо за пределы dl (но тогда вам придется переместить itemscope).

  • Элемент meta должен иметь атрибут content.

  • Использование itemid для этой цели некорректно, а http://schema.org/ItemAvailability не является типом, поэтому использование itemscope+itemtype также некорректно.

  • Однако, если значение itemprop является URI, вы должны использовать элемент link вместо элемента meta.

Кроме того, значение price не должно содержать символ валюты, и кажется, что ваше dt на самом деле должно быть dddt, содержащим «Цена» или что-то в этом роде).

Итак, вы можете использовать:

<dl itemprop="offers" itemscope itemtype="http://schema.org/Offer">
  <dt>Price</dt>
  <dd>$<span itemprop="price">1</span> <link itemprop="availability" href="http://schema.org/InStock" /></dd>
</dl>
person unor    schedule 26.07.2016
comment
Разрешено ли использовать мета в теле, но это создает скрытый элемент, а Google не любит скрытые вещи. Недавно я получил одно оповещение в Инструментах для веб-мастеров о том, что обнаружен спам в структурированных данных. На этом веб-сайте прямо под ‹div itemscope= itemtype=schema.org/Article› была указана ‹meta itemprop=inLanguage. content=en-US› element — на самом деле он даже проходил проверку с помощью Google Structured Data Tool — но веб-мастера настаивали на скрытом содержании в структурированных данных. Я должен был удалить это, наконец. Любые идеи о том, что с этим случаем? - person Sbpro; 02.09.2017
comment
@Sbpro: Если бы это был действительно единственный скрытый элемент, я бы предположил, что инструменты Google для веб-мастеров плохие. Существует множество причин, по которым следует использовать meta/link (они есть даже в собственных примерах Google), и случай с inLanguage — очень веская причина: вы не хотите, чтобы en-US был виден пользователю. Кроме того, с JSON-LD (который Google рекомендует использовать) все равно все скрыто. Совет действительно означает: не обманывайте, скрывая от пользователей контент, который вы показываете поисковым системам. -- Автоматическое обнаружение таких плохих случаев, конечно, непросто, поэтому их инструменты не работают. - person unor; 02.09.2017
comment
Спасибо что нашли время ответить. Да, это был единственный скрытый элемент. Я согласен с тем, что есть много причин для использования таких элементов и предоставления структурированных данных, которые не обязательно должны быть видимыми. Google здесь похож на крутого полицейского. Даже в документах JSON-LD он предупреждает о предоставлении информации, которой нет в html. Я разрабатываю плагин CMS для обработки микроданных - поиск и исследование лучших практик, но все же любая информация, которую я нашел, расплывчата. Кстати, я прочитал так много ваших сообщений по теме, и они действительно полезны. - person Sbpro; 02.09.2017

Я сделал jsfiddle здесь: http://jsfiddle.net/dLryX/, затем поместил вывод (http://jsfiddle.net/dLryX/show/) в инструмент расширенных фрагментов.

Это вернулось с:

введите здесь описание изображения

Я считаю, что синтаксис правильный, и что предупреждение не важно, так как у него нет свойства, так как это метатег.

person Rich Bradshaw    schedule 03.09.2011
comment
Это недействительно, проверьте документацию на schema.org о перечислениях. Кроме того, метатеги должны иметь содержимое, соответствующее HTML. - person Michaël Hompus; 27.02.2013

Смотрите под заголовком Невидимый контент (не уверен, что это поможет):

Инструменты Google для веб-мастеров – о микроданных

Как правило, Google не отображает контент, который не виден пользователю. Другими словами, не показывайте контент пользователям одним способом и используйте скрытый текст для разметки информации отдельно для поисковых систем и веб-приложений. Вы должны разметить текст, который на самом деле появляется вашим пользователям, когда они посещают ваши веб-страницы.

Есть несколько исключений из этого правила. В некоторых ситуациях может быть полезно предоставить поисковым системам более подробную информацию, даже если вы не хотите, чтобы эта информация была видна посетителям вашей страницы. Например, если ресторан имеет рейтинг 8,5, пользователи (но не поисковые системы) будут считать, что рейтинг основан на шкале от 1 до 10. В этом случае вы можете указать это с помощью мета-элемента, например:

<div itemprop="rating" itemscope itemtype="http://data-vocabulary.org/Rating"> Rating: <span itemprop="value">8.5</span> <meta itemprop="best" content="10" /> </div>

person Ricardinho    schedule 23.01.2014
comment
Не твоя вина, но в этом случае Google так бесполезен, лол. В основном не делайте этого, за исключением исключений, в этом случае сделайте это! ммм… спасибо. - person chharvey; 08.02.2016

Это пример из руководства по началу работы schema.org для поддержки ответа @Lawrence.

Однако мне не нравится использование тега ссылки внутри тела страницы. Из MDN:

Тег ссылки может встречаться только в элементе head;

Разве нет лучшего способа указать доступность с помощью допустимой разметки?

person idophir    schedule 06.02.2013
comment
link и meta разрешены в body, если они используются для микроданных. - person unor; 10.10.2013
comment
Хотя ваша цитата технически присутствует на странице, вы должны читать между строк. Обратите внимание вверху: Категории контента: содержание метаданных. Если присутствует itemprop: потоковое содержимое и фразовое содержимое. Поскольку в теле может присутствовать поток и фразовое содержимое, <link/> может присутствовать в теле, если и только если оно имеет атрибут itemprop. - person chharvey; 08.02.2016