Связывание внешней схемы 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"
} ] }
4 answers
В script
элемент может использоваться для двух целей:
- динамические/классические сценарии
- данные
И для данных спецификация определяет:
При использовании для включения блоков данных данные должны быть встроены в [...]
Таким образом, вы можете использовать атрибут src
только для сценариев, а не для данных.
→ Поскольку JSON-LD - это данные, вы должны встроить их.
В то время как возможно связывание файла JSON-LD с помощью элемента link
Schema.org спонсирующие поисковые системы, похоже, не поддерживают это.
В соответствии с документацией:
[…] Кроме того, Google может считывать данные JSON-LD, когда они динамически вводятся в содержимое страницы, например, с помощью кода JavaScript или встроенных виджетов в вашу систему управления контентом.
Это говорит о том, что, хотя вы не можете связать внешние данные json-ld, вы все равно можете динамически загружать их и вводить в DOM. Этого может быть достаточно для вашего варианта использования, так как вы можете загружать статический JavaScript на свою страницу это затем введет JSON-LD в DOM.
Это может или может не помочь, но взгляните, как Тревор Фокс сделал это:
<script>
$.getJSON( "/your-schema-file.jsonld", function( data ) {
$( "<script/>", {
"type": "application/ld+json",
"html": JSON.stringify(data)
}).appendTo( "head" );
});
</script>
Это может быть вашим лучшим вариантом. Он использовал jQuery версии 3.1.1 для этого решения.
Ответ Unor подводит итог, но я также хочу добавить:
Из спецификации:
Установка атрибута [
type
] в любое другое значение [отличное от MIME-типа JavaScript] означает, что сценарий представляет собой блок данных , который не обрабатывается. Ни один из атрибутов<script>
(кроме самогоtype
) не оказывает никакого влияния на блоки данных. Авторы должны использовать допустимый тип MIME, который не является типом MIME JavaScript, для обозначения блоков данных.
Итак, в другими словами, если у вас есть <script>
с атрибутом type
, установленным для чего-либо, кроме text/javascript
(или эквивалентного типа MIME JavaScript ), то все атрибуты, включая src
, не будут иметь никакого эффекта.