# Luyện kỹ năng — Sitemap và slug đề xuất (R5)

> **Trạng thái: ĐỀ XUẤT thiết kế, chưa duyệt, chưa triển khai SEO production.** Prototype mô phỏng mỗi danh mục bằng tham số trên `skill-library.html` (`?level=` và `&skill=`); URL dưới đây là URL production đề xuất. Domain `tienghantopik.example` là chỗ giữ chỗ. Title/description/tên danh mục 5 ngôn ngữ do Claude soạn, **chưa có người bản ngữ hay chuyên viên SEO duyệt**.

## 1. Cây trang (3 tầng, tách khỏi silo Thư viện đề)

```
Luyện kỹ năng (hub)                      /vi/luyen-ky-nang/
├─ TOPIK I                               /vi/luyen-ky-nang/topik-i/
│   ├─ Luyện nghe                        /vi/luyen-ky-nang/topik-i/luyen-nghe/
│   └─ Luyện đọc                         /vi/luyen-ky-nang/topik-i/luyen-doc/
└─ TOPIK II                              /vi/luyen-ky-nang/topik-ii/
    ├─ Luyện nghe                        /vi/luyen-ky-nang/topik-ii/luyen-nghe/
    ├─ Luyện đọc                         /vi/luyen-ky-nang/topik-ii/luyen-doc/
    └─ Luyện viết                        /vi/luyen-ky-nang/topik-ii/luyen-viet/
```
- **8 URL × 5 ngôn ngữ = 40 URL**, mỗi URL có hreflang tương hỗ tới 4 URL còn lại và `x-default` → `vi`.
- **Không có trang TOPIK I – Luyện viết** (nhóm menu theo yêu cầu chỉ có Nghe/Đọc cho TOPIK I). Không có luyện nói, từ vựng, ngữ pháp ở vòng này.
- **Không có URL cho “cấp độ mục tiêu” (cấp 1–6) hay “độ khó bộ” (Làm quen / Củng cố / Thử thách):** hai lớp này là bộ lọc trong trang kỹ năng (tham số → `noindex,follow`, canonical sạch).
- **Không có URL cho “mức bài tập”** (Làm quen / Củng cố / Thử thách): đó là bộ lọc trong trang kỹ năng, không tạo trang cấp độ rỗng chỉ để SEO.
- Silo này **tách riêng** khỏi `/thu-vien-de/` (11 URL, R3). Hai silo liên kết với nhau bằng đường dẫn có chủ đích (ô “Luyện kỹ năng khác với Thi thử toàn đề” ở hub; menu), không gộp cây.

## 2. Slug và URL theo ngôn ngữ
| Thành phần | `vi` | `en` / `ko` / `zh-hans` / `th` (dùng chung slug tiếng Anh) |
|---|---|---|
| Tiền tố ngôn ngữ | `/vi/` | `/en/`, `/ko/`, `/zh-hans/`, `/th/` |
| Hub | `luyen-ky-nang` | `skill-practice` |
| Cấp | `topik-i`, `topik-ii` | `topik-i`, `topik-ii` |
| Nghe / Đọc / Viết | `luyen-nghe`, `luyen-doc`, `luyen-viet` | `listening`, `reading`, `writing` |
| Ví dụ | `/vi/luyen-ky-nang/topik-ii/luyen-doc/` | `/en/skill-practice/topik-ii/reading/` |
Mở: dùng slug bản ngữ cho ko/zh/th không (cùng câu hỏi với R3); tên URL “luyen-ky-nang” có bị hiểu lẫn với “cấp 1–6” không (hiện không chứa số).

## 3. Quy tắc
| Chủ đề | Đề xuất |
|---|---|
| Trang được index | Hub, 2 trang cấp, 5 trang kỹ năng **có bộ bài tập đã xuất bản** |
| Danh mục chưa có bộ bài tập | Không liên kết từ menu/trang cha (hiện “Sắp có”), không vào sitemap XML, truy cập trực tiếp trả `noindex,follow` (prototype mô phỏng bằng tình huống “Chưa có bài tập”) |
| Bộ lọc mức bài tập, lịch sử người dùng | Trạng thái trong trang, không đổi URL; nếu dùng tham số thì `noindex,follow`, canonical về URL sạch, không vào sitemap |
| Trang phiên luyện tập (`skill-practice.html?set=…`) | **Không index** (`noindex,nofollow`), không có canonical/hreflang, không vào sitemap; đề xuất URL production không đưa vào liên kết công khai nội dung giải |
| Kết quả/bài làm cá nhân | Không index, yêu cầu quyền truy cập (chưa quyết định) |
| Canonical | Tự trỏ, không tham số, có dấu `/` cuối |
| Breadcrumb | Hiển thị + `BreadcrumbList` JSON-LD: Trang chủ › Luyện kỹ năng › TOPIK II › Luyện đọc |
| Internal links | Hub → 2 cấp → kỹ năng → từng bộ (liên kết “Bắt đầu luyện” tới phiên noindex); menu desktop (mega) và mobile (accordion) tới cấp và kỹ năng; trang chủ (thẻ Luyện kỹ năng) → hub/cấp; footer → hub; mỗi trang kỹ năng liên kết chéo kỹ năng cùng cấp và cấp còn lại |
| Nội dung | Mô tả ngắn thực tế; không nhồi từ khóa; không nêu số bộ/số câu/thời lượng chưa có dữ liệu thật |

## 4. H1 và title (tiếng Việt và tiếng Anh; ko, zh-Hans, th xem `skills.js`)
| Trang | H1 vi | H1 en |
|---|---|---|
| Hub | Luyện kỹ năng TOPIK | TOPIK skill practice |
| TOPIK I / II | Luyện kỹ năng TOPIK I / II | Skill practice for TOPIK I / II |
| Kỹ năng | Luyện nghe TOPIK II (v.v.) | Listening practice for TOPIK II (v.v.) |
Title = H1 + “ — TIENGHANTOPIK”. Mô tả meta: `sd.hub`, `sd.level`, `sd.skill` trong `skills.js`.

## 5. Prototype mô phỏng thế nào (và không mô phỏng gì)
- `skill-library.html?level=ii&skill=read` thay cho trang kỹ năng; `skills.js` ghi lại `<title>`, `meta description`, `robots`, `canonical`, `hreflang`, bảng “SEO (prototype)” ở đầu trang (ẩn khi `bare=1`).
- **Không** có router, sitemap XML, chuyển hướng, SSR, dữ liệu thật hay JSON-LD thật.
