Связывание внешней схемы JSON-LD (из Schema.org)


У меня есть схема в JSON-LD в соответствии с Schema.org . Когда он был встроен (в тегах <script>), инструмент тестирования структурированных данных Google успешно распознал схему.

Если я свяжу его внешне, инструмент тестирования структурированных данных не распознает его. Например:

<script src="json/main-schema.json" type="application/ld+json"></script>

Это то, о чем я должен беспокоиться?


Как у меня была рабочая схема (пример из Schema.org ):

<script type="application/ld+json">
{ "@context" : "http://schema.org",
  "@type" : "Organization",
  "url" : "http://www.your-company-site.com",
  "contactPoint" : [
    { "@type" : "ContactPoint",
      "telephone" : "+1-401-555-1212",
  "contactType" : "customer service"
    } ] }
</script>

Внешняя схема, представленная в main-schema.json, связанный с:

<script src="json/main-schema.json" type="application/ld+json"></script>
{ "@context" : "http://schema.org",
  "@type" : "Organization",
  "url" : "http://www.your-company-site.com",
  "contactPoint" : [
    { "@type" : "ContactPoint",
      "telephone" : "+1-401-555-1212",
  "contactType" : "customer service"
    } ] }
Author: Jeremy Caney, 2017-02-21

4 answers

В script элемент может использоваться для двух целей:

  • динамические/классические сценарии
  • данные

И для данных спецификация определяет:

При использовании для включения блоков данных данные должны быть встроены в [...]

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

→ Поскольку JSON-LD - это данные, вы должны встроить их.

В то время как возможно связывание файла JSON-LD с помощью элемента link Schema.org спонсирующие поисковые системы, похоже, не поддерживают это.

 15
Author: unor, 2017-05-23 12:37:06

В соответствии с документацией:

[…] Кроме того, Google может считывать данные JSON-LD, когда они динамически вводятся в содержимое страницы, например, с помощью кода JavaScript или встроенных виджетов в вашу систему управления контентом.

Это говорит о том, что, хотя вы не можете связать внешние данные json-ld, вы все равно можете динамически загружать их и вводить в DOM. Этого может быть достаточно для вашего варианта использования, так как вы можете загружать статический JavaScript на свою страницу это затем введет JSON-LD в DOM.

 4
Author: Attila O., 2018-05-30 21:24:20

Это может или может не помочь, но взгляните, как Тревор Фокс сделал это:

<script>

$.getJSON( "/your-schema-file.jsonld", function( data ) {
$( "<script/>", {
"type": "application/ld+json",
"html": JSON.stringify(data)
}).appendTo( "head" );
});

</script>

Это может быть вашим лучшим вариантом. Он использовал jQuery версии 3.1.1 для этого решения.

 4
Author: James Anderson Jr., 2019-01-31 18:36:08

Ответ Unor подводит итог, но я также хочу добавить:

Из спецификации:

Установка атрибута [type] в любое другое значение [отличное от MIME-типа JavaScript] означает, что сценарий представляет собой блок данных , который не обрабатывается. Ни один из атрибутов <script> (кроме самого type) не оказывает никакого влияния на блоки данных. Авторы должны использовать допустимый тип MIME, который не является типом MIME JavaScript, для обозначения блоков данных.

Итак, в другими словами, если у вас есть <script> с атрибутом type, установленным для чего-либо, кроме text/javascript (или эквивалентного типа MIME JavaScript ), то все атрибуты, включая src, не будут иметь никакого эффекта.

 1
Author: chharvey, 2017-12-29 22:34:38