SEO E-Commerce

Schema.org Offer Type

Loại schema markup mô tả chi tiết thông tin giá, trạng thái hàng, thời hạn khuyến mãi và điều kiện vận chuyển cho sản phẩm.

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

Schema.org Offer Type là gì?

Schema.org Offer Type là một loại markup cấu trúc (schema markup) thuộc chuẩn schema.org, dùng để mô tả chi tiết thông tin về giá bán, trạng thái hàng tồn, thời hạn khuyến mãi, điều kiện vận chuyển và các điều khoản liên quan đến việc mua bán một sản phẩm hoặc dịch vụ. Đây là loại schema con của Product hoặc Service, thường được nhúng trong thẻ <script type=\"application/ld+json\"> trên trang sản phẩm hoặc danh mục.

Offer không phải là một schema độc lập — nó luôn gắn với một đối tượng cha như Product. Một sản phẩm có thể có nhiều Offer (ví dụ: cùng sản phẩm nhưng giá khác nhau theo khu vực, hoặc có phiên bản khuyến mãi riêng).

Tại sao quan trọng trong SEO?

Offer Type giúp công cụ tìm kiếm hiểu sâu hơn về tính chất thương mại của nội dung — đặc biệt trong bối cảnh Google ưu tiên hiển thị kết quả giàu thông tin (rich results) cho người dùng tìm kiếm sản phẩm. Khi triển khai đúng, Offer góp phần:

  • Tăng khả năng xuất hiện trong Rich Results như giá nổi bật, trạng thái hàng (In stock / Out of stock), nhãn giảm giá;
  • Cải thiện độ tin cậy của trang với Google nhờ dữ liệu có cấu trúc rõ ràng và nhất quán;
  • Hỗ trợ phân tích hành vi mua sắm qua Search Console (phân đoạn “Product” và “Offer” trong báo cáo Performance);
  • Giúp Google so sánh giá giữa các trang (price comparison), từ đó ảnh hưởng gián tiếp đến thứ hạng trong tìm kiếm sản phẩm.

Lưu ý: Offer Type không trực tiếp nâng thứ hạng, nhưng là yếu tố hỗ trợ mạnh cho trải nghiệm người dùng và tính toàn vẹn dữ liệu — hai yếu tố ngày càng được Google đánh giá cao trong thuật toán E-E-A-T và trải nghiệm tìm kiếm.

Cách hoạt động

Google và các công cụ tìm kiếm đọc dữ liệu schema dưới dạng JSON-LD, sau đó trích xuất các thuộc tính như price, priceCurrency, availability, priceValidUntil… để hiển thị trong kết quả tìm kiếm hoặc tích hợp vào hệ thống so sánh giá.

Quy trình gồm 3 bước chính:

  1. Trang web khai báo Offer kèm đầy đủ thuộc tính bắt buộc và tùy chọn;
  2. Google thu thập và xác thực dữ liệu qua công cụ Rich Results Test hoặc Search Console;
  3. Nếu đạt yêu cầu kỹ thuật và phù hợp ngữ cảnh tìm kiếm, Google hiển thị rich snippet (ví dụ: giá + trạng thái hàng bên cạnh tiêu đề kết quả).

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

Dưới đây là các bước triển khai Offer Type chuẩn cho website thương mại điện tử tại Việt Nam:

  1. Xác định đối tượng cha: Luôn gắn Offer vào một Product (không dùng độc lập). Ví dụ: {\"@type\": \"Product\", \"offers\": {\"@type\": \"Offer\", ...}};
  2. Khai báo thuộc tính bắt buộc:
    • price: số thực (dùng dấu chấm, không dùng dấu phẩy), ví dụ: \"1990000\";
    • priceCurrency: mã tiền tệ chuẩn ISO 4217, ví dụ: \"VND\";
    • availability: giá trị từ từ điển schema.org, ví dụ: \"https://schema.org/InStock\" hoặc \"https://schema.org/OutOfStock\".
  3. Thêm thuộc tính khuyến nghị:
    • priceValidUntil: ngày hết hạn khuyến mãi (định dạng ISO 8601: \"2025-12-31\");
    • url: link trực tiếp đến trang đặt hàng hoặc trang sản phẩm;
    • seller: nếu bán qua sàn hoặc đại lý, nên khai báo Organization;
    • shippingDetails: mô tả điều kiện vận chuyển (tùy trường hợp — không bắt buộc nhưng tăng độ chi tiết).
  4. Kiểm tra và triển khai: Dùng Rich Results Test hoặc URL Inspection Tool để xác minh. Triển khai qua HTML tĩnh, CMS (như WordPress + plugin Schema Pro), hoặc server-side render (SSR) — không dùng JavaScript động để inject schema.

Lỗi thường gặp

Dưới đây là những lỗi phổ biến khi triển khai Offer Type và cách khắc phục:

Lỗi Nguyên nhân Cách sửa
Thiếu priceCurrency Chỉ khai báo price mà không ghi đơn vị tiền tệ Luôn thêm \"priceCurrency\": \"VND\" — không dùng “VNĐ” hay “đ”
Giá sai định dạng Dùng dấu phẩy (1.990.000) hoặc ký tự không phải số Dùng số nguyên hoặc số thập phân chuẩn: 1990000 hoặc 1990000.00
Trạng thái hàng không hợp lệ Dùng giá trị như “Còn hàng”, “Hết hàng” thay vì URL schema Phải dùng URL đầy đủ: https://schema.org/InStock
Offer không gắn vào Product Khai báo Offer ở cấp gốc, không nằm trong offers của Product Đảm bảo cấu trúc: Product → offers → Offer
Giá không khớp thực tế Giá trong schema khác giá hiển thị trên trang (do cập nhật chậm) Tự động đồng bộ giá qua backend hoặc sử dụng biến động từ CMS

Ví dụ thực tế

Dưới đây là đoạn JSON-LD chuẩn cho sản phẩm iPhone 15 tại Việt Nam, có khuyến mãi đến hết 30/06/2025:

{ "@context": "https://schema.org", "@type": "Product", "name": "iPhone 15 128GB", "image": "https://example.com/iphone15.jpg", "description": "Smartphone cao cấp của Apple, camera cải tiến, pin bền", "offers": { "@type": "Offer", "url": "https://example.com/iphone15", "priceCurrency": "VND", "price": "22990000", "priceValidUntil": "2025-06-30", "availability": "https://schema.org/InStock", "seller": { "@type": "Organization", "name": "Cửa hàng Điện máy Xanh" } } }

Lưu ý: Giá phải trùng với giá hiển thị trên trang. Nếu trang có nhiều biến thể (màu, dung lượng), mỗi biến thể cần có Offer riêng — không gộp chung.

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

Offer Type có cần thiết với mọi website thương mại điện tử?

Có — đặc biệt nếu bạn muốn xuất hiện trong Rich Results, tối ưu trải nghiệm tìm kiếm sản phẩm và cạnh tranh trong môi trường mua sắm trực tuyến. Với website nhỏ, ít sản phẩm, hiệu quả có thể chậm hơn — nhưng vẫn là nền tảng dữ liệu cấu trúc bắt buộc để mở rộng sau này.

Một sản phẩm có thể có nhiều Offer không?

Có. Ví dụ: cùng một sản phẩm có thể có Offer cho thị trường Hà Nội (giá 22.990.000 ₫), Offer cho TP.HCM (giá 23.190.000 ₫), hoặc Offer riêng cho chương trình trả góp 0%. Mỗi Offer phải có price, priceCurrencyavailability riêng.

Offer Type có hỗ trợ đa ngôn ngữ hoặc đa tiền tệ?

Có — nhưng phải triển khai riêng cho từng phiên bản trang. Ví dụ: trang tiếng Anh dùng priceCurrency: USD, trang tiếng Việt dùng VND. Không gộp nhiều currency trong một Offer. Việc phát hiện ngôn ngữ/tiền tệ phụ thuộc vào thẻ hreflang và cấu trúc URL — không tự động từ schema.