Schema & Structured Data

JobPosting Schema

Schema mô tả tin tuyển dụng với hiringOrganization, jobLocation, salary, datePosted và employmentType.

3 lượt xem Cập nhật: 27/05/2026

JobPosting Schema là gì?

JobPosting 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 một tin tuyển dụng trên trang web. Nó giúp công cụ tìm kiếm — đặc biệt là Google — hiểu rõ nội dung tin đăng: ai đang tuyển (hiringOrganization), vị trí làm việc (jobLocation), mức lương (baseSalary hoặc salary), ngày đăng (datePosted), hình thức làm việc (employmentType: toàn thời gian, bán thời gian, thực tập…), và nhiều thuộc tính khác như yêu cầu kinh nghiệm, kỹ năng, mô tả công việc.

Schema này không hiển thị trực tiếp cho người dùng, mà được nhúng vào mã nguồn HTML (thường dưới dạng JSON-LD) để máy móc đọc và xử lý. Đây là cách chính xác nhất để khai báo dữ liệu tuyển dụng theo tiêu chuẩn quốc tế.

Tại sao quan trọng trong SEO?

JobPosting Schema hỗ trợ SEO theo hai hướng chính: cải thiện khả năng xuất hiện trong kết quả tìm kiếm chuyên biệt và tăng độ tin cậy với công cụ tìm kiếm.

  • Tăng khả năng hiển thị trong Google for Jobs: Khi có markup đúng, tin tuyển dụng có thể xuất hiện trong thanh tìm kiếm việc làm của Google (Google Jobs), với thẻ rich result riêng: logo công ty, vị trí, địa điểm, mức lương, ngày đăng — tất cả đều hiển thị nổi bật ngay trên trang kết quả tìm kiếm (SERP).
  • Nâng cao độ chính xác lập chỉ mục: Google dễ dàng phân biệt giữa nội dung tin tuyển dụng và các phần khác trên trang (ví dụ: menu, footer, bài viết blog), từ đó giảm sai sót khi lập chỉ mục.
  • Hỗ trợ trải nghiệm người dùng gián tiếp: Người tìm việc thấy thông tin đầy đủ, rõ ràng ngay từ SERP → tăng tỷ lệ click (CTR) và giảm tỷ lệ thoát nếu trang đích khớp đúng kỳ vọng.

Lưu ý: Việc sử dụng JobPosting Schema không đảm bảo tin đăng sẽ xuất hiện trong Google Jobs — điều kiện còn phụ thuộc vào chất lượng trang, độ uy tín miền, tính hợp lệ của dữ liệu và chính sách cập nhật của Google.

Cách hoạt động

JobPosting Schema hoạt động bằng cách gắn nhãn (tag) từng thành phần thông tin tuyển dụng với thuộc tính chuẩn Schema.org. Công cụ tìm kiếm quét mã JSON-LD (hoặc Microdata/RDFa), nhận diện lớp JobPosting, sau đó trích xuất và kiểm tra tính hợp lệ của các thuộc tính bắt buộc và khuyến nghị.

Google ưu tiên các tin đăng có đầy đủ thuộc tính bắt buộc (hiringOrganization, jobLocation, datePosted, title) và ít nhất một trong các thuộc tính về mức lương hoặc hình thức làm việc. Dữ liệu thiếu hoặc mâu thuẫn (ví dụ: địa chỉ không tồn tại, ngày đăng lớn hơn ngày hiện tại) có thể khiến markup bị bỏ qua.

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

  1. Xác định trang áp dụng: Chỉ áp dụng trên trang chi tiết tin tuyển dụng (không áp dụng trên trang danh sách hoặc trang chủ).
  2. Chuẩn bị dữ liệu: Đảm bảo các trường sau luôn có giá trị hợp lệ:
    • title: tên vị trí (bắt buộc)
    • hiringOrganization: tổ chức tuyển dụng (bắt buộc; phải chứa @type: Organizationname)
    • jobLocation: địa điểm làm việc (bắt buộc; dạng Place hoặc PostalAddress)
    • datePosted: ngày đăng (định dạng ISO 8601, ví dụ: 2024-04-15; bắt buộc)
    • employmentType: loại hình lao động (khuyến nghị: FULL_TIME, PART_TIME, CONTRACTOR, INTERN…)
    • baseSalary hoặc salary: mức lương (khuyến nghị; cần khai báo đơn vị tiền tệ và khoảng giá trị rõ ràng)
  3. Viết markup JSON-LD: Nhúng đoạn mã vào thẻ <head> hoặc cuối <body>. Không đặt trong thẻ <script type="text/html"> hay comment.
  4. Kiểm tra bằng công cụ: Dùng Google Search Console > Báo cáo “Hiệu suất” > tab “Cấu trúc dữ liệu”, hoặc URL Inspection Tool. Cũng có thể kiểm tra nhanh bằng Schema Markup Validator của Schema.org.
  5. Theo dõi và cập nhật: Cập nhật datePosted khi đăng lại tin; thay đổi employmentType hoặc baseSalary nếu có điều chỉnh; xoá markup nếu tin đã hết hạn.

Lỗi thường gặp

Lỗi Nguyên nhân Cách khắc phục
Thiếu hiringOrganization.name Chỉ khai báo hiringOrganization nhưng không kèm name bên trong Đảm bảo hiringOrganization là đối tượng Organization có thuộc tính name (vd: {"@type": "Organization", "name": "Công ty ABC"})
jobLocation không hợp lệ Dùng chuỗi văn bản thay vì đối tượng Place hoặc PostalAddress Khai báo đầy đủ address với streetAddress, addressLocality, addressCountry hoặc dùng geo nếu có toạ độ
datePosted sai định dạng Ghi ngày dạng 15/04/2024 hoặc 15 tháng 4 năm 2024 Luôn dùng định dạng ISO 8601: YYYY-MM-DD (ví dụ: 2024-04-15)
Mức lương không rõ ràng Dùng cụm như “lương cạnh tranh”, “thỏa thuận” mà không có giá trị số hoặc khoảng Khuyến nghị ghi rõ: "minValue": 15000000, "maxValue": 25000000, "currency": "VND". Nếu không tiết lộ, để trống hoặc không khai báo baseSalary

Ví dụ thực tế

Dưới đây là đoạn markup JSON-LD mẫu cho tin tuyển dụng Nhân viên Marketing tại Hà Nội, áp dụng đúng chuẩn Schema.org và được Google chấp nhận:

{ "@context": "https://schema.org", "@type": "JobPosting", "title": "Nhân viên Marketing", "hiringOrganization": { "@type": "Organization", "name": "Công ty TNHH Giải Pháp Số", "sameAs": "https://congtyabc.vn", "logo": "https://congtyabc.vn/logo.png" }, "jobLocation": { "@type": "Place", "address": { "@type": "PostalAddress", "streetAddress": "Số 123 Đường Nguyễn Trãi", "addressLocality": "Quận Thanh Xuân", "addressRegion": "Hà Nội", "addressCountry": "VN" } }, "datePosted": "2024-04-15", "validThrough": "2024-06-30", "employmentType": "FULL_TIME", "baseSalary": { "@type": "MonetaryAmount", "currency": "VND", "value": { "@type": "QuantitativeValue", "minValue": 12000000, "maxValue": 18000000, "unitText": "MONTH" } }, "description": "

Phát triển chiến dịch digital marketing, quản lý fanpage, chạy quảng cáo Facebook & Google...

" }

Lưu ý: Thuộc tính validThrough không bắt buộc nhưng rất hữu ích để Google biết thời hạn hiệu lực của tin đăng — giúp loại khỏi kết quả khi quá hạn.

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

JobPosting Schema có ảnh hưởng đến thứ hạng website chung không?

Không trực tiếp. Schema không phải yếu tố xếp hạng (ranking factor), nhưng có thể cải thiện CTR và trải nghiệm người dùng — hai yếu tố gián tiếp hỗ trợ thứ hạng dài hạn. Hiệu ứng rõ nhất là tăng hiển thị trong Google Jobs, không phải trong kết quả tìm kiếm chung.

Có thể dùng JobPosting Schema cho nhiều tin trên một trang không?

Không khuyến nghị. Mỗi trang nên chỉ chứa một tin tuyển dụng và một markup JobPosting tương ứng. Nếu có nhiều tin, nên tách thành các trang riêng biệt — đây cũng là thực tiễn tốt cho SEO và UX.

Cần cập nhật markup khi thay đổi mức lương hay địa điểm không?

Có. Mọi thay đổi về thông tin bắt buộc (jobLocation, datePosted, hiringOrganization) hoặc thông tin ảnh hưởng đến trải nghiệm người dùng (baseSalary, employmentType) đều phải cập nhật trong markup. Nếu không, dữ liệu trở nên lỗi thời và có thể bị Google loại khỏi Google Jobs.