Schema & Structured Data

Course Schema

Schema mô tả khóa học giáo dục với courseCode, educationalLevel, hasCourseInstance và provider.

4 lượt xem Cập nhật: 01/06/2026

Course Schema là gì?

Course Schema là một loại markup cấu trúc (structured data) thuộc chuẩn Schema.org, dùng để mô tả chi tiết về một khóa học giáo dục trên trang web. Nó giúp công cụ tìm kiếm như Google hiểu rõ nội dung khóa học — từ mã khóa học, trình độ đào tạo, thời gian khai giảng đến đơn vị cung cấp và các phiên bản thực tế của khóa học (course instance). Đây không phải là thẻ HTML hiển thị cho người dùng, mà là dữ liệu ẩn được nhúng vào mã nguồn trang (thường dưới dạng JSON-LD), nhằm hỗ trợ máy tìm kiếm phân tích và hiển thị thông tin chính xác hơn trong kết quả tìm kiếm.

Tại sao quan trọng trong SEO?

Course Schema quan trọng vì nó giúp trang khóa học có cơ hội xuất hiện trong các định dạng tìm kiếm nâng cao — đặc biệt là Rich Result dành riêng cho giáo dục. Khi được triển khai đúng, Google có thể hiển thị thông tin khóa học dưới dạng khối dữ liệu mở rộng: bao gồm mã khóa học, trình độ (ví dụ: Trung cấp, Đại học, Sau đại học), đơn vị cung cấp, ngày bắt đầu, hình thức đào tạo và thậm chí đánh giá (nếu tích hợp thêm AggregateRating). Điều này làm tăng tỷ lệ nhấp (CTR), cải thiện độ tin cậy và hỗ trợ người tìm kiếm đưa ra quyết định nhanh hơn.

Google không sử dụng structured data làm yếu tố xếp hạng trực tiếp, nhưng việc hiển thị Rich Result giúp trang nổi bật hơn trong SERP — điều dẫn đến lưu lượng truy cập chất lượng cao hơn. Ngoài ra, Course Schema còn hỗ trợ tích hợp với các nền tảng giáo dục lớn như Google Course Search (đã ngừng hoạt động từ tháng 12/2023), tuy nhiên dữ liệu vẫn hữu ích cho các hệ thống tìm kiếm học thuật và đối tác giáo dục khác.

Cách hoạt động

Course Schema hoạt động bằng cách gắn nhãn rõ ràng cho các thành phần thông tin khóa học theo chuẩn Schema.org. Khi Google thu thập (crawl) trang, bot sẽ đọc đoạn mã JSON-LD hoặc Microdata chứa các thuộc tính như @type: "Course", courseCode, educationalLevel, hasCourseInstanceprovider. Các thuộc tính này được ánh xạ vào mô hình kiến thức của Google, từ đó xây dựng biểu diễn ngữ nghĩa cho khóa học — giúp phân biệt giữa một bài viết về khóa học và một trang đăng ký thực tế.

Quá trình này không yêu cầu thay đổi nội dung hiển thị, nhưng đòi hỏi tính nhất quán giữa dữ liệu cấu trúc và nội dung trên trang. Nếu dữ liệu schema mâu thuẫn với văn bản hiển thị (ví dụ: schema ghi courseCode: "CNTT101" nhưng trang hiển thị là "IT101"), Google có thể bỏ qua toàn bộ markup hoặc cảnh báo lỗi trong Search Console.

Hướng dẫn thực hiện

  1. Xác định trang đích phù hợp: Chỉ triển khai Course Schema trên trang giới thiệu chi tiết một khóa học cụ thể (không áp dụng cho trang danh mục tổng quan hay trang chủ).
  2. Chuẩn bị dữ liệu cần thiết: Thu thập đầy đủ các thuộc tính bắt buộc và khuyến nghị: name, description, courseCode, educationalLevel, provider, và ít nhất một hasCourseInstance.
  3. Chọn định dạng: Dùng JSON-LD (khuyến nghị) vì dễ triển khai, ít xung đột với HTML và được Google ưu tiên.
  4. Viết markup: Đảm bảo đúng cú pháp JSON, sử dụng giá trị hợp lệ cho từng thuộc tính (xem bảng dưới).
  5. Kiểm tra và triển khai: Dùng Google Search ConsoleRich Results Test để xác minh. Sau khi kiểm tra thành công, đưa đoạn mã vào thẻ <head> hoặc cuối <body> của trang.

Lỗi thường gặp

  • Thiếu thuộc tính bắt buộc: namedescription là bắt buộc theo tiêu chuẩn Schema.org. Nếu thiếu, markup sẽ không hợp lệ.
  • Giá trị educationalLevel không đúng định dạng: Giá trị phải là chuỗi văn bản mô tả trình độ (ví dụ: "Đại học", "Sau đại học", "Trung cấp") hoặc URI từ EducationalOccupationalCredential. Không được dùng số (như "4") hay mã rút gọn không rõ nghĩa (như "UG").
  • hasCourseInstance để trống hoặc thiếu thông tin thiết yếu: Mỗi instance phải có startDate hoặc endDate, và nên có location hoặc offers. Nếu chỉ khai báo "@type": "CourseInstance" mà không đi kèm dữ kiện, Google sẽ bỏ qua.
  • Mâu thuẫn nội dung – schema: Ví dụ: trang ghi "Khai giảng ngày 15/09/2024", nhưng schema lại ghi "startDate": "2024-08-15". Lỗi này khiến Google giảm độ tin cậy dữ liệu.

Ví dụ thực tế

Dưới đây là đoạn JSON-LD mẫu cho khóa học "Lập trình Python cơ bản" do Trường Đào tạo Công nghệ ABC cung cấp:

{
  "@context": "https://schema.org",
  "@type": "Course",
  "name": "Lập trình Python cơ bản",
  "description": "Khóa học giúp người mới bắt đầu nắm vững cú pháp Python, xử lý dữ liệu và xây dựng ứng dụng nhỏ.",
  "courseCode": "PYTH101",
  "educationalLevel": "Người mới bắt đầu",
  "provider": {
    "@type": "Organization",
    "name": "Trường Đào tạo Công nghệ ABC",
    "sameAs": "https://abc.edu.vn"
  },
  "hasCourseInstance": [
    {
      "@type": "CourseInstance",
      "startDate": "2024-10-01",
      "endDate": "2024-12-15",
      "location": {
        "@type": "Place",
        "name": "Cơ sở Quận 3"
      },
      "offers": {
        "@type": "Offer",
        "price": "3990000",
        "priceCurrency": "VND"
      }
    }
  ]
}

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

Course Schema có hỗ trợ đa ngôn ngữ không?

Có. Bạn có thể dùng thuộc tính inLanguage (giá trị dạng chuỗi như "vi" hoặc "vi-VN") để khai báo ngôn ngữ nội dung khóa học. Tuy nhiên, Google hiện chưa sử dụng thuộc tính này để phân biệt phiên bản ngôn ngữ trong Rich Result — việc hỗ trợ đa ngôn ngữ chủ yếu phụ thuộc vào hreflang và cấu trúc URL.

Có bắt buộc phải có hasCourseInstance không?

Theo tiêu chuẩn Schema.org, hasCourseInstance là thuộc tính tùy chọn. Tuy nhiên, nếu bạn muốn khóa học có khả năng xuất hiện trong Rich Result giáo dục, Google yêu cầu ít nhất một instance với startDate hoặc endDate. Vì vậy, về mặt thực tiễn — nên luôn bao gồm.

Có thể triển khai Course Schema cho khóa học online không?

Có thể. Với khóa học online, bạn thay location bằng video, learningResourceType hoặc mô tả hình thức (ví dụ: "Học trực tuyến qua nền tảng LMS"). Một số trường hợp dùng "location": {"@type": "VirtualLocation"} cũng được chấp nhận, nhưng cần đảm bảo giá trị hợp lệ theo Schema.org/VirtualLocation.

Thuộc tính Bắt buộc? Ghi chú
name ✓ Bắt buộc Phải khớp chính xác với tiêu đề hiển thị trên trang
description ✓ Bắt buộc Độ dài khuyến nghị: 50–300 ký tự, không trùng lặp với meta description
courseCode ✓ Khuyến nghị mạnh Không bắt buộc theo Schema.org, nhưng cần cho Rich Result
educationalLevel ✓ Khuyến nghị mạnh Giá trị văn bản rõ ràng, không viết tắt trừ khi phổ biến (ví dụ: "ĐH")
provider ✓ Khuyến nghị mạnh Nên là Organization với sameAs trỏ đến trang web chính thức
hasCourseInstance ✗ Tùy trường hợp Yêu cầu nếu muốn xuất hiện trong Rich Result giáo dục