CMS cho blog và trang tin tức: từ biên tập đến xuất bản
Cập nhật lần cuối:

KDIGI CMS phù hợp làm CMS cho blog tin tức khi bạn cần nhiều tác giả, bài hẹn giờ, SEO theo mẫu và dữ liệu có cấu trúc, còn giao diện công khai tự dựng bằng Next.js hoặc Astro. CMS cung cấp trang quản trị và API; collection posts có sẵn ba loại bài blog, news, guide.
Tóm tắt nhanh
- Collection
postsvớitype=blog|news|guide, danh mục/thẻ quataxonomies, bài lưu 30 phiên bản và có thùng rác.- Bốn vai trò: super-admin > admin > editor > author; author không được xuất bản và chỉ sửa bài của mình.
- Hẹn giờ bằng
publishedAtở tương lai; frontend phải tự làm mới cache khi đến giờ.- Mỗi lần lưu sinh JSON-LD
BlogPosting+Person+BreadcrumbListtrongseo.jsonLd.raw.- Bình luận luôn vào hàng chờ
pending; đánh giá sao 1–5 chống trùng theo IP.- Không có giao diện công khai dựng sẵn: bạn cần một frontend riêng.

Bài toán của một tòa soạn nhỏ
Một blog hoặc trang tin nghiêm túc thường cần năm thứ: nhiều người cùng viết với quyền khác nhau, lịch đăng bài, SEO nhất quán trên hàng trăm bài, tín hiệu tác giả đáng tin (E-E-A-T) và khả năng đổi URL mà không mất lượt truy cập. Đây là cách ánh xạ từng nhu cầu vào KDIGI CMS.
Thiết lập đề xuất
- Tạo site và vai trò. Mỗi trang là một document trong Sites; xem quản lý nhiều website. Gán tổng biên tập là
admin, biên tập viên làeditor, cộng tác viên làauthor. Chi tiết quyền ở phân quyền người dùng. - Dựng cây chuyên mục. Trong Taxonomies tạo
categorycó cấp cha–con vàtag. ĐặtSites.breadcrumbs.primaryTaxonomyPost=category(giá trị mặc định) để breadcrumb có chuyên mục. - Tạo hồ sơ Authors. Mỗi người có
name,avatar,bio(đa ngôn ngữ) và danh sáchsameAs[].urltrỏ tới LinkedIn, trang cá nhân, hồ sơ báo chí. - Cấu hình mẫu SEO. Ở
Sites.seoTitles.postsmặc định là%title% %sep% %sitename%cho tiêu đề và%excerpt%cho mô tả; bài nào để trốngseo.titlesẽ dùng mẫu này, đổi mẫu là áp dụng cho mọi bài chưa ghi đè. - Chọn loại bài.
newscho tin theo thời điểm,guidecho bài hướng dẫn dài,blogcho phần còn lại; frontend lọc bằngwhere[type][equals]. - Nối webhook revalidate. Frontend mở
POST /api/cms/revalidate, CMS đặtENABLE_JOBS_AUTORUN=truetrên đúng một instance. Xem Headless API.
Quy trình biên tập
| Bước | Vai trò | Trong CMS |
|---|---|---|
| Viết nháp | author | status = draft, createdBy tự gán; tác giả tự điền khi tạo nếu email trùng hồ sơ Authors |
| Duyệt, sửa SEO | editor | Sửa bài, kiểm điểm SEO audit, gợi ý liên kết nội bộ |
| Xuất bản / hẹn giờ | editor, admin | status = published kèm publishedAt |
| Hoàn tác | editor, admin | History + diff, tối đa 30 phiên bản mỗi bài, thùng rác |
Author bị chặn xuất bản bởi hook enforceAuthorPermissions, kể cả khi khôi phục phiên bản đã đăng. Bảng điều khiển có tiện ích SEO audit và công cụ lịch nội dung; tổng quan về luồng này ở quy trình biên tập.

Viết nhanh bằng Markdown
Thân bài lưu ở contentMd (Markdown, nguồn gốc) và REST trả HTML đã làm sạch ở content. Trình soạn thảo có menu /, thanh công cụ nổi, tìm và thay thế, và gõ @ để chèn liên kết tới bài/trang/sản phẩm/landing cùng site. Dán từ Google Docs hoặc Word được chuyển thành Markdown, ảnh nhúng tự tải lên thư viện. Xem trình soạn thảo Markdown và thư viện media.

SEO và E-E-A-T
- JSON-LD: bài viết sinh
BlogPosting,Person,WebPage,ImageObject,BreadcrumbList,WebSite,Organization. Frontend chèn nguyênseo.jsonLd.raw. Chi tiết ở SEO và JSON-LD. - Tác giả:
Personlấy từ hồ sơ Authors, nênsameAsgiúp công cụ tìm kiếm đối chiếu danh tính tác giả. - FAQ: gắn nhóm FAQ vào bài; câu hỏi thiếu đáp án bị loại, phần còn lại nằm trong
BlogPosting. - Audit và gợi ý nội bộ:
GET /api/seo/auditliệt kê tài liệu yếu nhất; bộ gợi ý liên kết chấm điểm theo trùng khớp từ khóa trong tiêu đề và slug. - AI (tùy chọn): đặt
DEEPSEEK_API_KEYđể có nút sinh tiêu đề, mô tả, FAQ; không đặt thì tính năng tắt.
Tương tác độc giả
Bình luận gửi qua POST /api/comments/create, luôn lưu pending, duyệt thành approved hoặc spam. Đánh giá sao gửi qua POST /api/ratings/submit (1–5), chỉ một lượt mỗi IP mỗi bài, lưu băm SHA-256 của IP. Hai endpoint đều cần frontend của bạn dựng form.
Hiệu năng và đổi URL
Mỗi lần lưu bài, job revalidateFrontend gọi webhook của frontend (thử lại 3 lần). Đổi slug sẽ sinh redirect 301 và làm mới cả slug cũ. Đang dùng WordPress? Pipeline chuyển từ WordPress giữ publishedAt, tác giả, chuyên mục, bình luận, dữ liệu Yoast/RankMath và sinh redirect. So sánh với WordPress ở KDIGI CMS vs WordPress.
Khi nào KHÔNG phù hợp
- Bạn muốn cài là có theme và widget ngay như WordPress: KDIGI CMS không có theme công khai.
- Cần thông báo hẹn giờ chính xác đến giây: bài hiện ở API ngay sau
publishedAt, nhưng cache frontend không được làm mới theo đồng hồ. - Cần quy trình duyệt nhiều bước tùy biến: trạng thái chỉ có
draftvàpublished. - Cần xem lịch sử khi chưa đăng: không dùng Payload
drafts; mỗi lần lưu là một phiên bản. - Cần ràng buộc bình luận chặt bằng reCAPTCHA: điểm thấp chỉ ghi log, việc chặn dựa vào hàng chờ
pending.
Muốn đọc thêm về vận hành nội dung và SEO, xem blog KDIGI CMS.
Thử ngay trên bản demo hoặc tự host bằng Docker Compose.
Câu hỏi thường gặp
KDIGI CMS có hẹn giờ đăng bài không?
Bình luận trên bài viết được kiểm duyệt thế nào?
Hệ thống có tự tạo JSON-LD BlogPosting cho bài viết không?
Đổi slug bài đã đăng có mất thứ hạng không?
Có dán nội dung từ Google Docs hoặc Word được không?
Đọc tiếp
SEO và JSON-LD
Trường SEO, mẫu title kiểu RankMath, đồ thị JSON-LD, ảnh OG dự phòng, kiểm tra SEO, gợi ý internal link và AI SEO tùy chọn ngay trong trình soạn thảo.
Quy trình biên tập
Bảng điều khiển biên tập, lịch nội dung, bản nháp và xuất bản, lịch sử phiên bản có khôi phục, thùng rác. Giúp nhóm nội dung làm việc nhất quán.
Trình soạn thảo Markdown
Soạn bài bằng Markdown với Milkdown: slash menu, dán từ Google Docs/Word, bảng, gallery, shortcode. Nội dung xuất HTML sạch, đúng cấu trúc cho SEO.
Phân quyền người dùng
Bốn vai trò super-admin, admin, editor, author; gán theo từng website; tác giả gửi bài chờ duyệt. Có tài khoản demo để thử ngay không cần cài đặt.