Schema & Structured Data

VideoObject Schema

Schema mô tả video với duration, thumbnailUrl, uploadDate, description và embedUrl.

4 lượt xem Cập nhật: 29/05/2026

VideoObject Schema là gì?

VideoObject Schema là một loại markup cấu trúc (structured data) thuộc chuẩn Schema.org, dùng để mô tả chi tiết về một video trên trang web. Nó giúp công cụ tìm kiếm như Google hiểu rõ nội dung, thời lượng, ngày đăng, hình ảnh đại diện và cách nhúng video — từ đó hiển thị kết quả phong phú hơn trong kết quả tìm kiếm (rich results), ví dụ như thẻ video mở rộng với thumbnail và thời lượng.

Tại sao quan trọng trong SEO?

VideoObject Schema không trực tiếp nâng thứ hạng từ khóa, nhưng có tác động gián tiếp mạnh đến hiệu quả SEO nhờ ba yếu tố chính:

  • Tăng tỷ lệ nhấp (CTR): Khi video xuất hiện dưới dạng rich snippet với thumbnail và thời lượng, người dùng dễ nhận diện và tin tưởng hơn — dẫn đến CTR cao hơn trung bình từ 15–35% (theo dữ liệu kiểm thử của多家 SEO agencies, bao gồm Ahrefs và Search Engine Journal).
  • Hỗ trợ lập chỉ mục nhanh hơn: Google ưu tiên thu thập và xử lý nội dung có structured data rõ ràng, đặc biệt với nội dung đa phương tiện.
  • Mở rộng khả năng xuất hiện: Video được đánh dấu đúng có thể xuất hiện trong tab Video, kết quả tìm kiếm trên thiết bị di động, hoặc thậm chí trong Google Discover — nếu đáp ứng đủ điều kiện về chất lượng và độ liên quan.

Cách hoạt động

VideoObject Schema hoạt động bằng cách thêm đoạn mã JSON-LD (hoặc Microdata/RDFa) vào HTML trang, mô tả các thuộc tính bắt buộc và tùy chọn của video. Khi Googlebot quét trang, nó đọc phần markup này, so sánh với nội dung thực tế (ví dụ: thời lượng video trên trang có khớp với duration không), rồi quyết định có hiển thị rich result hay không.

Quá trình xác thực yêu cầu đồng bộ giữa markup và nội dung hiển thị: nếu uploadDate ghi là 2023-05-10 nhưng video thật sự đăng hôm nay, Google có thể bỏ qua markup hoặc cảnh báo lỗi trong Search Console.

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

Dưới đây là các bước triển khai VideoObject Schema chuẩn xác và an toàn:

  1. Xác định trang chứa video: Chỉ áp dụng cho trang có video gốc (không phải trang tổng hợp hay danh sách). Trang phải có một video duy nhất làm trọng tâm.
  2. Chuẩn bị thông tin bắt buộc:
    • name: Tiêu đề video (tối đa 100 ký tự, trùng với thẻ <h1> hoặc tiêu đề hiển thị)
    • description: Mô tả ngắn (tối thiểu 50 ký tự, không trùng lặp với meta description)
    • thumbnailUrl: URL ảnh đại diện (định dạng JPG/PNG, kích thước tối thiểu 160×90 px, nên dùng ảnh có tỷ lệ 16:9)
    • uploadDate: Ngày đăng đầu tiên dưới dạng ISO 8601 (YYYY-MM-DD hoặc YYYY-MM-DDTHH:MM:SS+HH:MM)
    • duration: Thời lượng theo định dạng ISO 8601 (PT10M30S = 10 phút 30 giây)
    • embedUrl: URL nhúng hợp lệ (phải là iframe từ YouTube, Vimeo hoặc domain của bạn nếu tự host)
  3. Thêm JSON-LD vào <head> hoặc trước </body>: Đây là cách khuyến nghị vì dễ quản lý và ít xung đột với CMS.
  4. Kiểm tra bằng Rich Results Test: Dùng công cụ miễn phí của Google để xác minh không có lỗi nghiêm trọng (error), cảnh báo (warning) cần xử lý (ví dụ: thiếu thumbnailUrl).
  5. Theo dõi trong Search Console: Sau 3–7 ngày, vào mục Enhancements > Video để kiểm tra trạng thái lập chỉ mục và lỗi phát sinh.

Lỗi thường gặp

Dưới đây là những sai sót phổ biến khi triển khai VideoObject Schema và cách khắc phục:

Lỗi Nguồn gốc Cách khắc phục
Thiếu thuộc tính bắt buộc Bỏ sót uploadDate, duration hoặc thumbnailUrl Thêm đầy đủ 6 thuộc tính bắt buộc. Không được thay thế thumbnailUrl bằng image — đây là hai thuộc tính khác nhau.
Giá trị duration sai định dạng Dùng 10:30 thay vì PT10M30S Luôn dùng chuẩn ISO 8601: PT#H#M#S (ví dụ: PT5M, PT1H30M45S). Không dùng dấu phẩy, khoảng trắng hay chữ viết tắt ngoài chuẩn.
embedUrl không truy cập được URL bị chặn bởi robots.txt, trả mã 403/404, hoặc không phải iframe hợp lệ Kiểm tra URL bằng trình duyệt ẩn danh; đảm bảo iframe có thuộc tính allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"allowfullscreen.

Ví dụ thực tế

Dưới đây là đoạn JSON-LD mẫu cho video hướng dẫn nấu phở bò đăng trên blog ẩm thực:

{ "@context": "https://schema.org", "@type": "VideoObject", "name": "Cách nấu phở bò ngon tại nhà trong 45 phút", "description": "Hướng dẫn chi tiết từng bước từ hầm xương, sơ chế thịt đến pha nước dùng đậm đà, phù hợp với người mới bắt đầu.", "thumbnailUrl": ["https://example.com/thumbnails/pho-bo-16x9.jpg"], "uploadDate": "2024-03-12", "duration": "PT22M15S", "embedUrl": "https://www.youtube.com/embed/abc123xyz", "expires": "2025-03-12", "interactionCount": "12480" }

Lưu ý: expiresinteractionCount là thuộc tính tùy chọn. Nếu dùng, giá trị phải chính xác — interactionCount nên lấy từ API nền tảng (YouTube Data API) chứ không tự điền số chung chung.

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

VideoObject Schema có hỗ trợ video tự host không?

Có, nhưng phải đáp ứng đầy đủ điều kiện: embedUrl phải trỏ tới một trang có thẻ <video> hoặc iframe hợp lệ, server cho phép CORS, và video phải phát được trực tiếp (không yêu cầu đăng nhập). Một số trường hợp thành công với MP4 trên Nginx/Apache đã bật header Access-Control-Allow-Origin: *. Tuy nhiên, hiệu quả hiển thị rich result thấp hơn YouTube/Vimeo — tùy trường hợp.

Có thể dùng nhiều VideoObject trên cùng một trang không?

Không khuyến khích. Google chỉ chọn tối đa một VideoObject mỗi trang để hiển thị rich result. Nếu có nhiều video, nên đánh dấu chỉ video chính (có tiêu đề, mô tả và vị trí nổi bật nhất), còn lại để nguyên hoặc dùng ItemList nếu là danh sách.

Schema này có ảnh hưởng đến tốc độ tải trang không?

Không đáng kể. Đoạn JSON-LD thường dưới 2 KB và nằm trong thẻ <script type=\"application/ld+json\">. Nó không chặn render, không gọi tài nguyên ngoài và không ảnh hưởng đến Core Web Vitals — miễn là không đặt sai vị trí (ví dụ: nhúng trong <body> mà không có async hoặc gây reflow).