Tài liệu này dành cho NPT (Third-party / Mini App publisher) muốn tích hợp dữ liệu trang vào hệ thống VSF Search.
Tổng quan
Bên cạnh việc cung cấp sitemap để liệt kê các pagePath, NPT nên khai báo thêm schema dữ liệu cho các trang để giúp hệ thống Search hiểu rõ loại nội dung và các thuộc tính của trang.
Schema giúp hệ thống Search:
1. Hiểu loại nội dung của trang
Các trang Mini App thường có cấu trúc HTML hoặc JSON riêng. Nếu không có schema, hệ thống Search sẽ khó xác định nội dung các trang thông tin khác nhau như: Product, Event, News, Offer, Location, FAQ...
Schema giúp Search xác định entity type của nội dung. Ví dụ:
| URL pattern | Entity Type |
|---|
product/123 | Product |
event/456 | Event |
hotel/789 | LodgingBusiness |
voucher/abc | Offer |
course/xyz | Course |
2. Chuẩn hóa dữ liệu cho Search Index
Schema giúp hệ thống trích xuất các thuộc tính quan trọng để Search index.
| Schema field | Search index field | Mô tả |
|---|
item.name | title | Tên hiển thị trong kết quả tìm kiếm |
item.description | description | Mô tả rút gọn |
item.offers.price | price | Giá để filter/sort |
item.geo | geo_location | Tọa độ để tìm kiếm theo vị trí |
item.sameAs | deeplink | Deep link vào Mini App |
item.image | thumbnail | Ảnh hiển thị trong kết quả |
item.category | category | Phân loại để facet filter |
3. Cải thiện chất lượng kết quả tìm kiếm
Khi có schema đầy đủ, Search hiển thị rich result:
Vinpearl Resort Nha Trang
Giá từ: 3,692,558 VND ⭐ 4.6 (2,998 đánh giá)
📍 Nha Trang, Khánh Hòa
Thay vì chỉ hiển thị tên trang.
Khi nào cần khai báo Schema?
| Loại trang | Schema bắt buộc | Schema name gợi ý |
|---|
| Product detail | ✔ | product_ecom |
| Event detail | ✔ | event |
| News / Article detail | ✔ | generic_news_article |
| Voucher / Ưu đãi detail | ✔ | offer |
| Hotel / Resort detail | ✔ | product_hotel |
| Tour / Trip detail | ✔ | product_tourtrip |
| Course / Khóa học detail | ✔ | course |
| Service detail | ✔ | service |
| List page (danh sách) | ✘ | — (dùng API thay thế) |
| Homepage | ✘ | — |
Cấu trúc DataFeed chuẩn
Mọi payload gửi lên API đều bọc trong cấu trúc DataFeed theo chuẩn Schema.org. Đây là bắt buộc với tất cả schema type.
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "Tên feed (tự đặt)",
"feed_version": "1.0",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "DataFeedItem",
"dateModified": "2026-04-23T10:00:00Z",
"item": {
"@type": "<EntityType>",
"identifier": "<business-key>",
"name": "...",
...
}
}
]
}
Các trường bắt buộc ở root
| Field | Type | Giá trị | Ghi chú |
|---|
@context | string | "https://schema.org" | Cố định |
@type | string | "DataFeed" | Cố định |
name | string | bất kỳ | Tên mô tả feed |
feed_version | string | "1.0" | Version của feed |
inLanguage | string | "vi-VN" hoặc "en-US" | Ngôn ngữ nội dung |
dateModified | string (ISO-8601) | e.g. "2026-04-23T10:00:00Z" | Thời điểm cập nhật feed |
dataFeedElement | array | xem bên dưới | Tối thiểu 1 phần tử |
Các trường bắt buộc trong mỗi DataFeedItem
| Field | Type | Giá trị | Ghi chú |
|---|
@type | string | "DataFeedItem" | Cố định |
dateModified | string (ISO-8601) | — | Thời điểm item được cập nhật |
item | object | xem từng schema | Nội dung thực tế của trang |
Trường identifier — business key
identifier là khoá kinh doanh của item, bắt buộc với mọi schema type:
- Pattern:
^[a-zA-Z0-9][a-zA-Z0-9_-]*$ (chữ-số, gạch dưới, gạch ngang; bắt đầu bằng chữ-số)
- Phải duy nhất trong cùng app (
app_id)
- Ví dụ:
"product-001", "event_2026_hanoi", "hotel-vinpearl-nhatrang"
Các Schema Type được hỗ trợ
1. Product — Sản phẩm thương mại điện tử
Schema name: product_ecom
Entity type: Product
Dùng cho: Trang chi tiết sản phẩm của các Mini App thương mại điện tử.
Các trường bắt buộc
| Field | Type | Validation rule | Mô tả |
|---|
@type | "Product" | — | Cố định |
identifier | string | pattern ^[a-zA-Z0-9][a-zA-Z0-9_-]*$ | Business key |
name | string | no_pii_phone, no_pii_email | Tên sản phẩm |
description | string | object | no_pii_phone, no_pii_email | Mô tả sản phẩm |
image | string (URI) | string[] | url_connection | URL ảnh sản phẩm |
sameAs | string (URI) | deep_link_format | Deep link vào trang sản phẩm |
Các trường tùy chọn quan trọng
| Field | Type | Mô tả |
|---|
sku | string | SKU của sản phẩm |
category | string | Danh mục (ví dụ: "Electronics", "Fashion") |
brand.name | string | Tên thương hiệu |
offers | Offer | AggregateOffer | Thông tin giá (xem phần Offer) |
aggregateRating | object | Điểm đánh giá tổng hợp |
url | string (URI) | URL trang web |
address | PostalAddress | Địa chỉ (nếu sản phẩm gắn với địa điểm) |
geo | GeoCoordinates | Tọa độ GPS |
additionalProperty | PropertyValue[] | Thuộc tính mở rộng |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "Sản phẩm thời trang",
"feed_version": "1.0",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "DataFeedItem",
"dateModified": "2026-04-23T10:00:00Z",
"item": {
"@type": "Product",
"identifier": "PRODUCT-001",
"sku": "SKU-TSHIRT-XL-RED",
"name": "Áo thun cotton cao cấp",
"description": "Áo thun cotton 100% thoáng mát, phù hợp mọi thời tiết",
"image": "https://cdn.example.vn/products/tshirt-001.webp",
"url": "https://miniapp.example.vn/product/001",
"sameAs": "vapp://miniapp/example/product/001",
"category": "Thời trang > Áo",
"brand": {
"@type": "Brand",
"name": "VinFashion"
},
"offers": {
"@type": "Offer",
"price": 299000,
"priceCurrency": "VND",
"availability": "InStock",
"priceValidUntil": "2026-12-31T23:59:59Z"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.5,
"ratingCount": 128
}
}
}
]
}
2. Event — Sự kiện
Schema name: event
Entity type: Event
Dùng cho: Trang chi tiết sự kiện, concert, triển lãm, workshop...
Các trường bắt buộc
| Field | Type | Validation rule | Mô tả |
|---|
@type | "Event" | — | Cố định |
identifier | string | pattern | Business key |
name | string | no_pii_phone, no_pii_email | Tên sự kiện |
description | string | object | no_pii_phone, no_pii_email | Mô tả sự kiện |
image | string (URI) | string[] | url_connection | Ảnh sự kiện |
sameAs | string (URI) | deep_link_format | Deep link |
startDate | string (ISO-8601) | — | Ngày bắt đầu |
location | Place | — | Địa điểm tổ chức |
Các trường tùy chọn quan trọng
| Field | Type | Mô tả |
|---|
endDate | string (ISO-8601) | Ngày kết thúc |
eventStatus | string | "https://schema.org/EventScheduled" | "EventCancelled" | "EventPostponed" |
eventAttendanceMode | string | "https://schema.org/OfflineEventAttendanceMode" | "OnlineEventAttendanceMode" |
category | string | Phân loại sự kiện |
organizer | object | Đơn vị tổ chức |
performer | object | Nghệ sĩ/diễn giả |
offers | Offer | Giá vé |
aggregateRating | object | Điểm đánh giá |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "Sự kiện mùa hè 2026",
"feed_version": "1.0",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "DataFeedItem",
"dateModified": "2026-04-23T10:00:00Z",
"item": {
"@type": "Event",
"identifier": "event-summer-2026",
"name": "Đại nhạc hội mùa hè 2026",
"description": "Đại nhạc hội quy tụ hơn 20 nghệ sĩ hàng đầu Việt Nam, phù hợp mọi lứa tuổi.",
"image": "https://cdn.example.vn/events/summer-2026.jpg",
"url": "https://events.example.vn/summer-2026",
"sameAs": "vapp://miniapp/events/summer-2026",
"category": "Âm nhạc",
"startDate": "2026-06-15T18:00:00+07:00",
"endDate": "2026-06-15T22:00:00+07:00",
"eventStatus": "https://schema.org/EventScheduled",
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
"location": {
"@type": "Place",
"name": "Sân vận động Mỹ Đình",
"address": {
"@type": "PostalAddress",
"streetAddress": "Đường Lê Đức Thọ",
"addressLocality": "Hà Nội",
"addressRegion": "Hà Nội",
"addressCountry": "VN"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 21.0163,
"longitude": 105.7644
}
},
"organizer": {
"@type": "Organization",
"name": "VinEvents"
},
"offers": {
"@type": "Offer",
"price": 500000,
"priceCurrency": "VND",
"unitText": "vé",
"availability": "InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.8,
"ratingCount": 1250
}
}
}
]
}
3. LodgingBusiness
Schema name: product_hotel
Entity type: LodgingBusiness
Dùng cho: Trang chi tiết khách sạn, resort, villa...
Các trường bắt buộc
| Field | Type | Validation rule | Mô tả |
|---|
@type | "LodgingBusiness" | — | Cố định |
identifier | string | pattern | Business key |
name | string | no_pii_phone, no_pii_email | Tên khách sạn |
description | string | object | no_pii_phone, no_pii_email | Mô tả |
image | string (URI) | string[] | url_connection | Ảnh khách sạn |
sameAs | string (URI) | deep_link_format | Deep link |
Các trường tùy chọn quan trọng
| Field | Type | Mô tả |
|---|
address | PostalAddress | Địa chỉ |
geo | GeoCoordinates | Tọa độ GPS |
starRating.ratingValue | number | Số sao (1–5) |
checkinTime | string | Giờ nhận phòng (e.g. "14:00:00") |
checkoutTime | string | Giờ trả phòng (e.g. "12:00:00") |
amenityFeature | LocationFeatureSpecification[] | Tiện nghi (Hồ bơi, Spa, Ăn sáng...) |
offers | AggregateOffer | Khoảng giá phòng |
aggregateRating | object | Điểm đánh giá của khách hàng |
category | string | Loại (e.g. "Du lịch > Khách sạn") |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "Danh sách khách sạn",
"feed_version": "1.0",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "DataFeedItem",
"dateModified": "2026-04-23T10:00:00Z",
"item": {
"@type": "LodgingBusiness",
"identifier": "hotel-vinpearl-nhatrang",
"name": "Vinpearl Resort Nha Trang",
"description": "Khu nghỉ dưỡng 5 sao bên bờ biển Nha Trang với đầy đủ tiện nghi hạng sang.",
"image": "https://cdn.example.vn/hotels/vinpearl-nhatrang.jpg",
"url": "https://stay.example.vn/hotel/vinpearl-nhatrang",
"sameAs": "vapp://miniapp/stay/hotel/vinpearl-nhatrang",
"category": "Du lịch > Khách sạn",
"address": {
"@type": "PostalAddress",
"streetAddress": "Đảo Hòn Tre",
"addressLocality": "Nha Trang",
"addressRegion": "Khánh Hòa",
"addressCountry": "VN"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 12.2388,
"longitude": 109.2097
},
"starRating": {
"@type": "Rating",
"ratingValue": 5
},
"checkinTime": "14:00:00",
"checkoutTime": "12:00:00",
"amenityFeature": [
{ "@type": "LocationFeatureSpecification", "name": "Hồ bơi", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Spa", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Bãi biển riêng", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Ăn sáng", "value": true }
],
"offers": {
"@type": "AggregateOffer",
"lowPrice": 3500000,
"highPrice": 8000000,
"priceCurrency": "VND",
"availability": "InStock",
"priceValidUntil": "2026-12-31T23:59:59Z"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.7,
"ratingCount": 3850
}
}
}
]
}
4. Offer
Schema name: offer
Entity type: Offer
Dùng cho: Trang chi tiết voucher, mã ưu đãi, deal...
Các trường bắt buộc
| Field | Type | Validation rule | Mô tả |
|---|
@type | "Offer" | — | Cố định |
identifier | string | pattern | Business key |
name | string | no_pii_phone, no_pii_email | Tên voucher |
description | string | object | no_pii_phone, no_pii_email | Mô tả ưu đãi |
image | string (URI) | string[] | url_connection | Ảnh banner voucher |
sameAs | string (URI) | — | Deep link |
Các trường tùy chọn quan trọng
| Field | Type | Mô tả |
|---|
availability | string | Trạng thái: InStock, OutOfStock, SoldOut... |
validFrom | string (ISO-8601) | Ngày bắt đầu hiệu lực |
priceValidUntil | string (ISO-8601) | Ngày hết hạn |
seller | Seller | Đơn vị phát hành voucher |
category | string | Loại ưu đãi |
additionalProperty | PropertyValue[] | Thuộc tính mở rộng (ví dụ: điều kiện sử dụng) |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "Voucher ưu đãi tháng 4",
"feed_version": "1.0",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "DataFeedItem",
"dateModified": "2026-04-23T10:00:00Z",
"item": {
"@type": "Offer",
"identifier": "VOUCHER-TRAVEL-APR2026",
"name": "Giảm 20% khách sạn toàn quốc",
"description": "Ưu đãi giảm 20% tất cả khách sạn 3–5 sao toàn quốc. Áp dụng đến hết tháng 4/2026.",
"image": "https://cdn.example.vn/vouchers/travel-apr2026.jpg",
"url": "https://voucher.example.vn/TRAVEL-APR2026",
"sameAs": "vapp://miniapp/voucher/TRAVEL-APR2026",
"category": "Du lịch",
"availability": "InStock",
"validFrom": "2026-04-01T00:00:00+07:00",
"priceValidUntil": "2026-04-30T23:59:59+07:00",
"seller": {
"@type": "Organization",
"name": "vapp",
"logo": "https://cdn.example.vn/logo/vapp.png"
},
"additionalProperty": [
{
"@type": "PropertyValue",
"name": "min_order_value",
"value": 2000000
},
{
"@type": "PropertyValue",
"name": "max_discount",
"value": 500000
}
]
}
}
]
}
5. Course
Schema name: course
Entity type: Course
Dùng cho: Trang chi tiết khóa học online/offline, chương trình đào tạo...
Các trường bắt buộc
| Field | Type | Validation rule | Mô tả |
|---|
@type | "Course" | — | Cố định |
identifier | string | pattern | Business key |
name | string | no_pii_phone, no_pii_email | Tên khóa học |
description | string | object | no_pii_phone, no_pii_email | Mô tả khóa học |
image | string (URI) | string[] | url_connection | Ảnh khóa học |
sameAs | string (URI) | deep_link_format | Deep link |
provider.name | string | — | Đơn vị cung cấp |
Các trường tùy chọn quan trọng
| Field | Type | Mô tả |
|---|
courseCode | string | Mã khóa học |
educationalLevel | string | Trình độ (e.g. "Beginner", "Intermediate") |
timeRequired | string | Thời lượng (ISO 8601 Duration, e.g. "PT10H") |
hasCourseInstance | CourseInstance[] | Lịch học cụ thể (ngày, địa điểm, giá) |
aggregateRating | object | Điểm đánh giá |
category | string | Chủ đề (e.g. "Lập trình", "Ngoại ngữ") |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "Khóa học công nghệ",
"feed_version": "1.0",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "DataFeedItem",
"dateModified": "2026-04-23T10:00:00Z",
"item": {
"@type": "Course",
"identifier": "COURSE-PYTHON-BEGINNER",
"courseCode": "PY101",
"name": "Lập trình Python cho người mới bắt đầu",
"description": "Khóa học Python từ cơ bản đến ứng dụng thực tế, phù hợp cho người chưa có kinh nghiệm lập trình.",
"image": "https://cdn.example.vn/courses/python-101.jpg",
"url": "https://edu.example.vn/course/python-beginner",
"sameAs": "vapp://miniapp/edu/course/python-beginner",
"category": "Công nghệ > Lập trình",
"provider": {
"@type": "Organization",
"name": "VinTech Academy"
},
"educationalLevel": "Beginner",
"timeRequired": "PT20H",
"hasCourseInstance": [
{
"@type": "CourseInstance",
"courseMode": "Online",
"startDate": "2026-05-01T08:00:00+07:00",
"offers": {
"@type": "Offer",
"price": 990000,
"priceCurrency": "VND",
"availability": "InStock"
}
}
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.6,
"ratingCount": 342
}
}
}
]
}
6. Service
Schema name: service
Entity type: Service
Dùng cho: Trang chi tiết dịch vụ (vệ sinh nhà, sửa chữa điện tử, chăm sóc sức khỏe...).
Các trường bắt buộc
| Field | Type | Validation rule | Mô tả |
|---|
@type | "Service" | — | Cố định |
identifier | string | pattern | Business key |
name | string | no_pii_phone, no_pii_email | Tên dịch vụ |
description | string | object | no_pii_phone, no_pii_email | Mô tả dịch vụ |
image | string (URI) | string[] | url_connection | Ảnh dịch vụ |
sameAs | string (URI) | deep_link_format | Deep link |
provider.name | string | — | Đơn vị cung cấp |
Các trường tùy chọn quan trọng
| Field | Type | Mô tả |
|---|
serviceLocation | ServiceLocation | Địa điểm cung cấp dịch vụ |
offers | Offer | AggregateOffer | Thông tin giá |
aggregateRating | object | Điểm đánh giá |
category | string | Loại dịch vụ |
address | PostalAddress | Địa chỉ |
geo | GeoCoordinates | Tọa độ |
additionalProperty | PropertyValue[] | Thuộc tính mở rộng |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "Dịch vụ vệ sinh nhà",
"feed_version": "1.0",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "DataFeedItem",
"dateModified": "2026-04-23T10:00:00Z",
"item": {
"@type": "Service",
"identifier": "SVC-CLEANING-HOME-STD",
"name": "Dọn dẹp nhà tiêu chuẩn",
"description": "Dịch vụ vệ sinh nhà toàn diện 4 tiếng, bao gồm lau sàn, lau kính, vệ sinh nhà bếp và nhà vệ sinh.",
"image": "https://cdn.example.vn/services/home-cleaning.jpg",
"url": "https://service.example.vn/cleaning/home-standard",
"sameAs": "vapp://miniapp/service/cleaning/home-standard",
"category": "Nhà cửa > Vệ sinh",
"provider": {
"@type": "Organization",
"name": "VinHome Services"
},
"offers": {
"@type": "Offer",
"price": 350000,
"priceCurrency": "VND",
"unitText": "buổi",
"availability": "InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.4,
"ratingCount": 892
},
"additionalProperty": [
{ "@type": "PropertyValue", "name": "duration_hours", "value": 4 },
{ "@type": "PropertyValue", "name": "workers", "value": 2 }
]
}
}
]
}
7. NewsArticle
Schema name: generic_news_article
Entity type: NewsArticle
Dùng cho: Trang chi tiết bài báo, tin tức, blog...
Schema generic_news_article sử dụng additionalProperties: true — chỉ yêu cầu @type: "NewsArticle" và các trường root chuẩn. NPT tự định nghĩa thêm các trường nội dung.
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "Tin tức VinGroup",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "NewsArticle",
"identifier": "NEWS-2026-04-23-001",
"name": "VinFast ra mắt xe điện mới tại triển lãm Bangkok",
"description": "VinFast chính thức trình làng mẫu xe điện VF Wild tại triển lãm Bangkok Motor Show 2026.",
"image": "https://cdn.example.vn/news/vinfast-wild-bangkok.jpg",
"url": "https://news.example.vn/vinfast-vf-wild-bangkok-2026",
"sameAs": "vapp://miniapp/news/vinfast-vf-wild-bangkok-2026",
"datePublished": "2026-04-23T08:00:00+07:00",
"dateModified": "2026-04-23T10:00:00+07:00",
"author": {
"@type": "Person",
"name": "Nguyễn Văn A"
},
"publisher": {
"@type": "Organization",
"name": "VinGroup News"
},
"category": "Xe điện"
}
]
}
Schema name: product_ecom_merchant
Entity type: Product Ecom Merchant
Dùng cho: Sản phẩm của merchant trong hệ sinh thái VSF (có thông tin thương hiệu, nền tảng bán).
Schema này dùng additionalProperties: false — chỉ cho phép đúng các trường đã khai báo. Không thêm trường tùy ý.
Các trường bắt buộc
| Field | Type | Validation rule | Mô tả |
|---|
@type | "Product Ecom Merchant" | — | Cố định (không dùng "Product") |
@id | string (URI) | — | URI định danh toàn cục của item |
identifier | string | pattern | Business key |
name | string | no_pii_phone, no_pii_email | Tên sản phẩm |
brand | object | — | Thương hiệu ({ "@type": "Brand", "name": "..." }) |
category | string | — | Danh mục sản phẩm |
price | number (≥ 0) | non_negative_number | Giá bán (flat, không nằm trong offers) |
platform | string | — | Nền tảng bán (ví dụ: "vsf", "vapp") |
description | string | object | no_pii_phone, no_pii_email | Mô tả sản phẩm |
image | string (URI) | string[] | url_connection | URL ảnh sản phẩm |
url | string (URI) | — | URL trang web sản phẩm |
sameAs | string (URI) | deep_link_format | Deep link vào Mini App |
Các trường tùy chọn quan trọng
| Field | Type | Mô tả |
|---|
tags | string[] | Tag phân loại bổ sung |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "Merchant Product Feed",
"feed_version": "1.0",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "DataFeedItem",
"dateModified": "2026-04-23T10:00:00Z",
"item": {
"@type": "Product Ecom Merchant",
"@id": "https://vsf.example.vn/merchant/products/PHONE-S25-ULTRA",
"identifier": "PHONE-S25-ULTRA",
"name": "Samsung Galaxy S25 Ultra 256GB",
"brand": {
"@type": "Brand",
"name": "Samsung"
},
"category": "Điện thoại > Android",
"price": 33990000,
"platform": "vapp",
"description": "Smartphone cao cấp màn hình Dynamic AMOLED 6.9 inch, bút S Pen tích hợp, camera 200MP.",
"image": "https://cdn.example.vn/products/s25-ultra.webp",
"url": "https://shop.example.vn/samsung-galaxy-s25-ultra",
"sameAs": "vapp://miniapp/shop/product/PHONE-S25-ULTRA",
"tags": ["flagship", "5g", "s-pen"]
}
}
]
}
9. HotelRoom
Schema name: product_room
Entity type: HotelRoom
Dùng cho: Trang chi tiết từng loại phòng trong khách sạn / resort.
Các trường bắt buộc
| Field | Type | Validation rule | Mô tả |
|---|
@type | "HotelRoom" | — | Cố định |
identifier | string | pattern | Business key |
name | string | no_pii_phone, no_pii_email | Tên loại phòng |
description | string | object | no_pii_phone, no_pii_email | Mô tả phòng |
image | string (URI) | string[] | url_connection | Ảnh phòng |
sameAs | string (URI) | deep_link_format | Deep link |
Các trường tùy chọn quan trọng
| Field | Type | Mô tả |
|---|
sku | string | Mã phòng nội bộ |
isPartOf | object | Khách sạn chứa phòng này ({ "@type": "Hotel", "@id": "..." }) |
floorSize | object | Diện tích ({ "@type": "QuantitativeValue", "value": 45, "unitCode": "MTK" }) |
occupancy | object | Sức chứa ({ "@type": "QuantitativeValue", "maxValue": 2 }) |
bed | object[] | Giường ([{ "@type": "BedDetails", "typeOfBed": "King" }]) |
amenityFeature | LocationFeatureSpecification[] | Tiện nghi phòng |
offers | Offer | AggregateOffer | Giá phòng |
additionalProperty | PropertyValue[] | Thuộc tính mở rộng |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "Vinpearl Room Feed",
"feed_version": "1.0",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "DataFeedItem",
"dateModified": "2026-04-23T10:00:00Z",
"item": {
"@type": "HotelRoom",
"identifier": "ROOM-VPNT-DELUXE-OCEAN",
"name": "Deluxe Ocean View",
"description": "Phòng Deluxe hướng biển 45m², giường King, ban công riêng nhìn ra vịnh Nha Trang.",
"image": [
"https://cdn.example.vn/rooms/deluxe-ocean-01.jpg",
"https://cdn.example.vn/rooms/deluxe-ocean-02.jpg"
],
"url": "https://vinpearl.com/rooms/deluxe-ocean",
"sameAs": "vapp://miniapp/vinpearl/rooms/ROOM-VPNT-DELUXE-OCEAN",
"isPartOf": {
"@type": "Hotel",
"@id": "https://vinpearl.com/hotels/vinpearl-nhatrang"
},
"floorSize": {
"@type": "QuantitativeValue",
"value": 45,
"unitCode": "MTK"
},
"occupancy": {
"@type": "QuantitativeValue",
"maxValue": 2
},
"bed": [
{ "@type": "BedDetails", "typeOfBed": "King" }
],
"amenityFeature": [
{ "@type": "LocationFeatureSpecification", "name": "Free WiFi", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Air conditioning", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Mini bar", "value": true }
],
"offers": {
"@type": "AggregateOffer",
"lowPrice": 3500000,
"highPrice": 5000000,
"priceCurrency": "VND",
"availability": "InStock"
}
}
}
]
}
10. TouristTrip
Schema name: product_tourtrip
Entity type: TouristTrip
Dùng cho: Trang chi tiết tour du lịch, hành trình, package du lịch.
Các trường bắt buộc
| Field | Type | Validation rule | Mô tả |
|---|
@type | "TouristTrip" | — | Cố định |
identifier | string | pattern | Business key |
name | string | no_pii_phone, no_pii_email | Tên tour |
description | string | object | no_pii_phone, no_pii_email | Mô tả tour |
image | string (URI) | string[] | url_connection | Ảnh tour |
sameAs | string (URI) | deep_link_format | Deep link |
Các trường tùy chọn quan trọng
| Field | Type | Mô tả |
|---|
category | string | Loại tour (ví dụ: "Adventure", "Cultural") |
provider | object | Đơn vị tổ chức tour ({ "@type": "Organization", "name": "..." }) |
touristType | string[] | Đối tượng khách (["Family", "Solo"]) |
itinerary | object[] | Lịch trình chi tiết theo điểm dừng |
offers | Offer | AggregateOffer | Giá tour |
aggregateRating | object | Điểm đánh giá tổng hợp |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "Tour Phú Quốc 4N3Đ",
"feed_version": "1.0",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "DataFeedItem",
"dateModified": "2026-04-23T10:00:00Z",
"item": {
"@type": "TouristTrip",
"identifier": "TOUR-PQ-4N3D-VIP",
"name": "Tour Phú Quốc 4 ngày 3 đêm — Khám phá toàn đảo",
"description": "Hành trình khám phá thiên đường Phú Quốc 4N3Đ: tắm biển Bãi Sao, cáp treo Hòn Thơm, chợ đêm Dinh Cậu.",
"image": "https://cdn.example.vn/tours/phuquoc-4n3d.jpg",
"url": "https://travel.example.vn/tour/phuquoc-4n3d-vip",
"sameAs": "vapp://miniapp/travel/tours/TOUR-PQ-4N3D-VIP",
"category": "Beach",
"provider": {
"@type": "Organization",
"name": "VinWonders Travel"
},
"touristType": ["Family", "Couple"],
"itinerary": [
{
"@type": "TouristDestination",
"name": "Bãi Sao",
"geo": { "@type": "GeoCoordinates", "latitude": 9.8671, "longitude": 104.0148 }
},
{
"@type": "TouristDestination",
"name": "Hòn Thơm — Cáp treo",
"geo": { "@type": "GeoCoordinates", "latitude": 9.8167, "longitude": 104.0167 }
}
],
"offers": {
"@type": "AggregateOffer",
"lowPrice": 5990000,
"highPrice": 9990000,
"priceCurrency": "VND",
"unitText": "người",
"availability": "InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.7,
"ratingCount": 312
}
}
}
]
}
11. TouristAttraction
Schema name: product_touristattraction
Entity type: TouristAttraction
Dùng cho: Trang chi tiết điểm tham quan, địa danh du lịch, khu vui chơi.
Các trường bắt buộc
| Field | Type | Validation rule | Mô tả |
|---|
@type | "TouristAttraction" | — | Cố định |
identifier | string | pattern | Business key |
name | string | no_pii_phone, no_pii_email | Tên điểm tham quan |
description | string | object | no_pii_phone, no_pii_email | Mô tả |
image | string (URI) | string[] | url_connection | Ảnh |
sameAs | string (URI) | deep_link_format | Deep link |
Các trường tùy chọn quan trọng
| Field | Type | Mô tả |
|---|
category | string | Loại điểm tham quan |
address | PostalAddress | Địa chỉ |
geo | GeoCoordinates | Tọa độ GPS |
offers | Offer | AggregateOffer | Giá vé vào cửa |
amenityFeature | LocationFeatureSpecification[] | Tiện ích |
aggregateRating | object | Điểm đánh giá |
additionalProperty | PropertyValue[] | Thuộc tính mở rộng |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "VinWonders Attraction Feed",
"feed_version": "1.0",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "DataFeedItem",
"dateModified": "2026-04-23T10:00:00Z",
"item": {
"@type": "TouristAttraction",
"identifier": "ATTR-VW-PHUQUOC-001",
"name": "VinWonders Phú Quốc",
"description": "Công viên giải trí hàng đầu Đông Nam Á tại đảo ngọc Phú Quốc, với chuỗi trò chơi thế giới và công viên nước.",
"image": "https://cdn.example.vn/attractions/vinwonders-phuquoc.jpg",
"url": "https://vinwonders.com/phu-quoc",
"sameAs": "vapp://miniapp/vinwonders/attraction/ATTR-VW-PHUQUOC-001",
"category": "Theme Park",
"address": {
"@type": "PostalAddress",
"streetAddress": "Bãi Dài, Gành Dầu",
"addressLocality": "Phú Quốc",
"addressRegion": "Kiên Giang",
"addressCountry": "VN"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 10.3745,
"longitude": 103.8413
},
"offers": {
"@type": "Offer",
"price": 900000,
"priceCurrency": "VND",
"unitText": "vé/người",
"availability": "InStock"
},
"amenityFeature": [
{ "@type": "LocationFeatureSpecification", "name": "Bãi đỗ xe", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Nhà hàng", "value": true }
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.5,
"ratingCount": 5420
}
}
}
]
}
12. GolfCourse
Schema name: product_golf
Entity type: GolfCourse
Dùng cho: Trang chi tiết sân golf.
Các trường bắt buộc
| Field | Type | Validation rule | Mô tả |
|---|
@type | "GolfCourse" | — | Cố định |
identifier | string | pattern | Business key |
name | string | no_pii_phone, no_pii_email | Tên sân golf |
description | string | object | no_pii_phone, no_pii_email | Mô tả |
image | string (URI) | string[] | url_connection | Ảnh sân |
sameAs | string (URI) | deep_link_format | Deep link |
Các trường tùy chọn quan trọng
| Field | Type | Mô tả |
|---|
address | PostalAddress | Địa chỉ sân |
geo | GeoCoordinates | Tọa độ GPS |
amenityFeature | LocationFeatureSpecification[] | Tiện ích (câu lạc bộ, driving range, ...) |
offers | Offer | AggregateOffer | Giá green fee |
aggregateRating | object | Điểm đánh giá |
additionalProperty | PropertyValue[] | Thông số sân (số hố, par, ...) |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "Vinpearl Golf Feed",
"feed_version": "1.0",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "DataFeedItem",
"dateModified": "2026-04-23T10:00:00Z",
"item": {
"@type": "GolfCourse",
"identifier": "GOLF-VP-NHATRANG",
"name": "Vinpearl Golf Nha Trang",
"description": "Sân golf 18 hố đẳng cấp quốc tế ven biển Nha Trang, thiết kế bởi IMG.",
"image": "https://cdn.example.vn/golf/vinpearl-nhatrang.jpg",
"url": "https://vinpearlgolf.com/nha-trang",
"sameAs": "vapp://miniapp/golf/course/GOLF-VP-NHATRANG",
"address": {
"@type": "PostalAddress",
"streetAddress": "Đảo Hòn Tre",
"addressLocality": "Nha Trang",
"addressRegion": "Khánh Hòa",
"addressCountry": "VN"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 12.2082,
"longitude": 109.2603
},
"amenityFeature": [
{ "@type": "LocationFeatureSpecification", "name": "Driving Range", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Clubhouse", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Caddie Service", "value": true }
],
"offers": {
"@type": "AggregateOffer",
"lowPrice": 2500000,
"highPrice": 4500000,
"priceCurrency": "VND",
"unitText": "lượt chơi"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.6,
"ratingCount": 892
},
"additionalProperty": [
{ "@type": "PropertyValue", "name": "holes", "value": 18 },
{ "@type": "PropertyValue", "name": "par", "value": 72 },
{ "@type": "PropertyValue", "name": "lengthYards", "value": 6850 }
]
}
}
]
}
13. Flight
Schema name: product_flight
Entity type: Flight
Dùng cho: Trang chi tiết chuyến bay / vé máy bay.
Các trường bắt buộc
| Field | Type | Validation rule | Mô tả |
|---|
@type | "Flight" | — | Cố định |
identifier | string | pattern | Business key |
name | string | no_pii_phone, no_pii_email | Tên chuyến bay |
description | string | no_pii_phone, no_pii_email | Mô tả chuyến bay |
image | string (URI) | string[] | — | Ảnh đại diện hãng / chuyến bay |
sameAs | string (URI) | deep_link_format | Deep link |
flightNumber | string | — | Số hiệu chuyến bay (ví dụ: "VN123") |
airline | object | — | { "@type": "Airline", "name": "...", "iataCode": "..." } |
departureAirport | object | — | { "@type": "Airport", "name": "...", "iataCode": "..." } |
arrivalAirport | object | — | { "@type": "Airport", "name": "...", "iataCode": "..." } |
departureTime | string (ISO-8601) | — | Thời gian khởi hành |
arrivalTime | string (ISO-8601) | — | Thời gian đến |
Các trường tùy chọn quan trọng
| Field | Type | Mô tả |
|---|
duration | string (ISO 8601 duration) | Thời gian bay (ví dụ: "PT2H30M") |
offers | Offer | AggregateOffer | Giá vé |
aggregateRating | object | Điểm đánh giá hãng bay |
additionalProperty | PropertyValue[] | Thông tin bổ sung (hạng vé, hành lý, ...) |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "DataFeedItem",
"dateModified": "2026-04-23T10:00:00Z",
"item": {
"@type": "Flight",
"identifier": "VN123-20260501-HAN-SGN",
"name": "Vietnam Airlines VN123 — Hà Nội → TP. HCM",
"description": "Chuyến bay thẳng Vietnam Airlines từ Nội Bài đến Tân Sơn Nhất, hạng phổ thông.",
"image": "https://cdn.example.vn/airlines/vietnam-airlines-logo.png",
"url": "https://travel.example.vn/flight/VN123-20260501",
"sameAs": "vapp://miniapp/flight/VN123-20260501-HAN-SGN",
"flightNumber": "VN123",
"airline": {
"@type": "Airline",
"name": "Vietnam Airlines",
"iataCode": "VN"
},
"departureAirport": {
"@type": "Airport",
"name": "Sân bay Quốc tế Nội Bài",
"iataCode": "HAN"
},
"arrivalAirport": {
"@type": "Airport",
"name": "Sân bay Quốc tế Tân Sơn Nhất",
"iataCode": "SGN"
},
"departureTime": "2026-05-01T06:00:00+07:00",
"arrivalTime": "2026-05-01T08:05:00+07:00",
"duration": "PT2H5M",
"offers": {
"@type": "AggregateOffer",
"lowPrice": 890000,
"highPrice": 2500000,
"priceCurrency": "VND",
"availability": "InStock"
},
"additionalProperty": [
{ "@type": "PropertyValue", "name": "cabin_class", "value": "Economy" },
{ "@type": "PropertyValue", "name": "baggage_kg", "value": 23 }
]
}
}
]
}
14. TrainTrip
Schema name: product_train
Entity type: TrainTrip
Dùng cho: Trang chi tiết chuyến tàu / vé tàu hỏa.
Các trường bắt buộc
| Field | Type | Validation rule | Mô tả |
|---|
@type | "TrainTrip" | — | Cố định |
identifier | string | — | Business key |
name | string | no_pii_phone, no_pii_email | Tên chuyến tàu |
description | string | object | no_pii_phone, no_pii_email | Mô tả |
image | string (URI) | string[] | url_connection | Ảnh |
sameAs | string (URI) | deep_link_format | Deep link |
trainNumber | string | — | Số hiệu tàu (ví dụ: "SE1") |
departureStation | object | — | { "name": "..." } — ga đi |
arrivalStation | object | — | { "name": "..." } — ga đến |
departureTime | string (ISO-8601) | — | Giờ khởi hành |
arrivalTime | string (ISO-8601) | — | Giờ đến |
Các trường tùy chọn quan trọng
| Field | Type | Mô tả |
|---|
provider | object | Đơn vị vận hành ({ "@type": "Organization", "name": "..." }) |
duration | string | Thời gian di chuyển |
offers | Offer | AggregateOffer | Giá vé |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "Train Ticket Feed",
"feed_version": "1.0",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "DataFeedItem",
"dateModified": "2026-04-23T10:00:00Z",
"item": {
"@type": "TrainTrip",
"identifier": "SE1-20260501-HAN-SGN",
"name": "Tàu SE1 — Hà Nội → TP. HCM",
"description": "Chuyến tàu thống nhất SE1 từ ga Hà Nội đến ga Sài Gòn, toa giường nằm điều hòa.",
"image": "https://cdn.example.vn/trains/se1-banner.jpg",
"url": "https://dsvn.example.vn/train/SE1-20260501",
"sameAs": "vapp://miniapp/train/SE1-20260501-HAN-SGN",
"trainNumber": "SE1",
"provider": {
"@type": "Organization",
"name": "Tổng Công ty Đường sắt Việt Nam"
},
"departureStation": {
"@type": "TrainStation",
"name": "Ga Hà Nội",
"identifier": "HAN"
},
"arrivalStation": {
"@type": "TrainStation",
"name": "Ga Sài Gòn",
"identifier": "SGN"
},
"departureTime": "2026-05-01T20:00:00+07:00",
"arrivalTime": "2026-05-02T18:30:00+07:00",
"duration": "PT22H30M",
"offers": {
"@type": "AggregateOffer",
"lowPrice": 550000,
"highPrice": 1200000,
"priceCurrency": "VND",
"availability": "InStock"
}
}
}
]
}
15. DLKS Hotel
Schema name: product_dlks_hotel
Entity type: LodgingBusiness
Dùng cho: Khách sạn / resort dành riêng cho đối tác DLKS (Dịch lưu ký số). Yêu cầu url và offers bắt buộc (khác với product_hotel).
Các trường bắt buộc
| Field | Type | Validation rule | Mô tả |
|---|
@type | "LodgingBusiness" | — | Cố định |
identifier | string | — | Business key |
name | string | no_pii_phone, no_pii_email | Tên khách sạn |
description | string | no_pii_phone, no_pii_email | Mô tả |
image | string (URI) | string[] | url_connection | Ảnh |
url | string (URI) | — | URL trang web |
sameAs | string (URI) | — | Deep link |
offers | AggregateOffer | — | lowPrice + priceCurrency bắt buộc |
Các trường tùy chọn quan trọng
| Field | Type | Mô tả |
|---|
@id | string (URI) | URI định danh |
address | PostalAddress | Địa chỉ |
geo | GeoCoordinates | Tọa độ GPS |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "DLKS Hotel Feed",
"feed_version": "1.0",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "DataFeedItem",
"dateModified": "2026-04-23T10:00:00Z",
"item": {
"@type": "LodgingBusiness",
"@id": "https://dlks.example.vn/hotel/vinpearl-resort-nhatrang",
"identifier": "DLKS-HOTEL-VP-NT",
"name": "Vinpearl Resort & Spa Nha Trang",
"description": "Khu nghỉ dưỡng 5 sao trên đảo Hòn Tre, bãi biển riêng, công viên nước, nhà hàng đa ẩm thực.",
"image": [
"https://cdn.example.vn/hotel/vp-nhatrang-01.jpg",
"https://cdn.example.vn/hotel/vp-nhatrang-02.jpg"
],
"url": "https://vinpearl.com/resort-nha-trang",
"sameAs": "vapp://miniapp/dlks/hotel/DLKS-HOTEL-VP-NT",
"offers": {
"@type": "AggregateOffer",
"lowPrice": 3692558,
"highPrice": 12000000,
"priceCurrency": "VND",
"availability": "InStock"
},
"address": {
"@type": "PostalAddress",
"streetAddress": "Đảo Hòn Tre",
"addressLocality": "Nha Trang",
"addressRegion": "Khánh Hòa",
"addressCountry": "VN"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 12.2085,
"longitude": 109.2607
}
}
}
]
}
16. DLKS Golf Club
Schema name: product_dlks_golf_club
Entity type: GolfClub
Dùng cho: Câu lạc bộ golf dành cho đối tác DLKS. Yêu cầu @id và url bắt buộc (khác với product_golf).
Các trường bắt buộc
| Field | Type | Validation rule | Mô tả |
|---|
@type | "GolfClub" | — | Cố định |
@id | string (URI) | — | URI định danh (bắt buộc) |
identifier | string | pattern | Business key |
name | string | no_pii_phone, no_pii_email | Tên câu lạc bộ |
description | string | no_pii_phone, no_pii_email | Mô tả |
image | string (URI) | string[] | url_connection | Ảnh |
url | string (URI) | — | URL trang web |
sameAs | string (URI) | — | Deep link |
Các trường tùy chọn quan trọng
| Field | Type | Mô tả |
|---|
address | PostalAddress | Địa chỉ câu lạc bộ |
geo | GeoCoordinates | Tọa độ (bắt buộc có latitude + longitude) |
amenityFeature | LocationFeatureSpecification[] | Tiện ích ({ "@type": "LocationFeatureSpecification", "name": "...", "value": ... }) |
additionalProperty | PropertyValue[] | Thông số sân: holes, par, lengthYards, yearBuilt... |
telephone | string | null | Số điện thoại |
email | string | null | Email liên hệ |
openTime | string | null | Giờ mở cửa |
closeTime | string | null | Giờ đóng cửa |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "DLKS Golf Club Feed",
"feed_version": "1.0",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "DataFeedItem",
"dateModified": "2026-04-23T10:00:00Z",
"item": {
"@type": "GolfClub",
"@id": "https://dlks.example.vn/golf-club/vinpearl-golf-nt",
"identifier": "DLKS-GC-VP-NT",
"name": "Vinpearl Golf Nha Trang",
"description": "Câu lạc bộ golf 18 hố ven biển đẳng cấp quốc tế, thiết kế bởi IMG, view toàn vịnh Nha Trang.",
"image": "https://cdn.example.vn/golf/vp-nt-clubhouse.jpg",
"url": "https://vinpearlgolf.com/nha-trang",
"sameAs": "vapp://miniapp/dlks/golf/DLKS-GC-VP-NT",
"address": {
"@type": "PostalAddress",
"streetAddress": "Đảo Hòn Tre",
"addressLocality": "Nha Trang",
"addressRegion": "Khánh Hòa",
"addressCountry": "VN"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 12.2082,
"longitude": 109.2603
},
"amenityFeature": [
{ "@type": "LocationFeatureSpecification", "name": "Driving Range", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Pro Shop", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Restaurant", "value": true }
],
"additionalProperty": [
{ "@type": "PropertyValue", "name": "holes", "value": 18 },
{ "@type": "PropertyValue", "name": "par", "value": 72 },
{ "@type": "PropertyValue", "name": "lengthYards", "value": 6800 },
{ "@type": "PropertyValue", "name": "yearBuilt", "value": 2012 }
],
"telephone": "+84-258-3590-777",
"openTime": "05:30",
"closeTime": "18:30"
}
}
]
}
17. DLKS Ticket
Schema name: product_dlks_ticket
Entity type: Product
Dùng cho: Vé tham quan, vé giải trí dành cho đối tác DLKS.
startDate / endDate dùng định dạng mảng số [year, month, day] — khác với ISO-8601. Ví dụ: [2026, 5, 1] = ngày 01/05/2026.
Các trường bắt buộc
| Field | Type | Validation rule | Mô tả |
|---|
@type | "Product" | — | Cố định |
identifier | string | — | Business key |
name | string | no_pii_phone, no_pii_email | Tên vé |
url | string (URI) | url_connection | URL trang vé |
sameAs | string (URI) | — | Deep link |
category | string | — | Loại vé |
image | string (URI) | string[] | url_connection | Ảnh vé |
Các trường tùy chọn quan trọng
| Field | Type | Mô tả |
|---|
description | string | null | Mô tả vé |
isActive | boolean | Vé còn hiệu lực không |
supplierName | string | Tên nhà cung cấp |
startDate | number[3] | Ngày bắt đầu: [year, month, day] |
endDate | number[3] | Ngày kết thúc: [year, month, day] |
offers | AggregateOffer | lowPrice + priceCurrency bắt buộc |
address | PostalAddress | Địa điểm sử dụng vé |
geo | GeoCoordinates | Tọa độ GPS |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "DLKS Ticket Feed",
"feed_version": "1.0",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "DataFeedItem",
"dateModified": "2026-04-23T10:00:00Z",
"item": {
"@type": "Product",
"identifier": "DLKS-TKT-VW-PQ-ADULT",
"name": "Vé người lớn — VinWonders Phú Quốc",
"description": "Vé vào cửa công viên giải trí VinWonders Phú Quốc dành cho người lớn, bao gồm tất cả trò chơi.",
"url": "https://vinwonders.com/ticket/phu-quoc-adult",
"sameAs": "vapp://miniapp/dlks/ticket/DLKS-TKT-VW-PQ-ADULT",
"category": "Theme Park",
"image": "https://cdn.example.vn/tickets/vinwonders-phuquoc-adult.jpg",
"isActive": true,
"supplierName": "VinWonders Phú Quốc",
"startDate": [2026, 1, 1],
"endDate": [2026, 12, 31],
"offers": {
"@type": "AggregateOffer",
"lowPrice": 900000,
"highPrice": 900000,
"priceCurrency": "VND",
"availability": "InStock"
},
"address": {
"@type": "PostalAddress",
"streetAddress": "Bãi Dài, Gành Dầu",
"addressLocality": "Phú Quốc",
"addressRegion": "Kiên Giang",
"addressCountry": "VN"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 10.3745,
"longitude": 103.8413
}
}
}
]
}
18. VTicket
Schema name: vticket
Entity type: VTicket
Dùng cho: Vé sự kiện, concert, triển lãm trong hệ thống VTicket.
Lưu ý: Schema vticket dùng additionalProperties: false trên item — không được thêm trường ngoài spec. Trường availability phải dùng URI đầy đủ ("https://schema.org/InStock", không viết tắt "InStock").
Các trường bắt buộc
| Field | Type | Validation rule | Mô tả |
|---|
@type | "VTicket" | — | Cố định |
identifier | string | pattern | Business key |
name | string | — | Tên sự kiện |
description | string | — | Mô tả sự kiện |
image | string (URI) | string[] | url_connection | Ảnh sự kiện |
sameAs | string (URI) | deep_link_format | Deep link |
offers | AggregateOffer | — | lowPrice + highPrice + priceCurrency bắt buộc |
address | PostalAddress | — | addressLocality + addressRegion + addressCountry bắt buộc |
Các trường tùy chọn
| Field | Type | Mô tả |
|---|
@id | string (URI) | URI định danh |
url | string (URI) | URL trang web |
category | string | Loại sự kiện |
additionalProperty | PropertyValue[] | Thuộc tính mở rộng |
availability trong AggregateOffer — giá trị hợp lệ:
| Giá trị | Ý nghĩa |
|---|
"https://schema.org/InStock" | Còn vé |
"https://schema.org/OutOfStock" | Hết vé |
"https://schema.org/SoldOut" | Đã bán hết |
"https://schema.org/PreOrder" | Đặt trước |
"https://schema.org/LimitedAvailability" | Còn ít vé |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "VTicket Event Feed",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "DataFeedItem",
"dateModified": "2026-04-23T10:00:00Z",
"item": {
"@type": "VTicket",
"@id": "https://vticket.example.vn/events/VTKT-CONCERT-2026-001",
"identifier": "VTKT-CONCERT-2026-001",
"name": "Đêm nhạc Mỹ Tâm — 25 năm một chặng đường",
"description": "Đêm nhạc đặc biệt kỷ niệm 25 năm ca hát của Mỹ Tâm tại Nhà hát Hòa Bình TP. HCM.",
"image": [
"https://cdn.example.vn/events/mytam-concert-2026.jpg"
],
"url": "https://vticket.example.vn/events/mytam-25-nam",
"sameAs": "vapp://miniapp/vticket/event/VTKT-CONCERT-2026-001",
"category": "Concert",
"offers": {
"@type": "AggregateOffer",
"lowPrice": 800000,
"highPrice": 3500000,
"priceCurrency": "VND",
"availability": "https://schema.org/LimitedAvailability",
"priceValidUntil": "2026-05-30T23:59:59Z"
},
"address": {
"@type": "PostalAddress",
"streetAddress": "180 Hoàng Văn Thụ, Phường 9",
"addressLocality": "TP. HCM",
"addressRegion": "Hồ Chí Minh",
"addressCountry": "VN"
},
"additionalProperty": [
{ "@type": "PropertyValue", "name": "event_date", "value": "2026-05-30" },
{ "@type": "PropertyValue", "name": "venue_capacity", "value": 3000 }
]
}
}
]
}
19. Generic Product
Schema name: generic_product
Entity type: Product
Dùng cho: Schema thu thập dữ liệu từ crawler. Cấu trúc tự do — chỉ yêu cầu @type: "Product".
Schema generic_product dùng additionalProperties: true và không bao gồc wrapper DataFeedItem. Mỗi phần tử trong dataFeedElement là trực tiếp một Product object.
Cấu trúc tối giản
Mỗi item trong dataFeedElement:
| Field | Bắt buộc | Mô tả |
|---|
@type | ✔ | Phải là "Product" |
| Mọi trường khác | ✘ | Tùy ý — crawler tự định nghĩa |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "Crawler Product Feed",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "Product",
"identifier": "crawler-product-001",
"name": "Điện thoại Samsung Galaxy A55",
"description": "Màn hình Super AMOLED 6.6 inch, camera 50MP, pin 5000mAh.",
"image": "https://cdn.example.vn/crawler/samsung-a55.jpg",
"url": "https://shop.example.vn/samsung-a55",
"sameAs": "vapp://miniapp/shop/product/crawler-product-001",
"price": 9990000,
"priceCurrency": "VND",
"brand": "Samsung",
"category": "Điện thoại"
}
]
}
20. Generic Event (crawler)
Schema name: generic_event
Entity type: Event
Dùng cho: Schema thu thập sự kiện từ crawler. Cấu trúc tự do — chỉ yêu cầu @type: "Event".
Tương tự generic_product — không có wrapper DataFeedItem. Mỗi phần tử trong dataFeedElement là trực tiếp một Event object.
Cấu trúc tối giản
| Field | Bắt buộc | Mô tả |
|---|
@type | ✔ | Phải là "Event" |
| Mọi trường khác | ✘ | Tùy ý |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "Crawler Event Feed",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "Event",
"identifier": "crawler-event-001",
"name": "Lễ hội Ánh sáng Hà Nội 2026",
"description": "Festival ánh sáng và âm nhạc quốc tế tại Hồ Hoàn Kiếm.",
"image": "https://cdn.example.vn/crawler/light-festival-2026.jpg",
"url": "https://events.example.vn/light-festival-2026",
"sameAs": "vapp://miniapp/events/crawler-event-001",
"startDate": "2026-09-05T18:00:00+07:00",
"endDate": "2026-09-10T22:00:00+07:00",
"location": {
"@type": "Place",
"name": "Hồ Hoàn Kiếm, Hà Nội"
},
"offers": {
"@type": "Offer",
"price": 0,
"priceCurrency": "VND",
"availability": "InStock"
}
}
]
}
21. Generic JSON-LD (crawler)
Schema name: generic_json_ld
Entity type: Không giới hạn
Dùng cho: Dữ liệu JSON-LD tự do từ crawler — hỗ trợ mọi entity type. Dùng khi không có schema cụ thể phù hợp.
Đây là schema mở nhất: chỉ yêu cầu @type và identifier trên mỗi item. Không dùng wrapper DataFeedItem.
Cấu trúc tối giản
| Field | Bắt buộc | Mô tả |
|---|
@type | ✔ | Bất kỳ entity type nào |
identifier | ✔ | Business key (minLength: 1) |
| Mọi trường khác | ✘ | Tùy ý |
Ví dụ payload
{
"@context": "https://schema.org",
"@type": "DataFeed",
"name": "Generic JSON-LD Feed",
"inLanguage": "vi-VN",
"dateModified": "2026-04-23T10:00:00Z",
"dataFeedElement": [
{
"@type": "Restaurant",
"identifier": "rest-pho-bat-dan-001",
"name": "Phở Bát Đàn",
"description": "Quán phở nổi tiếng Hà Nội, hoạt động từ 1955.",
"image": "https://cdn.example.vn/crawler/pho-bat-dan.jpg",
"url": "https://food.example.vn/pho-bat-dan",
"sameAs": "vapp://miniapp/food/rest-pho-bat-dan-001",
"servesCuisine": "Vietnamese",
"priceRange": "50,000 – 80,000 VND",
"address": {
"@type": "PostalAddress",
"streetAddress": "49 Bát Đàn",
"addressLocality": "Hà Nội",
"addressCountry": "VN"
}
}
]
}
Các object dùng chung
Offer object
{
"@type": "Offer",
"price": 500000,
"priceCurrency": "VND",
"unitText": "vé",
"availability": "InStock",
"priceValidUntil": "2026-12-31T23:59:59Z",
"url": "https://example.vn/buy",
"priceSpecification": [
{
"@type": "PriceSpecification",
"price": 400000,
"priceCurrency": "VND",
"priceType": "EarlyBird"
}
],
"inventoryLevel": {
"@type": "QuantitativeValue",
"value": 100,
"unitText": "tickets"
}
}
availability enum:
| Giá trị | Ý nghĩa |
|---|
InStock | Còn hàng / còn vé |
OutOfStock | Hết hàng |
SoldOut | Đã bán hết |
PreOrder | Đặt trước |
LimitedAvailability | Còn ít |
Discontinued | Ngừng kinh doanh |
AggregateOffer object (dùng cho khoảng giá)
{
"@type": "AggregateOffer",
"lowPrice": 1500000,
"highPrice": 5000000,
"priceCurrency": "VND",
"availability": "InStock",
"priceValidUntil": "2026-12-31T23:59:59Z"
}
PostalAddress object
{
"@type": "PostalAddress",
"streetAddress": "20 Láng Hạ",
"addressLocality": "Đống Đa",
"addressRegion": "Hà Nội",
"addressCountry": "VN"
}
GeoCoordinates object
{
"@type": "GeoCoordinates",
"latitude": 21.0278,
"longitude": 105.8342
}
Place object (dùng cho Event.location)
{
"@type": "Place",
"name": "Sân vận động Mỹ Đình",
"address": {
"@type": "PostalAddress",
"streetAddress": "Đường Lê Đức Thọ",
"addressLocality": "Hà Nội",
"addressRegion": "Hà Nội",
"addressCountry": "VN"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 21.0163,
"longitude": 105.7644
}
}
additionalProperty — Thuộc tính mở rộng
Dùng để truyền các thuộc tính đặc thù không có trong Schema.org chuẩn:
"additionalProperty": [
{ "@type": "PropertyValue", "name": "material", "value": "Cotton 100%" },
{ "@type": "PropertyValue", "name": "color", "value": "Đen" },
{ "@type": "PropertyValue", "name": "weight_kg", "value": 0.2 }
]
Validation Rules
Một số trường được kiểm tra thêm bởi semantic rules (ngoài JSON Schema Draft-7):
| Rule | Áp dụng cho | Mô tả |
|---|
no_pii_phone | name, description | Không được chứa số điện thoại |
no_pii_email | name, description | Không được chứa địa chỉ email |
non_negative_number | price, lowPrice, highPrice | Giá trị phải ≥ 0 |
url_connection | image | URL ảnh phải truy cập được |
deep_link_format | sameAs | Phải là URI hợp lệ (deep link hoặc HTTPS) |
Danh sách schema có sẵn
| # | Schema name | Entity type | Dùng cho |
|---|
| 1 | product_ecom | Product | E-commerce, thương mại điện tử |
| 2 | product_ecom_merchant | Product | Merchant product (có thông tin merchant + seller) |
| 3 | product_hotel | LodgingBusiness | Khách sạn, resort, villa |
| 4 | product_room | HotelRoom | Phòng khách sạn / căn hộ |
| 5 | product_tourtrip | TouristTrip | Tour du lịch trọn gói |
| 6 | product_touristattraction | TouristAttraction | Điểm tham quan, vui chơi giải trí |
| 7 | product_golf | GolfCourse | Sân golf |
| 8 | product_flight | Flight | Vé máy bay |
| 9 | product_train | TrainTrip | Vé tàu hỏa |
| 10 | product_dlks_hotel | LodgingBusiness | Khách sạn DLKS (partner-specific) |
| 11 | product_dlks_golf_club | GolfClub | Sân golf DLKS (partner-specific) |
| 12 | product_dlks_ticket | Product | Vé DLKS (partner-specific) |
| 13 | event | Event | Sự kiện, concert, triển lãm, workshop |
| 14 | offer | Offer | Voucher, mã ưu đãi, deal |
| 15 | course | Course | Khóa học, chương trình đào tạo |
| 16 | service | Service | Dịch vụ (vệ sinh, sửa chữa, chăm sóc sức khỏe...) |
| 17 | vticket | VTicket | Vé sự kiện V-Ticket |
| 18 | generic_product | Product | Product dạng tự do (minimal validation) |
| 19 | generic_event | Event | Event dạng tự do (minimal validation) |
| 20 | generic_news_article | NewsArticle | Bài báo, tin tức (minimal validation) |
| 21 | generic_json_ld | any | JSON-LD tự do, không ràng buộc entity type |