Chọn CMS headless cho blog Astro: từ Markdown thuần đến Keystatic và Decap
Một rào cản lớn khi làm blog kỹ thuật: người viết không muốn đụng code, nhưng hệ thống nội dung lại gắn chặt với kho mã nguồn. Bài này so sánh bốn cách quản lý nội dung cho Astro — từ tối giản đến đầy đủ — và cách chọn theo nhu cầu thật.
Markdown thuần + biên tập qua UI
Nội dung sống trong thư mục src/content/blog dưới dạng file .mdx. Với một CMS nhỏ hoặc web UI tự dựng, bạn có thể viết và đăng bài mà không cần chạm code.
---
title: 'Ví dụ bài viết'
description: 'Mô tả ngắn hiển thị trên Google'
pubDate: 2026-09-20
tags: ['Astro', 'WebDev']
featured: false
---
Nội dung viết bằng Markdown, hỗ trợ đầy đủ code block.
Ưu điểm: không phụ thuộc dịch vụ bên ngoài, toàn quyền kiểm soát, dữ liệu là file thuần dễ sao lưu. Nhược điểm: muốn giao diện chỉnh sửa đẹp thì phải tự xây hoặc nhờ công cụ.
Keystatic: CMS đặt ngay trong repo
Keystatic đọc schema file, tự sinh ra giao diện quản trị chạy local:
// src/keystatic.config.ts
import { defineConfig, collection } from '@keystatic/core';
export default defineConfig({
storage: { kind: 'local' },
collections: {
posts: collection({
label: 'Bài viết',
path: 'src/content/blog/*',
schema: {
title: { kind: 'text', label: 'Tiêu đề' },
pubDate: { kind: 'date', label: 'Ngày đăng' },
featured: { kind: 'boolean', label: 'Nổi bật' },
},
}),
},
});
Ưu điểm: trải nghiệm CMS thật sự, schema kiểm soát chất lượng dữ liệu. Nhược điểm: muốn đồng bộ giữa nhiều người qua git cần thêm backend.
Decap CMS: giao diện trong trình duyệt
Decap (trước là Netlify CMS) chạy như trang web con, ghi commit vào kho git:
backend:
name: git-gateway
branch: main
media_folder: public/images
collections:
- name: posts
label: Bài viết
folder: src/content/blog
fields:
- { name: title, label: Tiêu đề, widget: string }
- { name: pubDate, label: Ngày đăng, widget: datetime }
Ưu điểm: giao diện trình duyệt quen thuộc, có sẵn lịch sử phiên bản git. Nhược điểm: cần hạ tầng git và OAuth — vượt tầm với dự án không dùng GitHub/GitLab.
CMS headless dịch vụ: Sanity, Contentful
Khi đội ngũ sáng tạo nội dung nhiều người và cần luồng phê duyệt, quay sang CMS dạng dịch vụ. Astro kéo dữ liệu bằng API:
import { createClient } from '@sanity/client';
export const client = createClient({
projectId: import.meta.env.SANITY_PROJECT_ID,
dataset: 'production',
apiVersion: '2026-01-01',
useCdn: true,
});
Ưu điểm: giao diện chuyên nghiệp, phân quyền, preview realtime. Nhược điểm: chi phí theo lượng truy cập, phụ thuộc nhà cung cấp, cache phức tạp hơn.
Tiêu chí chọn
- Một người viết, muốn đơn giản: Markdown thuần + editor web đơn giản.
- Nội dung ít, muốn có form chỉnh sửa chuẩn: Keystatic.
- Đã có sẵn GitHub/GitLab: Decap CMS.
- Nhiều người, cần quy trình duyệt: CMS dịch vụ.
Kết luận
- Không có CMS nào tốt nhất tuyệt đối — chỉ có CMS phù hợp với quy mô và thói quen của đội.
- Bắt đầu từ file Markdown luôn là quyết định an toàn: dễ nâng cấp lên giải pháp lớn hơn.
- Quan trọng nhất là schema hợp lệ để dữ liệu không phải di trú sau này.
💡 Đang phân vân chọn hosting cho dự án? Xem bảng so sánh gói Hostinger giá VN — link affiliate (bạn không trả thêm phí), hoa hồng giúp duy trì blog.
Chọn xong CMS thì mới còn chuyện ai viết bài hằng ngày. Với khách không muốn tự đăng, tôi dựng sẵn pipeline rồi bàn giao — cách thuê tôi dựng website.