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.