Mục lục bài viết
Khi AI đọc website của bạn, một trong những thứ nó đang tìm là cấu trúc phân cấp. Trang nào là tổng quan? Trang nào là chi tiết? Trang nào thuộc chủ đề gì? BreadcrumbList schema là cách bạn trả lời những câu hỏi này một cách rõ ràng và có cấu trúc.
BreadcrumbList hoạt động như thế nào
BreadcrumbList là danh sách các "nút" dẫn đường từ trang chủ đến trang hiện tại. Nó làm hai việc:
1. Trên Google SERP:
Thay vì URL raw, người dùng thấy chuỗi phân cấp đẹp: example.vn › blog › huong-dan › breadcrumb-schema → CTR tăng.
2. Với AI search:
AI hiểu: bài này thuộc chủ đề "Hướng dẫn", là con của "Blog" — khi trả lời câu hỏi về structured data, đây là nguồn phù hợp để trích dẫn.
JSON-LD BreadcrumbList đầy đủ
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Trang chủ",
"item": "https://example.vn/vi"
},
{
"@type": "ListItem",
"position": 2,
"name": "Blog",
"item": "https://example.vn/vi/blog"
},
{
"@type": "ListItem",
"position": 3,
"name": "Hướng dẫn",
"item": "https://example.vn/vi/blog/huong-dan"
},
{
"@type": "ListItem",
"position": 4,
"name": "BreadcrumbList Schema: Giúp AI và Google Hiểu Cấu Trúc Website"
}
]
}
Lưu ý item cuối không có trường item (URL) — đây là trang hiện tại, không cần link.
Triển khai trong Next.js App Router
// lib/schema/breadcrumb.ts
const siteUrl = process.env.NEXT_PUBLIC_SITE_URL!;
interface BreadcrumbItem {
name: string;
href?: string;
}
export function generateBreadcrumbSchema(
items: BreadcrumbItem[],
locale: string
): object {
return {
"@context": "https://schema.org",
"@type": "BreadcrumbList",
itemListElement: items.map((item, index) => ({
"@type": "ListItem",
position: index + 1,
name: item.name,
...(item.href && {
item: `${siteUrl}/${locale}${item.href}`,
}),
})),
};
}
Breadcrumb cho các loại trang khác nhau
Trang dịch vụ
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Trang chủ", "item": "https://example.vn/vi" },
{ "@type": "ListItem", "position": 2, "name": "Dịch vụ", "item": "https://example.vn/vi/dich-vu" },
{ "@type": "ListItem", "position": 3, "name": "AEO cho E-commerce" }
]
}
Trang sản phẩm (E-commerce)
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Trang chủ", "item": "https://shop.vn" },
{ "@type": "ListItem", "position": 2, "name": "Thời trang", "item": "https://shop.vn/thoi-trang" },
{ "@type": "ListItem", "position": 3, "name": "Áo nam", "item": "https://shop.vn/thoi-trang/ao-nam" },
{ "@type": "ListItem", "position": 4, "name": "Áo polo cotton" }
]
}
SitelinksSearchBox schema
SitelinksSearchBox cho phép Google hiển thị ô tìm kiếm inline khi người dùng tìm kiếm thương hiệu của bạn:
{
"@context": "https://schema.org",
"@type": "WebSite",
"@id": "https://example.vn/#website",
"url": "https://example.vn",
"name": "AEO Saigon",
"potentialAction": {
"@type": "SearchAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://example.vn/tim-kiem?q={search_term_string}"
},
"query-input": "required name=search_term_string"
}
}
Điều kiện để Google kích hoạt Sitelinks Search:
- Website có thanh tìm kiếm hoạt động tốt với kết quả liên quan
- URL search hoạt động đúng với query parameter
- Google đã index đủ nhiều trang (thường cần domain authority tương đối)
Lỗi BreadcrumbList phổ biến
| Lỗi | Mô tả | Cách fix |
|---|---|---|
| URL không khớp cấu trúc | Breadcrumb khai báo path khác URL thực | Đồng bộ breadcrumb items với URL slug |
| Dùng relative URL | /blog thay vì https://example.vn/blog | Luôn dùng absolute URL trong item |
| Item cuối có URL | Trang hiện tại không cần URL | Bỏ trường item cho position cuối |
| Position không liên tục | 1, 2, 4 (bỏ qua 3) | Đảm bảo position tăng liên tục từ 1 |
| Thiếu item đầu tiên | Breadcrumb bắt đầu từ category, bỏ Trang chủ | Luôn có Trang chủ là item đầu tiên |
| i18n bỏ quên locale | URL trong schema không có /vi/ | Thêm locale vào đầu mỗi URL item |
Tác động đến AI search
BreadcrumbList schema ảnh hưởng đến AEO theo cách ít ai nghĩ đến:
- Topical clustering: AI nhận ra
/blog/huong-dan/*là cluster "hướng dẫn kỹ thuật", khác với/blog/kien-thuc/*là cluster "kiến thức lý thuyết". Khi trả lời câu hỏi thực hành, AI ưu tiên/huong-dan/. - Authority flow: AI hiểu rằng trang category (/blog/huong-dan) là "parent authority" của các bài con. Nếu category page có schema tốt và nhiều bài con, category page nhận authority cao hơn từ AI.
- Citation precision: Thay vì trích dẫn "trang web ABC", AI có thể trích dẫn "trong phần Hướng dẫn của ABC" — cụ thể hơn, đáng tin hơn.
BreadcrumbList là một trong những schema dễ triển khai nhất nhưng hay bị bỏ qua. Triển khai đúng trong một buổi, hưởng lợi lâu dài từ cả SEO (rich results) lẫn AEO (AI context).
Câu hỏi thường gặp
BreadcrumbList schema có tác động đến AEO không?
Có — theo hai cách. Thứ nhất, BreadcrumbList giúp AI hiểu phân cấp nội dung: trang /blog/huong-dan/aeo-la-gi là con của /blog/huong-dan, là con của /blog. AI dùng tín hiệu này để xác định parent topic và context khi trích dẫn. Thứ hai, Google hiển thị breadcrumb trong search results thay vì URL xấu — người dùng thấy đường dẫn rõ ràng, CTR tăng. Trang có CTR cao giúp AI nhận tín hiệu relevance mạnh hơn.
Phải khai báo BreadcrumbList ở đâu — trong page hay layout?
Khai báo trong từng page, không phải layout. Mỗi trang có một breadcrumb trail riêng (ví dụ: blog post có 3-4 levels; homepage chỉ có 1 level). Nếu khai báo trong layout, bạn không thể customize per-page. Trong Next.js App Router: tạo hàm generateBreadcrumbSchema() trong mỗi page.tsx, truyền vào generateMetadata hoặc render trực tiếp trong script JSON-LD.
Bao nhiêu levels breadcrumb là đủ?
3-4 levels là lý tưởng. Ví dụ: Trang chủ → Dịch vụ → AEO cho E-commerce → Case Study. Quá ít (1-2 levels) không cung cấp đủ context phân cấp. Quá nhiều (5+ levels) làm URL và structure phức tạp không cần thiết. Nếu site structure flat (chỉ có 2 levels) — vẫn nên khai báo, Google sẽ hiển thị domain và category.
SitelinksSearchBox là gì và có nên dùng không?
SitelinksSearchBox là schema cho phép Google hiển thị ô tìm kiếm ngay trong kết quả tìm kiếm branded. Người dùng có thể tìm kiếm nội dung trong site ngay từ Google SERP. Nên dùng nếu site có thanh tìm kiếm hoạt động tốt. Không bắt buộc — Google có thể tự thêm sitelinks search mà không cần schema.
BreadcrumbList schema và URL structure có cần phải match không?
Có — phải match hoàn toàn. Nếu URL là /blog/huong-dan/aeo-la-gi thì BreadcrumbList phải phản ánh đúng cấu trúc: item 1 = /, item 2 = /blog, item 3 = /blog/huong-dan, item 4 = /blog/huong-dan/aeo-la-gi. Không được khai báo breadcrumb khác với URL thực. Google kiểm tra sự nhất quán này và sẽ ignore nếu có mâu thuẫn.
AEO Saigon
Agency Answer Engine Optimization tại TP. Hồ Chí Minh — giúp website doanh nghiệp được AI trích dẫn. Về AEO Saigon →
Muốn website của bạn được AI trích dẫn như vậy?
Audit miễn phí