Chuyển tới nội dung chính

Khai báo dữ liệu

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 patternEntity Type
product/123Product
event/456Event
hotel/789LodgingBusiness
voucher/abcOffer
course/xyzCourse

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 fieldSearch index fieldMô tả
item.nametitleTên hiển thị trong kết quả tìm kiếm
item.descriptiondescriptionMô tả rút gọn
item.offers.pricepriceGiá để filter/sort
item.geogeo_locationTọa độ để tìm kiếm theo vị trí
item.sameAsdeeplinkDeep link vào Mini App
item.imagethumbnailẢnh hiển thị trong kết quả
item.categorycategoryPhâ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 trangSchema bắt buộcSchema name gợi ý
Product detailproduct_ecom
Event detailevent
News / Article detailgeneric_news_article
Voucher / Ưu đãi detailoffer
Hotel / Resort detailproduct_hotel
Tour / Trip detailproduct_tourtrip
Course / Khóa học detailcourse
Service detailservice
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

FieldTypeGiá trịGhi chú
@contextstring"https://schema.org"Cố định
@typestring"DataFeed"Cố định
namestringbất kỳTên mô tả feed
feed_versionstring"1.0"Version của feed
inLanguagestring"vi-VN" hoặc "en-US"Ngôn ngữ nội dung
dateModifiedstring (ISO-8601)e.g. "2026-04-23T10:00:00Z"Thời điểm cập nhật feed
dataFeedElementarrayxem bên dướiTối thiểu 1 phần tử

Các trường bắt buộc trong mỗi DataFeedItem

FieldTypeGiá trịGhi chú
@typestring"DataFeedItem"Cố định
dateModifiedstring (ISO-8601)Thời điểm item được cập nhật
itemobjectxem từng schemaNộ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

FieldTypeValidation ruleMô tả
@type"Product"Cố định
identifierstringpattern ^[a-zA-Z0-9][a-zA-Z0-9_-]*$Business key
namestringno_pii_phone, no_pii_emailTên sản phẩm
descriptionstring | objectno_pii_phone, no_pii_emailMô tả sản phẩm
imagestring (URI) | string[]url_connectionURL ảnh sản phẩm
sameAsstring (URI)deep_link_formatDeep link vào trang sản phẩm

Các trường tùy chọn quan trọng

FieldTypeMô tả
skustringSKU của sản phẩm
categorystringDanh mục (ví dụ: "Electronics", "Fashion")
brand.namestringTên thương hiệu
offersOffer | AggregateOfferThông tin giá (xem phần Offer)
aggregateRatingobjectĐiểm đánh giá tổng hợp
urlstring (URI)URL trang web
addressPostalAddressĐịa chỉ (nếu sản phẩm gắn với địa điểm)
geoGeoCoordinatesTọa độ GPS
additionalPropertyPropertyValue[]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

FieldTypeValidation ruleMô tả
@type"Event"Cố định
identifierstringpatternBusiness key
namestringno_pii_phone, no_pii_emailTên sự kiện
descriptionstring | objectno_pii_phone, no_pii_emailMô tả sự kiện
imagestring (URI) | string[]url_connectionẢnh sự kiện
sameAsstring (URI)deep_link_formatDeep link
startDatestring (ISO-8601)Ngày bắt đầu
locationPlaceĐịa điểm tổ chức

Các trường tùy chọn quan trọng

FieldTypeMô tả
endDatestring (ISO-8601)Ngày kết thúc
eventStatusstring"https://schema.org/EventScheduled" | "EventCancelled" | "EventPostponed"
eventAttendanceModestring"https://schema.org/OfflineEventAttendanceMode" | "OnlineEventAttendanceMode"
categorystringPhân loại sự kiện
organizerobjectĐơn vị tổ chức
performerobjectNghệ sĩ/diễn giả
offersOfferGiá vé
aggregateRatingobjectĐ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

FieldTypeValidation ruleMô tả
@type"LodgingBusiness"Cố định
identifierstringpatternBusiness key
namestringno_pii_phone, no_pii_emailTên khách sạn
descriptionstring | objectno_pii_phone, no_pii_emailMô tả
imagestring (URI) | string[]url_connectionẢnh khách sạn
sameAsstring (URI)deep_link_formatDeep link

Các trường tùy chọn quan trọng

FieldTypeMô tả
addressPostalAddressĐịa chỉ
geoGeoCoordinatesTọa độ GPS
starRating.ratingValuenumberSố sao (1–5)
checkinTimestringGiờ nhận phòng (e.g. "14:00:00")
checkoutTimestringGiờ trả phòng (e.g. "12:00:00")
amenityFeatureLocationFeatureSpecification[]Tiện nghi (Hồ bơi, Spa, Ăn sáng...)
offersAggregateOfferKhoảng giá phòng
aggregateRatingobjectĐiểm đánh giá của khách hàng
categorystringLoạ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

FieldTypeValidation ruleMô tả
@type"Offer"Cố định
identifierstringpatternBusiness key
namestringno_pii_phone, no_pii_emailTên voucher
descriptionstring | objectno_pii_phone, no_pii_emailMô tả ưu đãi
imagestring (URI) | string[]url_connectionẢnh banner voucher
sameAsstring (URI)Deep link

Các trường tùy chọn quan trọng

FieldTypeMô tả
availabilitystringTrạng thái: InStock, OutOfStock, SoldOut...
validFromstring (ISO-8601)Ngày bắt đầu hiệu lực
priceValidUntilstring (ISO-8601)Ngày hết hạn
sellerSellerĐơn vị phát hành voucher
categorystringLoại ưu đãi
additionalPropertyPropertyValue[]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

FieldTypeValidation ruleMô tả
@type"Course"Cố định
identifierstringpatternBusiness key
namestringno_pii_phone, no_pii_emailTên khóa học
descriptionstring | objectno_pii_phone, no_pii_emailMô tả khóa học
imagestring (URI) | string[]url_connectionẢnh khóa học
sameAsstring (URI)deep_link_formatDeep link
provider.namestringĐơn vị cung cấp

Các trường tùy chọn quan trọng

FieldTypeMô tả
courseCodestringMã khóa học
educationalLevelstringTrình độ (e.g. "Beginner", "Intermediate")
timeRequiredstringThời lượng (ISO 8601 Duration, e.g. "PT10H")
hasCourseInstanceCourseInstance[]Lịch học cụ thể (ngày, địa điểm, giá)
aggregateRatingobjectĐiểm đánh giá
categorystringChủ đề (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

FieldTypeValidation ruleMô tả
@type"Service"Cố định
identifierstringpatternBusiness key
namestringno_pii_phone, no_pii_emailTên dịch vụ
descriptionstring | objectno_pii_phone, no_pii_emailMô tả dịch vụ
imagestring (URI) | string[]url_connectionẢnh dịch vụ
sameAsstring (URI)deep_link_formatDeep link
provider.namestringĐơn vị cung cấp

Các trường tùy chọn quan trọng

FieldTypeMô tả
serviceLocationServiceLocationĐịa điểm cung cấp dịch vụ
offersOffer | AggregateOfferThông tin giá
aggregateRatingobjectĐiểm đánh giá
categorystringLoại dịch vụ
addressPostalAddressĐịa chỉ
geoGeoCoordinatesTọa độ
additionalPropertyPropertyValue[]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"
}
]
}

8. Product Ecom Merchant — Sản phẩm kênh merchant

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

FieldTypeValidation ruleMô tả
@type"Product Ecom Merchant"Cố định (không dùng "Product")
@idstring (URI)URI định danh toàn cục của item
identifierstringpatternBusiness key
namestringno_pii_phone, no_pii_emailTên sản phẩm
brandobjectThương hiệu ({ "@type": "Brand", "name": "..." })
categorystringDanh mục sản phẩm
pricenumber (≥ 0)non_negative_numberGiá bán (flat, không nằm trong offers)
platformstringNền tảng bán (ví dụ: "vsf", "vapp")
descriptionstring | objectno_pii_phone, no_pii_emailMô tả sản phẩm
imagestring (URI) | string[]url_connectionURL ảnh sản phẩm
urlstring (URI)URL trang web sản phẩm
sameAsstring (URI)deep_link_formatDeep link vào Mini App

Các trường tùy chọn quan trọng

FieldTypeMô tả
tagsstring[]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

FieldTypeValidation ruleMô tả
@type"HotelRoom"Cố định
identifierstringpatternBusiness key
namestringno_pii_phone, no_pii_emailTên loại phòng
descriptionstring | objectno_pii_phone, no_pii_emailMô tả phòng
imagestring (URI) | string[]url_connectionẢnh phòng
sameAsstring (URI)deep_link_formatDeep link

Các trường tùy chọn quan trọng

FieldTypeMô tả
skustringMã phòng nội bộ
isPartOfobjectKhách sạn chứa phòng này ({ "@type": "Hotel", "@id": "..." })
floorSizeobjectDiện tích ({ "@type": "QuantitativeValue", "value": 45, "unitCode": "MTK" })
occupancyobjectSức chứa ({ "@type": "QuantitativeValue", "maxValue": 2 })
bedobject[]Giường ([{ "@type": "BedDetails", "typeOfBed": "King" }])
amenityFeatureLocationFeatureSpecification[]Tiện nghi phòng
offersOffer | AggregateOfferGiá phòng
additionalPropertyPropertyValue[]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

FieldTypeValidation ruleMô tả
@type"TouristTrip"Cố định
identifierstringpatternBusiness key
namestringno_pii_phone, no_pii_emailTên tour
descriptionstring | objectno_pii_phone, no_pii_emailMô tả tour
imagestring (URI) | string[]url_connectionẢnh tour
sameAsstring (URI)deep_link_formatDeep link

Các trường tùy chọn quan trọng

FieldTypeMô tả
categorystringLoại tour (ví dụ: "Adventure", "Cultural")
providerobjectĐơn vị tổ chức tour ({ "@type": "Organization", "name": "..." })
touristTypestring[]Đối tượng khách (["Family", "Solo"])
itineraryobject[]Lịch trình chi tiết theo điểm dừng
offersOffer | AggregateOfferGiá tour
aggregateRatingobjectĐ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

FieldTypeValidation ruleMô tả
@type"TouristAttraction"Cố định
identifierstringpatternBusiness key
namestringno_pii_phone, no_pii_emailTên điểm tham quan
descriptionstring | objectno_pii_phone, no_pii_emailMô tả
imagestring (URI) | string[]url_connectionẢnh
sameAsstring (URI)deep_link_formatDeep link

Các trường tùy chọn quan trọng

FieldTypeMô tả
categorystringLoại điểm tham quan
addressPostalAddressĐịa chỉ
geoGeoCoordinatesTọa độ GPS
offersOffer | AggregateOfferGiá vé vào cửa
amenityFeatureLocationFeatureSpecification[]Tiện ích
aggregateRatingobjectĐiểm đánh giá
additionalPropertyPropertyValue[]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

FieldTypeValidation ruleMô tả
@type"GolfCourse"Cố định
identifierstringpatternBusiness key
namestringno_pii_phone, no_pii_emailTên sân golf
descriptionstring | objectno_pii_phone, no_pii_emailMô tả
imagestring (URI) | string[]url_connectionẢnh sân
sameAsstring (URI)deep_link_formatDeep link

Các trường tùy chọn quan trọng

FieldTypeMô tả
addressPostalAddressĐịa chỉ sân
geoGeoCoordinatesTọa độ GPS
amenityFeatureLocationFeatureSpecification[]Tiện ích (câu lạc bộ, driving range, ...)
offersOffer | AggregateOfferGiá green fee
aggregateRatingobjectĐiểm đánh giá
additionalPropertyPropertyValue[]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

FieldTypeValidation ruleMô tả
@type"Flight"Cố định
identifierstringpatternBusiness key
namestringno_pii_phone, no_pii_emailTên chuyến bay
descriptionstringno_pii_phone, no_pii_emailMô tả chuyến bay
imagestring (URI) | string[]Ảnh đại diện hãng / chuyến bay
sameAsstring (URI)deep_link_formatDeep link
flightNumberstringSố hiệu chuyến bay (ví dụ: "VN123")
airlineobject{ "@type": "Airline", "name": "...", "iataCode": "..." }
departureAirportobject{ "@type": "Airport", "name": "...", "iataCode": "..." }
arrivalAirportobject{ "@type": "Airport", "name": "...", "iataCode": "..." }
departureTimestring (ISO-8601)Thời gian khởi hành
arrivalTimestring (ISO-8601)Thời gian đến

Các trường tùy chọn quan trọng

FieldTypeMô tả
durationstring (ISO 8601 duration)Thời gian bay (ví dụ: "PT2H30M")
offersOffer | AggregateOfferGiá vé
aggregateRatingobjectĐiểm đánh giá hãng bay
additionalPropertyPropertyValue[]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

FieldTypeValidation ruleMô tả
@type"TrainTrip"Cố định
identifierstringBusiness key
namestringno_pii_phone, no_pii_emailTên chuyến tàu
descriptionstring | objectno_pii_phone, no_pii_emailMô tả
imagestring (URI) | string[]url_connectionẢnh
sameAsstring (URI)deep_link_formatDeep link
trainNumberstringSố hiệu tàu (ví dụ: "SE1")
departureStationobject{ "name": "..." } — ga đi
arrivalStationobject{ "name": "..." } — ga đến
departureTimestring (ISO-8601)Giờ khởi hành
arrivalTimestring (ISO-8601)Giờ đến

Các trường tùy chọn quan trọng

FieldTypeMô tả
providerobjectĐơn vị vận hành ({ "@type": "Organization", "name": "..." })
durationstringThời gian di chuyển
offersOffer | AggregateOfferGiá 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 urloffers bắt buộc (khác với product_hotel).

Các trường bắt buộc

FieldTypeValidation ruleMô tả
@type"LodgingBusiness"Cố định
identifierstringBusiness key
namestringno_pii_phone, no_pii_emailTên khách sạn
descriptionstringno_pii_phone, no_pii_emailMô tả
imagestring (URI) | string[]url_connectionẢnh
urlstring (URI)URL trang web
sameAsstring (URI)Deep link
offersAggregateOfferlowPrice + priceCurrency bắt buộc

Các trường tùy chọn quan trọng

FieldTypeMô tả
@idstring (URI)URI định danh
addressPostalAddressĐịa chỉ
geoGeoCoordinatesTọ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 @idurl bắt buộc (khác với product_golf).

Các trường bắt buộc

FieldTypeValidation ruleMô tả
@type"GolfClub"Cố định
@idstring (URI)URI định danh (bắt buộc)
identifierstringpatternBusiness key
namestringno_pii_phone, no_pii_emailTên câu lạc bộ
descriptionstringno_pii_phone, no_pii_emailMô tả
imagestring (URI) | string[]url_connectionẢnh
urlstring (URI)URL trang web
sameAsstring (URI)Deep link

Các trường tùy chọn quan trọng

FieldTypeMô tả
addressPostalAddressĐịa chỉ câu lạc bộ
geoGeoCoordinatesTọa độ (bắt buộc có latitude + longitude)
amenityFeatureLocationFeatureSpecification[]Tiện ích ({ "@type": "LocationFeatureSpecification", "name": "...", "value": ... })
additionalPropertyPropertyValue[]Thông số sân: holes, par, lengthYards, yearBuilt...
telephonestring | nullSố điện thoại
emailstring | nullEmail liên hệ
openTimestring | nullGiờ mở cửa
closeTimestring | nullGiờ đó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

FieldTypeValidation ruleMô tả
@type"Product"Cố định
identifierstringBusiness key
namestringno_pii_phone, no_pii_emailTên vé
urlstring (URI)url_connectionURL trang vé
sameAsstring (URI)Deep link
categorystringLoại vé
imagestring (URI) | string[]url_connectionẢnh vé

Các trường tùy chọn quan trọng

FieldTypeMô tả
descriptionstring | nullMô tả vé
isActivebooleanVé còn hiệu lực không
supplierNamestringTên nhà cung cấp
startDatenumber[3]Ngày bắt đầu: [year, month, day]
endDatenumber[3]Ngày kết thúc: [year, month, day]
offersAggregateOfferlowPrice + priceCurrency bắt buộc
addressPostalAddressĐịa điểm sử dụng vé
geoGeoCoordinatesTọ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

FieldTypeValidation ruleMô tả
@type"VTicket"Cố định
identifierstringpatternBusiness key
namestringTên sự kiện
descriptionstringMô tả sự kiện
imagestring (URI) | string[]url_connectionẢnh sự kiện
sameAsstring (URI)deep_link_formatDeep link
offersAggregateOfferlowPrice + highPrice + priceCurrency bắt buộc
addressPostalAddressaddressLocality + addressRegion + addressCountry bắt buộc

Các trường tùy chọn

FieldTypeMô tả
@idstring (URI)URI định danh
urlstring (URI)URL trang web
categorystringLoại sự kiện
additionalPropertyPropertyValue[]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: truekhô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:

FieldBắt buộcMô tả
@typePhải là "Product"
Mọi trường khácTù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

FieldBắt buộcMô tả
@typePhải là "Event"
Mọi trường khácTù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 @typeidentifier trên mỗi item. Không dùng wrapper DataFeedItem.

Cấu trúc tối giản

FieldBắt buộcMô tả
@typeBất kỳ entity type nào
identifierBusiness key (minLength: 1)
Mọi trường khácTù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
InStockCòn hàng / còn vé
OutOfStockHết hàng
SoldOutĐã bán hết
PreOrderĐặt trước
LimitedAvailabilityCòn ít
DiscontinuedNgừ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 choMô tả
no_pii_phonename, descriptionKhông được chứa số điện thoại
no_pii_emailname, descriptionKhông được chứa địa chỉ email
non_negative_numberprice, lowPrice, highPriceGiá trị phải ≥ 0
url_connectionimageURL ảnh phải truy cập được
deep_link_formatsameAsPhải là URI hợp lệ (deep link hoặc HTTPS)

Danh sách schema có sẵn

#Schema nameEntity typeDùng cho
1product_ecomProductE-commerce, thương mại điện tử
2product_ecom_merchantProductMerchant product (có thông tin merchant + seller)
3product_hotelLodgingBusinessKhách sạn, resort, villa
4product_roomHotelRoomPhòng khách sạn / căn hộ
5product_tourtripTouristTripTour du lịch trọn gói
6product_touristattractionTouristAttractionĐiểm tham quan, vui chơi giải trí
7product_golfGolfCourseSân golf
8product_flightFlightVé máy bay
9product_trainTrainTripVé tàu hỏa
10product_dlks_hotelLodgingBusinessKhách sạn DLKS (partner-specific)
11product_dlks_golf_clubGolfClubSân golf DLKS (partner-specific)
12product_dlks_ticketProductVé DLKS (partner-specific)
13eventEventSự kiện, concert, triển lãm, workshop
14offerOfferVoucher, mã ưu đãi, deal
15courseCourseKhóa học, chương trình đào tạo
16serviceServiceDịch vụ (vệ sinh, sửa chữa, chăm sóc sức khỏe...)
17vticketVTicketVé sự kiện V-Ticket
18generic_productProductProduct dạng tự do (minimal validation)
19generic_eventEventEvent dạng tự do (minimal validation)
20generic_news_articleNewsArticleBài báo, tin tức (minimal validation)
21generic_json_ldanyJSON-LD tự do, không ràng buộc entity type