PriceSpecification Schema
Schema chi tiết về giá: giá trị, đơn vị tiền tệ, loại giá (sale, list, wholesale), thời hạn hiệu lực.
PriceSpecification Schema là gì?
PriceSpecification Schema là một loại schema markup thuộc nhóm Product và Offer trong chuẩn Schema.org, dùng để mô tả chi tiết thông tin về giá của sản phẩm hoặc dịch vụ. Nó không phải là schema độc lập — mà thường được lồng bên trong Offer hoặc Product — nhằm khai báo rõ ràng: giá trị số tiền, đơn vị tiền tệ, loại giá (giá niêm yết, giá khuyến mãi, giá sỉ…), thời điểm bắt đầu và kết thúc hiệu lực, cũng như điều kiện áp dụng (nếu có).
Khác với thuộc tính đơn giản như price hay priceCurrency, PriceSpecification cho phép biểu diễn nhiều lớp thông tin giá cùng lúc — ví dụ: giá gốc (listPrice), giá giảm (salePrice), giá dành riêng cho doanh nghiệp (wholesalePrice) — giúp công cụ tìm kiếm hiểu sâu hơn về cấu trúc định giá.
Tại sao quan trọng trong SEO?
Khi Google hoặc Bing đọc được PriceSpecification đúng chuẩn, chúng có thể hiển thị thêm thông tin giá chi tiết trong kết quả tìm kiếm — như giá cũ/giá mới, thời hạn khuyến mãi, hoặc nhãn "Giá sỉ" — làm tăng độ tin cậy và tỷ lệ nhấp (CTR). Dữ liệu có cấu trúc còn hỗ trợ tính năng Rich Results như Product Carousel hoặc Shopping Actions trên thiết bị di động.
Quan trọng hơn: với sự phát triển của AI Overviews và tìm kiếm bằng giọng nói, việc cung cấp dữ liệu giá rõ ràng, phân cấp và có ngữ nghĩa giúp hệ thống hiểu chính xác “đây là giá nào, áp dụng khi nào, cho ai” — từ đó trả lời người dùng chính xác hơn. Một số báo cáo từ Search Console cho thấy trang có schema giá đầy đủ có tỷ lệ xuất hiện trong Rich Results cao hơn 3–5 lần so với trang chỉ dùng price cơ bản — tuy nhiên con số này tùy trường hợp.
Cách hoạt động
PriceSpecification hoạt động như một “bản ghi chi tiết giá”, được gắn vào một đối tượng cụ thể (thường là Offer). Khi crawler đọc mã JSON-LD hoặc Microdata, nó nhận diện các thuộc tính như price, priceCurrency, priceValidUntil… rồi liên kết chúng thành một khối thông tin có ngữ nghĩa — thay vì xem từng giá trị rời rạc.
Google không yêu cầu bắt buộc phải dùng PriceSpecification, nhưng nếu bạn cần biểu diễn nhiều loại giá hoặc muốn kiểm soát chính xác thời hạn hiệu lực, đây là cách chuẩn nhất. Hệ thống sẽ ưu tiên giá trong Offer.price làm giá chính, còn PriceSpecification đóng vai trò bổ sung — giải thích bối cảnh đằng sau con số.
Hướng dẫn thực hiện
Dưới đây là các bước triển khai PriceSpecification an toàn và hiệu quả:
- Xác định loại giá cần khai báo: Chỉ dùng khi cần mô tả giá phụ — ví dụ: giá niêm yết, giá khuyến mãi, giá sỉ, giá theo vùng hoặc giá theo gói dịch vụ.
- Chọn định dạng markup: Ưu tiên JSON-LD (dễ kiểm soát, ít lỗi hơn Microdata/RDFa).
- Đặt đúng vị trí: Lồng
PriceSpecificationbên trong phầnofferscủaProduct, hoặc trực tiếp trongOffer. - Đảm bảo tính nhất quán: Giá trong
PriceSpecificationphải khớp với giá hiển thị trên trang — không được mâu thuẫn (ví dụ: giá khuyến mãi trong schema cao hơn giá gốc trên giao diện). - Kiểm tra bằng công cụ: Dùng Rich Results Test hoặc Schema Markup Validator trước khi triển khai.
Lỗi thường gặp
- Thiếu thuộc tính bắt buộc:
pricevàpriceCurrencylà bắt buộc trongPriceSpecification. Nếu thiếu, schema sẽ bị bỏ qua hoàn toàn. - Ngày hết hạn sai định dạng:
priceValidUntilphải ở định dạng ISO 8601 (ví dụ:"2025-12-31"hoặc"2025-12-31T23:59:59+07:00"). Dùng ngày tháng kiểu Việt Nam (31/12/2025) gây lỗi. - Gắn sai loại giá: Dùng
salePricecho giá niêm yết, hoặc ngược lại — khiến Google hiểu sai bối cảnh khuyến mãi. - Không đồng bộ giữa schema và nội dung: Trang hiển thị giá 599.000 ₫ nhưng schema ghi 599000 — thiếu dấu chấm phẩy hoặc đơn vị — dẫn đến sai giá trị.
Cách khắc phục: Luôn kiểm tra schema bằng validator; dùng hàm format số trong code backend (ví dụ: number_format(599000, 0, '', '')); lưu ngày giờ theo múi giờ UTC hoặc rõ ràng múi giờ địa phương.
Ví dụ thực tế
Dưới đây là đoạn JSON-LD minh họa cách khai báo PriceSpecification cho sản phẩm có cả giá niêm yết và giá khuyến mãi:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Tai nghe Bluetooth XYZ",
"offers": {
"@type": "Offer",
"price": "1299000",
"priceCurrency": "VND",
"priceValidUntil": "2025-12-31",
"priceSpecification": {
"@type": "PriceSpecification",
"price": "1299000",
"priceCurrency": "VND",
"priceType": "salePrice",
"priceValidFrom": "2024-10-01",
"priceValidUntil": "2024-12-31",
"eligibleQuantity": {
"@type": "QuantitativeValue",
"value": "1"
}
},
"eligibleQuantity": {
"@type": "QuantitativeValue",
"value": "1"
}
}
}
Bảng dưới đây so sánh các thuộc tính phổ biến trong PriceSpecification:
| Thuộc tính | Bắt buộc? | Mô tả | Ví dụ |
|---|---|---|---|
price |
Có | Giá trị số (không có ký tự định dạng) | "899000" |
priceCurrency |
Có | Mã tiền tệ theo tiêu chuẩn ISO 4217 | "VND", "USD" |
priceType |
Không | Loại giá: listPrice, salePrice, wholesalePrice, msrp… |
"salePrice" |
priceValidFrom |
Không | Ngày bắt đầu hiệu lực (ISO 8601) | "2024-10-01" |
priceValidUntil |
Không | Ngày kết thúc hiệu lực (ISO 8601) | "2024-12-31" |
Câu hỏi thường gặp
PriceSpecification có thay thế được Offer.price không?
Không. PriceSpecification không thay thế Offer.price — mà bổ sung cho nó. Giá chính vẫn phải khai báo trong Offer.price; PriceSpecification chỉ dùng để mô tả chi tiết bối cảnh giá đó (ví dụ: đây là giá sale, áp dụng từ ngày… đến ngày…).
Có thể dùng nhiều PriceSpecification trong một Offer không?
Có thể, nhưng không được khuyến khích. Schema.org cho phép, nhưng Google hiện chỉ xử lý một PriceSpecification mỗi Offer. Nếu cần mô tả nhiều mức giá (giá sỉ theo số lượng), nên dùng thuộc tính eligibleQuantity hoặc tạo nhiều Offer riêng biệt.
PriceSpecification hỗ trợ giá theo khu vực hoặc người dùng không?
Không trực tiếp. PriceSpecification không có thuộc tính địa lý hay phân khúc người dùng. Để xử lý giá theo khu vực, cần kết hợp với availableAtOrFrom hoặc dùng schema riêng cho từng phiên bản trang (geo-targeted pages). Việc cá nhân hóa giá theo tài khoản người dùng không được hỗ trợ bởi schema — vì dữ liệu cấu trúc phải công khai và ổn định.