Itemprop có một ý nghĩa khác nhau trên các liên kết so với thẻ span?


7

Tôi đang sử dụng đánh dấu Schema.org cho một Person, nhưng tôi nhận được kết quả không nhất quán trong Công cụ kiểm tra đoạn mã phong phú của Google khi sử dụng <a>thẻ so với <span>thẻ. Lấy hai ví dụ sau:

<span itemprop="author" itemscope itemtype="http://schema.org/Person">
  <a href="http://example.com/user/username">
    <span itemprop="name">username</span>
  </a>
</span>
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
  <a href="http://example.com/user/username" itemprop="name">username</a>
</span>

Cái đầu tiên hiển thị tên được phân tích cú pháp username, nhưng khi tôi thử cái thứ hai để lưu trên HTML, nó hiển thị tên người dùng là http://example.com/user/username- tức là URL của liên kết.

Tại sao điều này xảy ra, và nó là hành vi đúng? Tôi không thể tìm thấy bất kỳ tài nguyên nào phân biệt giữa itempropliên kết so với a span.


Và đây là lý do tại sao tôi thích sử dụng JSON-LD.
Simon Hayter

1
@Simon tại sao lặp lại tất cả nội dung của bạn trong một khối JSON? Nó có ý nghĩa với tôi để sử dụng HTML hiện có.
DisgruntledGoat

Bởi vì việc thường xuyên viết nội dung của bạn xung quanh lược đồ là không tự nhiên vì thường xuyên hơn bạn bắt đầu tổ chức và hiển thị nội dung trang cho Google và Bing chứ không phải Khách truy cập. JSON-LD dễ quản lý hơn và không phải chịu đựng UX xung quanh mã của bạn. Hơn nữa, JSON-LD có thể được thêm vào Trình quản lý thẻ của Google thậm chí còn nhanh hơn và tiết kiệm máy chủ của bạn phải phục vụ cái này được gọi là NỘI DUNG CÙNG :)
Simon Hayter

Điều đó không bao giờ xảy ra với tôi. Tôi thêm các thuộc tính cho các phần tử hiện có, thỉnh thoảng thêm các phần tử trình bao bọc, nhưng tôi không bao giờ cần thay đổi thiết kế hoặc UX để chứa Schema.
DisgruntledGoat

Câu trả lời:


9

Thông số kỹ thuật nói gì

Vâng, hành vi đó là chính xác. Mục 5.4 của thông số kỹ thuật Microdata W3C mô tả giá trị nào sẽ được sử dụng.

Trong hầu hết các trường hợp, nội dung của phần tử được sử dụng làm itempropgiá trị, nhưng trong một số trường hợp, giá trị của thuộc tính được sử dụng làm itempropgiá trị.

Đây là trường hợp cho sáu attributes¹: content², src, href, data, value, datetime.

Điều này có ý nghĩa gì trong thực tế

Nếu bạn muốn sử dụng nội dung của một aphần tử (thay vì URL trong hrefthuộc tính của nó ) làm giá trị thuộc tính, bạn phải sử dụng / thêm phần tử cha hoặc phần tử con phù hợp:

<a href="ignored-url"><span itemprop="property">property value</span></a>
<span itemprop="property"><a href="ignored-url">property value</a></span>

Nếu bạn muốn cung cấp một URL như giá trị tài sản, bạn phải sử dụng itemproptrên một trong những yếu tố sở hữu URL (ví dụ, các yếu tố mà can³ có một href, srchoặc datathuộc tính). Vì vậy, điều này sẽ không hợp lệ (trừ khi bạn muốn cung cấp một chuỗi dưới dạng giá trị trông giống như một URL):

<!-- INVALID --> <span itemprop="property">http://example.com/foo</span>

Must Nó phải hợp lệ cho phần tử có thuộc tính này. Vì vậy, đối với một (không hợp lệ!) <div href="" itemprop=""></div>, Nội dung phần tử được sử dụng, không phải hrefgiá trị.

² Trong thông số kỹ thuật cũ của Microdata của WHATWG và W3C, chỉ metaphần tử mới có thể có contentthuộc tính , nhưng thông số kỹ thuật Microdata W3C mới (hiện là Bản nháp làm việc) cho phép contenttrên bất kỳ phần tử nào. Nếu một phần tử có contentthuộc tính và cũng là một trong những thuộc tính được liệt kê khác, contentsẽ được sử dụng.

³ Microdata làm cho nó không hợp lệ để có một trong các yếu tố sở hữu URL mà không thuộc tính URL tương ứng của họ (ví dụ href, src, data), trừ các linkphần tử (nhưng nó đã được yêu cầu của HTML để có hrefthuộc tính).


Như mọi khi (!), Tuyệt vời! Chúc mừng !!
Closnoc
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.