Hãy thử tìm một sản phẩm trên Google. Kết quả từ các sàn lớn hiển thị sao đánh giá, giá, tình trạng còn hàng ngay trên trang tìm kiếm. Còn kết quả từ shop nhỏ chỉ là một dòng tiêu đề và đoạn mô tả khô khan. Bạn sẽ click vào cái nào?
Đó chính là lợi thế của Product Schema — và cũng là lý do phần lớn shop online Việt Nam đang bỏ lỡ một cơ hội lớn, vì họ nghĩ schema "kỹ thuật quá", không biết bắt đầu từ đâu, hoặc sợ làm sai.
Bài viết này giải mã toàn bộ Product Schema, kèm code mẫu sẵn dùng cho shop Việt. Bài dành cho: chủ shop online, developer triển khai schema, SEO specialist chuyên ecommerce, và marketing manager cần hiểu để giao việc.
Phần 1: Product Schema là gì?
Theo Google, khi bạn thêm structured data cho trang sản phẩm, thông tin sản phẩm có thể xuất hiện phong phú hơn trong kết quả tìm kiếm (kể cả Google Images và Google Lens) — người dùng có thể thấy giá, tình trạng hàng, đánh giá, thông tin vận chuyển và nhiều thứ khác ngay trong kết quả tìm kiếm.
Lợi ích cụ thể: rich snippet (tăng tỷ lệ nhấp), hiển thị giá (lọc đúng người có ý định mua), tình trạng còn hàng (tăng niềm tin), thông tin ship và chính sách đổi trả (giảm ma sát), số lượng đánh giá (social proof), xuất hiện trên Google Shopping và Google Lens — và ngày càng quan trọng: sản phẩm có cơ hội xuất hiện trong các câu trả lời AI.
Phần 2: Hai loại Product Schema — phân biệt quan trọng
Google phân biệt rõ hai lớp structured data cho sản phẩm. Hãy chọn loại phù hợp nhất với trường hợp của bạn.
Tiêu chí | Product Snippet | Merchant Listing |
|---|---|---|
Dành cho | Trang mà người dùng KHÔNG mua trực tiếp được (blog review, so sánh, affiliate) | Trang mà người dùng CÓ THỂ mua trực tiếp (trang sản phẩm ecommerce) |
Trọng tâm | Thông tin đánh giá | Thông tin sản phẩm chi tiết |
Pros/Cons ( | Có | Không |
Giá | Có | Có |
Tình trạng hàng ( | Không cần | Bắt buộc |
Thông tin vận chuyển | Không | Có |
Chính sách đổi trả | Không | Có |
Size quần áo | Không | Có |
Google lưu ý có sự chồng lấn giữa hai loại: nhìn chung, nếu bạn khai báo đầy đủ các thuộc tính bắt buộc cho merchant listing, trang sản phẩm của bạn cũng đủ điều kiện cho cả product snippet.
Khuyến nghị: shop ecommerce → dùng Merchant Listing (được hưởng cả hai). Blog review → dùng Product Snippet. Site lai → chọn theo từng trang.
Phần 3: Thuộc tính BẮT BUỘC
Tối thiểu để schema được chấp nhận:
json
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "Áo thun nam cotton trắng",
"image": "https://shop.com/ao-trang.jpg",
"offers": {
"@type": "Offer",
"price": "299000",
"priceCurrency": "VND",
"availability": "https://schema.org/InStock"
}
}Giá trị hợp lệ cho availability:
https://schema.org/InStock // Còn hàng
https://schema.org/OutOfStock // Hết hàng
https://schema.org/PreOrder // Đặt trước
https://schema.org/BackOrder // Đặt hàng, chờ về
https://schema.org/SoldOut // Đã bán hết
https://schema.org/Discontinued // Ngừng kinh doanh
https://schema.org/LimitedAvailability // Số lượng có hạnPhần 4: Schema đầy đủ cho Merchant Listing
Càng nhiều thuộc tính → càng nhiều cơ hội xuất hiện trong rich result:
json
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "Áo Thun Nam Cotton Trắng Dáng Regular",
"image": [
"https://shop.com/photos/1x1/ao-trang.jpg",
"https://shop.com/photos/4x3/ao-trang.jpg",
"https://shop.com/photos/16x9/ao-trang.jpg"
],
"description": "Áo thun nam cotton 100% chất liệu cao cấp, dáng regular fit.",
"sku": "AT-001-WHITE-M",
"gtin13": "8938503001234",
"brand": { "@type": "Brand", "name": "Shop XYZ" },
"offers": {
"@type": "Offer",
"url": "https://shop.com/ao-thun-nam-cotton-trang",
"priceCurrency": "VND",
"price": "299000",
"priceValidUntil": "2026-12-31",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "VN",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
},
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": { "@type": "MonetaryAmount", "value": "0", "currency": "VND" },
"shippingDestination": { "@type": "DefinedRegion", "addressCountry": "VN" },
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "DAY" },
"transitTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 3, "unitCode": "DAY" }
}
}
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"reviewCount": "127",
"bestRating": "5",
"worstRating": "1"
}
}Với Product Snippet (blog review), điểm khác biệt lớn nhất là có thể khai báo ưu/nhược điểm:
json
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "iPhone 16 Pro Max 256GB",
"image": "https://blog.com/iphone-16-review.jpg",
"brand": { "@type": "Brand", "name": "Apple" },
"review": {
"@type": "Review",
"reviewRating": { "@type": "Rating", "ratingValue": "5", "bestRating": "5" },
"author": { "@type": "Person", "name": "Tấn Phát Digital" },
"datePublished": "2026-05-19",
"reviewBody": "Sau 30 ngày sử dụng...",
"positiveNotes": {
"@type": "ItemList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Pin tốt hơn thế hệ trước" },
{ "@type": "ListItem", "position": 2, "name": "Camera telephoto ấn tượng" }
]
},
"negativeNotes": {
"@type": "ItemList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Giá cao" }
]
}
}
}Phần 5: Product Identifiers — GTIN, MPN, SKU
Identifier giúp Google khớp sản phẩm của bạn với cơ sở dữ liệu sản phẩm toàn cầu, hiển thị trong Shopping Knowledge Panel và so sánh giá với người bán khác.
Loại | Là gì | Ví dụ |
|---|---|---|
GTIN | Mã barcode quốc tế (UPC, EAN, ISBN). Có |
|
MPN | Mã linh kiện của nhà sản xuất |
|
SKU | Mã quản lý nội bộ của shop bạn |
|
Dùng cái nào? Sản phẩm có thương hiệu (iPhone, Adidas...) → GTIN + MPN + SKU. Sản phẩm OEM/no-brand → MPN + SKU. Sản phẩm tự sản xuất → SKU.
Phần 6: Kết hợp với Organization Markup
Google khuyến nghị: ngoài structured data cho từng sản phẩm, hãy khai báo thêm structured data mô tả chính sách của doanh nghiệp ecommerce, lồng dưới Organization markup. Đặt ở trang chủ hoặc toàn site:
json
{
"@context": "https://schema.org/",
"@type": "OnlineStore",
"name": "Shop XYZ",
"url": "https://shop.com",
"logo": "https://shop.com/logo.png",
"sameAs": [
"https://facebook.com/shopxyz",
"https://instagram.com/shopxyz"
],
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+84-901-234-567",
"contactType": "customer service",
"areaServed": "VN",
"availableLanguage": ["Vietnamese", "English"]
},
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "VN",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
},
"hasMemberProgram": {
"@type": "MemberProgram",
"name": "Shop XYZ Rewards",
"description": "Tích điểm với mỗi đơn hàng, đổi voucher giảm giá",
"url": "https://shop.com/rewards"
}
}Giá trị returnPolicyCategory: MerchantReturnFiniteReturnWindow (có thời hạn), MerchantReturnUnlimitedWindow (không giới hạn), MerchantReturnNotPermitted (không đổi trả). Giá trị returnFees: FreeReturn, ReturnFeesCustomerResponsibility, OriginalShippingFees.
Phần 7: Triển khai theo nền tảng
JSON-LD là định dạng khuyến nghị — đặt trong <head>:
html
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "Áo Thun Nam Cotton Trắng",
"image": "https://shop.com/ao-trang.jpg",
"offers": {
"@type": "Offer",
"price": "299000",
"priceCurrency": "VND",
"availability": "https://schema.org/InStock"
}
}
</script>WordPress + WooCommerce (plugin: Yoast, Rank Math, Schema Pro — hoặc tự code):
php
add_action('wp_head', function() {
if (!is_product()) return;
global $product;
$schema = [
'@context' => 'https://schema.org/',
'@type' => 'Product',
'name' => $product->get_name(),
'image' => wp_get_attachment_url($product->get_image_id()),
'sku' => $product->get_sku(),
'offers' => [
'@type' => 'Offer',
'url' => get_permalink($product->get_id()),
'price' => $product->get_price(),
'priceCurrency' => get_woocommerce_currency(),
'availability' => $product->is_in_stock()
? 'https://schema.org/InStock'
: 'https://schema.org/OutOfStock'
]
];
echo '<script type="application/ld+json">' .
json_encode($schema, JSON_UNESCAPED_UNICODE) .
'</script>';
});Shopify (product.liquid):
liquid
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Product",
"name": {{ product.title | json }},
"image": [
{% for image in product.images %}
{{ image | img_url: '1024x' | prepend: 'https:' | json }}
{% unless forloop.last %},{% endunless %}
{% endfor %}
],
"sku": {{ product.selected_or_first_available_variant.sku | json }},
"brand": { "@type": "Brand", "name": {{ product.vendor | json }} },
"offers": {
"@type": "Offer",
"url": {{ shop.url | append: product.url | json }},
"priceCurrency": {{ cart.currency.iso_code | json }},
"price": {{ product.selected_or_first_available_variant.price | divided_by: 100.00 | json }},
"availability": "{% if product.available %}https://schema.org/InStock{% else %}https://schema.org/OutOfStock{% endif %}"
}
}
</script>Next.js / React:
javascript
import Head from 'next/head';
export default function ProductPage({ product }) {
const schema = {
"@context": "https://schema.org/",
"@type": "Product",
"name": product.name,
"image": product.images,
"sku": product.sku,
"offers": {
"@type": "Offer",
"price": product.price,
"priceCurrency": "VND",
"availability": product.inStock
? "https://schema.org/InStock"
: "https://schema.org/OutOfStock"
}
};
return (
<Head>
<script type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }} />
</Head>
);
}Phần 8: Schema cho biến thể (Product Variants)
Nếu sản phẩm có biến thể (màu, size), dùng ProductGroup để Google hiểu chúng thuộc cùng một sản phẩm:
json
{
"@context": "https://schema.org/",
"@type": "ProductGroup",
"name": "Áo Thun Nam Cotton",
"productGroupID": "AT-001",
"variesBy": ["color", "size"],
"hasVariant": [
{
"@type": "Product",
"sku": "AT-001-WHITE-M",
"name": "Áo Thun Nam Cotton Trắng - Size M",
"color": "Trắng",
"size": "M",
"image": "https://shop.com/photos/at-001-white-m.jpg",
"offers": {
"@type": "Offer", "price": "299000", "priceCurrency": "VND",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"sku": "AT-001-BLACK-M",
"name": "Áo Thun Nam Cotton Đen - Size M",
"color": "Đen",
"size": "M",
"image": "https://shop.com/photos/at-001-black-m.jpg",
"offers": {
"@type": "Offer", "price": "299000", "priceCurrency": "VND",
"availability": "https://schema.org/InStock"
}
}
]
}Lợi ích: Google hiểu các biến thể là cùng một sản phẩm, hiển thị tùy chọn trong Shopping, và cho phép giá/tình trạng hàng riêng theo từng biến thể. Việc này cần đi kèm chiến lược URL và canonical hợp lý để tránh trùng lặp.
Phần 9: Kiểm tra và lỗi thường gặp
Công cụ: Rich Results Test (dán URL → xem Valid / Warning / Error), Schema Markup Validator (kiểm tra cấu trúc), và Search Console → Enhancements → Products (theo dõi sau khi deploy).
Lỗi | Nguyên nhân | Cách sửa |
|---|---|---|
Missing field | Không có hình | Thêm |
Missing field | Thiếu thông tin giá | Thêm object |
Invalid value | Sai định dạng | Dùng đúng URL schema.org |
Missing | Thiếu | Bổ sung số lượng đánh giá |
Giá không khớp | Schema khác giá hiển thị | Sinh schema động từ database |
Phần 10: 8 sai lầm cần tránh
Sai lầm | Vì sao nguy hiểm | Cách đúng |
|---|---|---|
Review giả | Vi phạm chính sách, có thể bị manual action | Chỉ dùng review thật từ khách hàng |
Schema không khớp nội dung hiển thị | Google bỏ qua schema, có thể cảnh báo | Sinh động từ database, giá schema = giá user thấy |
| Dữ liệu sai lệch | Chỉ thêm khi có review thật (≥ 1) |
Chỉ gắn schema cho 1–2 trang | Bỏ lỡ hàng nghìn sản phẩm | Gắn schema cho tất cả trang sản phẩm |
Quên cập nhật khi giá thay đổi | Khách click vào thấy giá khác → mất niềm tin | Sinh schema động, cập nhật real-time |
| Google cảnh báo offer hết hiệu lực | Cập nhật thường xuyên |
Thiếu | Google không biết VND hay USD | Luôn khai báo |
URL ảnh tương đối ( | Google không tìm được ảnh | Dùng URL tuyệt đối |
Phần 11: Checklist triển khai
Nhóm | Cần kiểm tra |
|---|---|
Bắt buộc |
|
Khuyến nghị |
|
Merchant Listing |
|
Biến thể |
|
Kiểm thử | Rich Results Test, Schema Validator, không còn error |
Triển khai | Schema trên mọi trang sản phẩm, sinh động từ database, khớp nội dung hiển thị |
Giám sát | Theo dõi Enhancements report hàng tuần, sửa lỗi ngay khi phát hiện |
Kết luận
Trong các kỹ thuật SEO Ecommerce, Product Schema là một trong những hạng mục có ROI cao nhất: chi phí thấp (chỉ cần triển khai code), hiệu quả tương đối nhanh, tác động rõ tới tỷ lệ nhấp, và bền vững.
Năm thông điệp cốt lõi: (1) schema không còn là tùy chọn với ecommerce; (2) schema phải khớp với nội dung hiển thị; (3) biến thể cần ProductGroup; (4) validate trước khi deploy; và (5) giám sát liên tục qua Search Console.
Product Schema là một phần quan trọng của chiến lược SEO Ecommerce hiện đại. Nếu bạn muốn tối ưu website bán hàng chuẩn SEO và triển khai structured data đúng cách, hãy liên hệ Tấn Phát Digital để được tư vấn.
Biên soạn và Việt hóa từ tài liệu Google Search Central về Product structured data. Code mẫu và checklist thuộc về Tấn Phát Digital.








