Nhiệm vụ: Thêm cơ chế trang web
Thêm cơ chế trang web
Hiện tại hệ thống chưa có hệ thống URL web. Định tuyến được xây dựng dựa trên các tệp Next.js. Đồng thời, cần có khả năng tạo URL thân thiện với SEO (ЧПУ).
Ворклоги
Hệ thống URL tùy chỉnh (SiteRoute)
Nhiệm vụ
Triển khai một hệ thống định tuyến linh hoạt cho phép gán các URL tùy ý cho nội dung. Thay vì các đường dẫn kỹ thuật dạng /concepts/clxyz123abc — chuyển thành dạng thân thiện với người dùng /articles/my-first-post.
Quyết định kiến trúc
PhươngApproach định tuyến dự phòng (fallback routing) ở cấp độ Next.js đã được lựa chọn. Tất cả các yêu cầu đến các trang không tồn tại được chặn bởi một điểm vào duy nhất, nơi phân giải đường dẫn thông qua cơ sở dữ liệu.
Tại sao lại chọn cách này:
- Không yêu cầu tái tạo tĩnh (static regeneration) khi thêm các tuyến đường mới
- Cấu trúc phân cấp thông qua
parentId— có thể xây dựng các đường dẫn lồng nhau với mọi độ sâu - Mối quan hệ 1:1 với nội dung giúp loại bỏ trùng lặp và các vấn đề về chuẩn hóa (canonicalization)
Triển khai
Cơ sở dữ liệu — mô hình SiteRoute mới:
path— đường dẫn đầy đủ (chỉ mục duy nhất)slug— phân đoạn đường dẫnparentId— tham chiếu đến phần tử cha để tạo phân cấpkBConceptId— liên kết tới khái niệm cơ sở tri thức- Chỉ mục kết hợp
parentId + slugđảm bảo tính duy nhất của slug trong phạm vi phần tử cha
Next.js — fallback rewrite trong next.config.js chuyển hướng /:path* tới /_fallback/[...path].tsx.
Trình xử lý (Handler) — nhận đường dẫn hiện tại, truy vấn SiteRoute thông qua GraphQL, hiển thị trang tương ứng hoặc trả về lỗi 404.
Trường ảo uri — được thêm vào KBConcept ở cấp độ lược đồ GraphQL. Trả về đường dẫn tùy chỉnh nếu tồn tại SiteRoute, nếu không sẽ trả về đường dẫn tiêu chuẩn /concepts/{id}. Tất cả các thành phần liên kết tự động sử dụng trường này.
Chi tiết kỹ thuật
- GraphQL resolvers:
siteRoute,siteRoutes,createSiteRoute - Các component:
ConceptLink,PostLink,TaskLink,WorkLogLink - Tiêu đề SEO: URL canonical được tạo từ
uri - Tải trước dữ liệu trên máy chủ cho SSR
Kết quả
Engine haih-agent đã nhận được một hệ thống URL chuẩn SEO hoàn chỉnh với hỗ trợ phân cấp, không có giới hạn về cấu trúc URL và tự động tích hợp vào tất cả các component hiện có.