KDIGI CMS
SEO

Schema markup và JSON-LD là gì: hướng dẫn cho người mới

Đăng 11 phút đọc

Schema markup là đoạn dữ liệu có cấu trúc, dùng bộ từ vựng của schema.org, cho công cụ tìm kiếm biết chính xác một trang nói về cái gì (bài viết, sản phẩm, doanh nghiệp, câu hỏi…). JSON-LD là định dạng để viết schema markup dưới dạng một khối <script type="application/ld+json"> tách khỏi HTML hiển thị, và là định dạng Google khuyên dùng.

Tóm tắt nhanh

  • Schema.org là bộ từ vựng chung (loại thực thể và thuộc tính); JSON-LD, Microdata, RDFa là các cách viết bộ từ vựng đó vào trang.
  • JSON-LD là cú pháp dựa trên JSON, nằm trong một thẻ <script>, không đụng đến HTML hiển thị nên dễ bảo trì nhất.
  • Schema giúp máy hiểu trang và có thể đủ điều kiện hiển thị rich result, nhưng không phải yếu tố xếp hạng trực tiếp và không bảo đảm rich result.
  • Markup phải khớp nội dung nhìn thấy trên trang; markup sai hoặc gian dối có thể bị Google xử lý theo chính sách.
  • Kiểm tra bằng Rich Results Test và Schema Markup Validator trước khi đưa lên production.
  • KDIGI CMS sinh sẵn một đồ thị JSON-LD (@graph) cho từng bài viết, trang, sản phẩm khi lưu, và trả về trong seo.jsonLd.raw.

Schema markup là gì

Một trang web viết cho người đọc, còn máy phải đoán: dãy số 450.000 là giá hay số điện thoại, "Lê Văn A" là tác giả hay nhân vật trong bài? Dữ liệu có cấu trúc (structured data) nói thẳng với máy: đây là Product, giá là 450000 VND; đây là BlogPosting, tác giả là Person tên "Lê Văn A".

Schema.org là dự án chung của Google, Microsoft, Yahoo và Yandex, khởi động năm 2011, định nghĩa danh mục các loại thực thể (Article, Product, Organization, FAQPage, BreadcrumbList…) và thuộc tính của chúng. "Schema markup" là việc áp bộ từ vựng này vào trang của bạn.

JSON-LD, Microdata và RDFa khác nhau thế nào

Cả ba đều biểu diễn cùng một bộ từ vựng schema.org, khác ở cách viết:

JSON-LD Microdata RDFa
Vị trí Khối <script type="application/ld+json"> riêng Thuộc tính itemscope, itemprop gắn vào thẻ HTML Thuộc tính typeof, property gắn vào thẻ HTML
Đụng vào HTML hiển thị Không Có Có
Dễ bảo trì, sinh tự động từ CMS Rất dễ Khó Khó
Lời khuyên của Google Khuyên dùng Hỗ trợ Hỗ trợ

JSON-LD ("JSON for Linking Data") là một khuyến nghị (Recommendation) của W3C. Vì nằm tách biệt, bạn có thể sinh nó từ dữ liệu trong CMS mà không phải sửa template HTML, điều này đặc biệt hợp với website headless.

Ví dụ JSON-LD đầu tiên

Đây là một bài viết tối giản:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "Schema markup và JSON-LD là gì",
  "datePublished": "2026-11-02",
  "dateModified": "2026-11-03",
  "author": { "@type": "Person", "name": "Đội ngũ KDIGI" },
  "publisher": { "@type": "Organization", "name": "KDIGI" },
  "mainEntityOfPage": "https://opencms.kdigi.vn/blog/schema-markup-json-ld-la-gi"
}
</script>

Đọc từng phần:

  • @context cho biết từ vựng đang dùng là schema.org.
  • @type là loại thực thể.
  • Các khoá còn lại là thuộc tính; giá trị có thể là chuỗi, số hoặc một thực thể lồng (như author).

Các loại schema thường dùng cho website

Loại Dùng cho Ghi chú
Organization / LocalBusiness Thông tin doanh nghiệp: tên, logo, địa chỉ, giờ mở cửa, sameAs Nên có ở mọi site, khai một lần
WebSite Website nói chung, SearchAction nếu có tìm kiếm nội bộ Một lần cho cả site
WebPage / AboutPage / ContactPage Từng trang Gắn với BreadcrumbList
BreadcrumbList Đường dẫn phân cấp Phản ánh điều hướng thật
Article / BlogPosting Bài viết Kèm tác giả, ngày đăng, ngày sửa, ảnh
Person Tác giả Trang tác giả đầy đủ giúp tăng E-E-A-T
Product + Offer Sản phẩm, giá Giá phải có thật, khớp trang
FAQPage Câu hỏi thường gặp Xem lưu ý bên dưới
SoftwareApplication Phần mềm Giá, hệ điều hành, phiên bản

Lưu ý về FAQPage

Theo trang cập nhật tài liệu của Google Search Central, Google đã ngừng hiển thị FAQ rich result và gỡ tài liệu riêng của tính năng này (thông báo ngừng vào tháng 5/2026, gỡ tài liệu tháng 6/2026). Điều đó không có nghĩa bạn phải bỏ phần FAQ trên trang: câu hỏi thường gặp vẫn hữu ích cho người đọc, và markup FAQPage vẫn là cách hợp lệ để mô tả nội dung đó cho các hệ thống khác. Chỉ đừng kỳ vọng nó mang lại hiển thị đặc biệt trên Google.

Schema có giúp tăng thứ hạng không

Không trực tiếp. Google nói rõ trong hướng dẫn về AI Overviews và AI Mode rằng không có schema.org đặc biệt nào bạn cần thêm để xuất hiện trong các tính năng AI, và "overfocusing on structured data" nằm trong danh sách những thứ không cần quá tập trung. Giá trị thực của schema là:

  • Giúp máy hiểu đúng thực thể và quan hệ giữa chúng (tác giả, tổ chức, trang).
  • Giúp trang đủ điều kiện cho một số rich result còn được hỗ trợ (ví dụ breadcrumb, sản phẩm, đánh giá), nhưng điều kiện đủ không đồng nghĩa với việc được hiển thị.
  • Là một phần của bộ SEO kỹ thuật chuẩn, dễ kiểm tra và dễ tự động hoá.

Quy tắc bất biến: markup phải khớp nội dung nhìn thấy. Đừng đánh dấu đánh giá, giá hay FAQ không có trên trang. Xem thêm hướng dẫn chung của Google về dữ liệu có cấu trúc.

Cách thêm schema markup vào website

Với WordPress

Dùng plugin SEO như Yoast SEO hoặc Rank Math: cả hai tự sinh một đồ thị JSON-LD cho bài viết, trang và tổ chức. Bạn chỉ cần khai báo thông tin site (tên, logo, mạng xã hội) trong phần cài đặt.

Với website headless

CMS lưu nội dung, frontend của bạn chịu trách nhiệm xuất <script type="application/ld+json"> vào HTML. Có hai cách:

  1. Tự sinh ở frontend từ dữ liệu bài viết (tiêu đề, tác giả, ngày…). Linh hoạt nhưng bạn phải tự bảo trì và kiểm thử.
  2. Dùng JSON-LD do CMS sinh sẵn và chèn nguyên văn. Cách này nhất quán giữa nhiều frontend và nhiều site.

Với KDIGI CMS

KDIGI CMS chọn cách thứ hai. Khi bạn lưu pages, posts, products, landings hoặc taxonomies, một hook dựng một @graph schema.org với các @id ổn định ({siteUrl}/#organization, {siteUrl}/#website, {pageUrl}#webpage, {pageUrl}#breadcrumb) rồi lưu vào seo.jsonLd.raw. Giá trị này là nguyên phần tử <script type="application/ld+json">…</script>, frontend chèn nguyên văn; mọi ký tự < trong payload được escape thành \u003c nên tiêu đề chứa </script> không thể phá HTML.

Loại tài liệu Các node trong graph
Bài viết (posts) BlogPosting, Person (tác giả), WebPage, ImageObject, BreadcrumbList, WebSite, Organization, Place; FAQ của bài lồng trong BlogPosting
Trang (pages) WebPage (hoặc ContactPage/AboutPage theo slug như lien-he, gioi-thieu), ImageObject, BreadcrumbList, FAQPage, node site, LocalBusiness theo từng văn phòng khai báo
Sản phẩm (products) Product (kèm Offer, AggregateRating khi đủ điều kiện), ItemPage, ImageObject, BreadcrumbList, FAQPage
Chuyên mục (taxonomies) CollectionPage, ImageObject, BreadcrumbList

Một số quy tắc cụ thể của CMS, đều chống markup gian dối:

  • offers chỉ xuất khi prices[0].currentPrice > 0; thiếu giá hoặc giá 0 thì không phát offer.
  • aggregateRating chỉ xuất khi điểm chưa tuyệt đối (avg < 5) và đủ số đánh giá cùng ít nhất một bình luận đã duyệt (hoặc bật aggregateRatingOverride). Điểm sao nhập từ WordPress đơn thuần không tạo ra aggregateRating.
  • Mục FAQ thiếu câu hỏi hoặc câu trả lời bị loại; không còn mục nào thì node FAQPage bị bỏ.

Thông tin tổ chức (Organization) đến từ nhóm knowledgeGraph của site: tên, tên pháp lý, mô tả, logo, địa chỉ, giờ mở cửa, sameAs (mạng xã hội, Wikidata, Wikipedia). Xem chi tiết ở trang SEO và JSON-LD và Headless API.

Khi chuyển từ WordPress, JSON-LD không được import mà được sinh lại từ dữ liệu tài liệu và knowledge graph của site; xem chuyển từ WordPress và bài chuyển WordPress sang headless không mất SEO.

Cách kiểm tra schema markup

  1. Rich Results Test của Google: dán URL hoặc mã, xem trang đủ điều kiện rich result nào và có lỗi/cảnh báo nào.
  2. Schema Markup Validator (validator.schema.org): kiểm tra cú pháp theo schema.org, không chỉ theo các loại Google hỗ trợ.
  3. Search Console: các báo cáo Enhancements cho thấy lỗi trên toàn site sau khi Google crawl.
  4. Kiểm tay: curl trang và tìm application/ld+json để chắc chắn markup có trong HTML phản hồi ban đầu, không phụ thuộc JavaScript.
curl -s https://example.com/bai-viet/ | grep -o '<script type="application/ld+json">' | wc -l

Số trả về lớn hơn 0 nghĩa là markup có trong HTML gốc.

Lỗi thường gặp

Lỗi Vì sao nguy hiểm Cách sửa
Markup không khớp nội dung nhìn thấy Vi phạm chính sách dữ liệu có cấu trúc Chỉ đánh dấu những gì có trên trang
Đánh dấu đánh giá, giá "ảo" Có thể bị xử lý thủ công Chỉ phát Offer, AggregateRating khi dữ liệu thật
Trùng lặp từ plugin + theme Hai đồ thị mâu thuẫn Giữ một nguồn duy nhất
JSON không hợp lệ (dấu phẩy thừa, ngoặc) Cả khối bị bỏ qua Dùng validator trước khi deploy
Dùng https:// sai domain/canonical Thực thể trỏ về URL sai Dùng URL tuyệt đối đúng canonical
Chèn schema bằng JavaScript client Có thể bị bỏ sót khi render lỗi Xuất trong HTML server-render
Quên cập nhật dateModified Mất tín hiệu độ mới Lấy từ ngày sửa thật của nội dung

Quy trình triển khai gọn cho một website mới

  1. Khai báo Organization và WebSite một lần ở cấp site (logo, tên, mạng xã hội).
  2. Bật BreadcrumbList cho mọi trang không phải trang chủ.
  3. Thêm BlogPosting + Person cho bài viết, WebPage cho trang tĩnh.
  4. Chỉ thêm Product/Offer/FAQPage khi nội dung thật sự có trên trang.
  5. Kiểm tra bằng Rich Results Test và Schema Markup Validator.
  6. Theo dõi báo cáo Enhancements trong Search Console sau khi đưa lên production.

Với website dùng KDIGI CMS, bước 1–4 do CMS sinh sẵn từ dữ liệu bạn đã nhập; bạn chỉ cần chèn seo.jsonLd.raw vào <head> và kiểm tra. Để đạt kết quả nhất quán cho cả tìm kiếm truyền thống lẫn AI, xem thêm bài llms.txt là gì và cách tối ưu website cho AI.

Câu hỏi thường gặp

Schema markup là gì, nói đơn giản?

Schema markup là phần dữ liệu ẩn trong trang, viết theo từ vựng schema.org, giúp công cụ tìm kiếm biết chính xác trang là bài viết, sản phẩm hay doanh nghiệp, tác giả là ai, giá bao nhiêu. Người đọc không nhìn thấy nó; máy đọc nó để hiểu nội dung chính xác hơn và có thể tạo rich result khi đủ điều kiện.

JSON-LD khác schema.org ở điểm nào?

Schema.org là bộ từ vựng, tức danh sách loại thực thể và thuộc tính. JSON-LD là cú pháp để viết các thuộc tính đó thành một khối JSON trong thẻ script. Có thể hiểu schema.org là ngôn ngữ, JSON-LD là cách viết ra giấy. Microdata và RDFa là hai cách viết khác cho cùng bộ từ vựng, nhưng Google khuyên dùng JSON-LD.

Schema markup có giúp tăng thứ hạng không?

Không trực tiếp. Schema giúp máy hiểu trang và có thể đủ điều kiện cho rich result, nhưng Google nói rõ không có schema đặc biệt nào bắt buộc để xuất hiện trong AI Overviews hay AI Mode. Nó là một phần của SEO kỹ thuật chuẩn; nội dung hữu ích và trang có thể lập chỉ mục vẫn quan trọng hơn.

Có cần schema markup nếu dùng WordPress hay headless CMS không?

Nên có, vì chi phí thấp nếu được sinh tự động. WordPress dùng plugin như Yoast hay Rank Math. Với headless, bạn tự xuất JSON-LD ở frontend hoặc dùng bản CMS sinh sẵn. KDIGI CMS lưu sẵn đồ thị JSON-LD trong seo.jsonLd.raw mỗi lần lưu bài, frontend chỉ cần chèn nguyên văn vào trang.

FAQ schema còn tác dụng không?

Google đã ngừng hiển thị FAQ rich result và gỡ tài liệu của tính năng này năm 2026, nên đừng kỳ vọng nó đổi giao diện kết quả tìm kiếm. Phần FAQ trên trang vẫn có giá trị cho người đọc, và markup FAQPage vẫn hợp lệ nếu khớp nội dung hiển thị. Hãy làm FAQ vì người đọc, không phải vì rich result.

Kiểm tra schema markup bằng công cụ nào?

Dùng Rich Results Test của Google để xem trang đủ điều kiện rich result nào, và Schema Markup Validator (validator.schema.org) để kiểm cú pháp theo schema.org. Sau khi lên production, theo dõi báo cáo Enhancements trong Search Console. Nhớ kiểm tra thêm bằng curl rằng khối application/ld+json có trong HTML gốc.

Nguồn

Bài viết liên quan

Chính sách biên tập: bài viết do đội ngũ KDIGI biên soạn, thông tin sản phẩm đối chiếu với mã nguồn và tài liệu chính thức, thông tin về sản phẩm khác kèm nguồn dẫn. Xem thêm giới thiệu KDIGI.