Liên kết lược đồ JSON-LD bên ngoài (từ Schema.org)


11

Tôi có các lược đồ trong JSON-LD theo Schema.org. Khi nó là nội tuyến (trong <script>thẻ), công cụ kiểm tra dữ liệu có cấu trúc của Google đã nhận ra lược đồ thành công.

Nếu tôi liên kết nó ra bên ngoài, ví dụ: <script src="json/main-schema.json" type="application/ld+json"></script>các công cụ kiểm tra dữ liệu có cấu trúc không nhận ra nó.

Đây có phải là điều tôi nên lo lắng?


Làm thế nào tôi có lược đồ làm việc (ví dụ từ 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>

Lược đồ bên ngoài được bố trí trong main-schema.json, được liên kết với <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"
    } ] }

Bạn đã thử sử dụng một URL tuyệt đối chứ không phải là một URL tương đối? Mặc dù tôi không biết câu trả lời cho vấn đề này, nhưng hãy giải quyết nhanh nếu bạn muốn dữ liệu nằm trong tệp bên ngoài chỉ đơn giản là đặt nội dung trong tệp php ... sau đó bạn chỉ cần gọi tệp trong chân trang bằng cách sử dụng <?php include 'json.php';?>, chỉ là một tâm trí gợi ý.
Simon Hayter

1
@Unor nói ở đây stackoverflow.com/a/30880613/1892635 bạn cần sử dụng <link>không <script> từ src=""không hợp lệ. Nhưng Google chỉ hỗ trợ tập lệnh ... nên có vẻ như nó phải là nội tuyến.
Simon Hayter

@SimonHayter - vâng, thông thường là vậy, tôi đã xóa nó làm ví dụ. Cảm ơn các liên kết khác - xin lỗi tôi đã không nhìn thấy nó!
marcellothearcane

Câu trả lời:


11

Phần scripttử có thể được sử dụng cho hai thứ:

  • kịch bản động / cổ điển
  • dữ liệu

Và đối với dữ liệu, thông số kỹ thuật xác định:

Khi được sử dụng để bao gồm các khối dữ liệu, dữ liệu phải được nhúng nội tuyến

Vì vậy, bạn có thể chỉ sử dụng srcthuộc tính cho các tập lệnh, không phải cho dữ liệu.

→ Vì JSON-LD là dữ liệu, bạn phải nội tuyến nó.

Mặc dù có thể liên kết tệp JSON-LD với linkphần tử, các công cụ tìm kiếm tài trợ Schema.org dường như không hỗ trợ nó.


3

Theo tài liệu :

[Vách] Ngoài ra, Google có thể đọc dữ liệu JSON-LD khi được nhập động vào nội dung của trang , chẳng hạn như bằng mã JavaScript hoặc các tiện ích nhúng trong hệ thống quản lý nội dung của bạn.

Điều này cho thấy rằng, mặc dù bạn không thể liên kết dữ liệu json-ld bên ngoài, bạn vẫn có thể tải nó một cách linh hoạt và đưa nó vào DOM. Điều này có thể đủ tốt cho trường hợp sử dụng của bạn, vì bạn có thể tải JavaScript tĩnh trên trang của mình, sau đó sẽ đưa JSON-LD vào DOM.


3

Điều này có thể , hoặc có thể không giúp ích, nhưng hãy xem Trevor Fox đã làm như thế nào :

<script>

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

</script>

Đây có thể là lựa chọn tốt nhất của bạn. Ông đã sử dụng jQuery phiên bản 3.1.1 cho giải pháp này.


1

câu trả lời của unor tổng hợp lại, nhưng tôi cũng muốn thêm:

Từ thông số kỹ thuật:

Đặt typethuộc tính [ ] thành bất kỳ giá trị nào khác [ngoài loại MIME JavaScript] có nghĩa là tập lệnh là một khối dữ liệu , không được xử lý. Không <script>thuộc tính nào (ngoại trừ typechính nó) có bất kỳ ảnh hưởng nào đến các khối dữ liệu. Tác giả phải sử dụng loại MIME hợp lệ không phải là loại MIME JavaScript để biểu thị các khối dữ liệu.

Vì vậy, nói cách khác, nếu bạn có một <script>với một typebộ thuộc tính để bất cứ điều gì khác hơn text/javascript(hoặc tương đương JavaScript kiểu MIME ), sau đó tất cả các thuộc tính, bao gồm cả src, sẽ không có hiệu lực.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.