mainEntityOfPage
Thuộc tính schema.org chỉ định thực thể chính được mô tả trên trang (ví dụ: Article là mainEntityOfPage của URL bài viết).
mainEntityOfPage là gì?
mainEntityOfPage là một thuộc tính chuẩn trong schema.org, dùng để chỉ rõ thực thể chính (main entity) được mô tả trên một trang web. Nói cách khác, đây là cách bạn nói với công cụ tìm kiếm: “Trang này chủ yếu nói về cái gì?”. Ví dụ: một bài viết tin tức có kiểu dữ liệu Article, thì thuộc tính mainEntityOfPage sẽ trỏ đến chính Article đó — và ngược lại, Article sẽ khai báo trang URL hiện tại là mainEntityOfPage của nó.
Thuộc tính này không bắt buộc, nhưng khi dùng đúng, nó giúp tăng độ rõ ràng cho cấu trúc dữ liệu có cấu trúc (structured data), đặc biệt khi trang chứa nhiều thực thể (ví dụ: bài viết + người viết + tổ chức + bình luận). Nó phân biệt giữa “thực thể chính” và “các thực thể phụ trợ”.
Tại sao quan trọng trong SEO?
mainEntityOfPage không trực tiếp ảnh hưởng đến thứ hạng tìm kiếm — Google xác nhận điều này rõ ràng trong tài liệu hỗ trợ. Tuy nhiên, nó đóng vai trò then chốt trong việc tối ưu hóa khả năng hiểu nội dung của công cụ tìm kiếm, từ đó gián tiếp hỗ trợ:
- Tăng độ tin cậy của dữ liệu có cấu trúc khi kiểm tra bằng Rich Results Test hoặc URL Inspection Tool;
- Hỗ trợ hiển thị kết quả mở rộng (rich results) như bài viết, sản phẩm, sự kiện — nhất là khi trang có nhiều schema cùng lúc;
- Giảm nhầm lẫn khi trang chứa nhiều thực thể (ví dụ: trang danh mục sản phẩm có cả
WebPage,ItemList,Product); - Cải thiện khả năng lập chỉ mục chính xác cho các trang động hoặc đa ngôn ngữ (khi kết hợp với
@idvàurl).
Theo báo cáo kiểm thử thực tế từ các chuyên gia SEO Việt Nam và quốc tế (2022–2024), trang áp dụng mainEntityOfPage đúng chuẩn có tỷ lệ được công nhận schema tăng trung bình 12–18% so với trang không dùng — tùy mức độ phức tạp của markup.
Cách hoạt động
mainEntityOfPage hoạt động như một liên kết hai chiều giữa một thực thể (như Article, Product) và trang web chứa nó:
- Một thực thể (ví dụ:
Article) khai báo"mainEntityOfPage": {"@id": "https://example.com/bai-viet"}— nghĩa là “tôi là thực thể chính trên trang này”; - Ngược lại, trang (
WebPage) có thể khai báo"mainEntity": {"@id": "#article-1"}để trỏ tới thực thể con; - Khi cả hai tham chiếu khớp nhau (về ID và URL), công cụ tìm kiếm hiểu rõ mối quan hệ phân cấp.
Lưu ý: Giá trị của mainEntityOfPage phải là một @id hợp lệ — có thể là URL tuyệt đối, URL tương đối, hoặc ID fragment (ví dụ: #product-123). Nếu dùng fragment, trang phải chứa thực thể đó trong cùng một khối JSON-LD.
Hướng dẫn thực hiện
Dưới đây là các bước triển khai mainEntityOfPage an toàn và hiệu quả:
- Xác định thực thể chính: Đọc kỹ nội dung trang — bài viết? sản phẩm? hồ sơ doanh nghiệp? Đảm bảo chỉ chọn một thực thể làm main (không dùng cho nhiều thực thể cùng lúc);
- Chọn định dạng markup: Ưu tiên JSON-LD (dễ triển khai, ít lỗi hơn Microdata hoặc RDFa);
- Thêm thuộc tính vào schema: Đặt
"mainEntityOfPage": {"@id": "[URL-trang-hiện-tại]"}bên trong khối schema của thực thể chính; - Kiểm tra tính nhất quán: Đảm bảo URL trong
@idtrùng với URL thực tế của trang (không sai dấu gạch chéo, không thiếuhttps://, không dư ký tự); - Thử nghiệm: Dùng Rich Results Test hoặc Schema Markup Validator để xác minh.
Với trang bài viết, mẫu tối ưu là:
{"@context": "https://schema.org", "@type": "Article", "mainEntityOfPage": {"@id": "https://example.com/bai-viet-mau"}, "headline": "Tiêu đề bài viết", "datePublished": "2024-04-10"}
Lỗi thường gặp
Dưới đây là những sai lầm phổ biến khi triển khai mainEntityOfPage, kèm cách khắc phục:
| Lỗi | Hệ quả | Cách sửa |
|---|---|---|
Dùng nhiều mainEntityOfPage trên cùng một trang |
Markup bị coi là không hợp lệ; công cụ tìm kiếm bỏ qua toàn bộ schema | Chỉ giữ một thực thể chính duy nhất — nếu cần mô tả thêm, dùng additionalProperty hoặc sameAs |
Giá trị @id không khớp URL thực tế (ví dụ: thiếu https://, sai domain) |
Google không thể liên kết thực thể với trang → mất tính toàn vẹn schema | Dùng window.location.href trong script động hoặc kiểm tra thủ công từng trang |
Áp dụng cho thực thể không phù hợp (ví dụ: WebSite trên trang bài viết) |
Gây nhiễu ngữ nghĩa — giảm độ tin cậy của dữ liệu | Chỉ dùng với các loại schema có hỗ trợ thuộc tính này (xem danh sách tại schema.org/mainEntityOfPage) |
| Bỏ trống hoặc để giá trị null | Validator báo lỗi “value expected to be non-null” | Loại bỏ thuộc tính nếu không cần thiết — không nên để "mainEntityOfPage": null |
Ví dụ thực tế
Ví dụ 1 – Bài viết tin tức:
{"@context": "https://schema.org", "@type": "Article", "mainEntityOfPage": {"@id": "https://baokhoa.vn/tin-moi-nhat"}, "headline": "Cập nhật tin mới nhất hôm nay", "datePublished": "2024-06-15"}
Ví dụ 2 – Trang sản phẩm:
{"@context": "https://schema.org", "@type": "Product", "mainEntityOfPage": {"@id": "https://shop.vn/san-pham/a123"}, "name": "Điện thoại X100", "offers": {"@type": "Offer", "price": "8990000"}}
Ví dụ 3 – Trang hồ sơ doanh nghiệp (LocalBusiness):
{"@context": "https://schema.org", "@type": "LocalBusiness", "mainEntityOfPage": {"@id": "https://doanhnghiep.vn/gioi-thieu"}, "name": "Cửa hàng ABC", "address": {"@type": "PostalAddress", "streetAddress": "123 Lê Lợi"}}
Câu hỏi thường gặp
mainEntityOfPage có bắt buộc không?
Không. Đây là thuộc tính tùy chọn. Tuy nhiên, nếu trang có nhiều thực thể hoặc muốn đảm bảo schema được công nhận đầy đủ, nên sử dụng — đặc biệt khi nhắm tới rich results.
Có thể dùng mainEntityOfPage cho trang chủ không?
Có thể, nhưng cần thận trọng. Thực thể chính trên trang chủ thường là WebSite hoặc Organization. Nếu dùng mainEntityOfPage, giá trị @id phải là URL trang chủ (ví dụ: "@id": "https://example.com/"). Tuy nhiên, nhiều chuyên gia khuyên chỉ nên dùng khi trang chủ tập trung vào một thực thể rõ ràng — không nên áp dụng máy móc.
mainEntityOfPage khác gì với mainEntity?
mainEntityOfPage là thuộc tính của thực thể (ví dụ: Article), nói rằng “tôi là thực thể chính trên trang này”. Còn mainEntity là thuộc tính của trang (WebPage), nói rằng “trang này có thực thể chính là…”. Hai thuộc tính này bổ sung cho nhau, nhưng không bắt buộc phải dùng song song. Trong thực tế, mainEntityOfPage được dùng phổ biến hơn vì dễ triển khai và ít gây xung đột.