Tạo blog với Zola từ A–Z: deploy GitHub Pages
Bạn muốn có một blog nhanh, miễn phí, gọn nhẹ và toàn quyền kiểm soát — không phải lo cập nhật bảo mật WordPress, không phí hosting hằng tháng? Bài này hướng dẫn bạn tạo blog với Zola từ con số 0: từ cài đặt, viết bài, đến deploy lên GitHub Pages. Chính blog bạn đang đọc cũng chạy bằng Zola, nên đây là kinh nghiệm thực tế chứ không phải lý thuyết.
Zola là gì?
Zola là một static site generator (SSG) viết bằng Rust, đóng gói thành một file thực thi duy nhất — tải về là chạy, không cần cài Node, Python hay Ruby. Nó nhận file Markdown + template Tera rồi sinh ra các trang HTML tĩnh sẵn sàng phục vụ.
Vì là trang tĩnh (không cần database hay server động), blog Zola:
- Tải rất nhanh — chỉ là HTML/CSS thuần.
- Bảo mật cao — không có database để bị tấn công.
- Host miễn phí — chạy được trên GitHub Pages, Netlify, Cloudflare Pages.
- Tích hợp sẵn Sass, tìm kiếm, syntax highlight, sitemap, RSS — không cần plugin.
Muốn hiểu sâu hơn về stack vận hành một blog tĩnh thực tế (CMS mini, CI/CD, tự động hoá), đọc thêm bài Tự xây blog cá nhân $0/tháng với Zola + GitHub Pages.
Chuẩn bị
- Một tài khoản GitHub (miễn phí).
- Git cài sẵn trên máy.
- Một trình soạn thảo (VS Code khuyến nghị).
Bước 1 — Cài đặt Zola
Zola chỉ là một file binary. Chọn theo hệ điều hành:
macOS (qua Homebrew):
brew install zola
Windows (qua Scoop hoặc Chocolatey):
scoop install zola
# hoặc
choco install zola
Linux (tải binary từ GitHub Releases):
curl -sL https://github.com/getzola/zola/releases/download/v0.19.2/zola-v0.19.2-x86_64-unknown-linux-gnu.tar.gz | tar xz
sudo mv zola /usr/local/bin/
Kiểm tra cài đặt thành công:
zola --versionBước 2 — Tạo blog với Zola: khởi tạo site mới
zola init my-blog
Zola sẽ hỏi vài câu (URL site, có dùng Sass không, có compile search index không) — cứ Enter để dùng mặc định, sửa sau cũng được. Sau đó:
cd my-blogBước 3 — Hiểu cấu trúc thư mục
my-blog/
├── config.toml # cấu hình chính (URL, tiêu đề, taxonomies…)
├── content/ # bài viết & trang (file .md)
├── templates/ # template Tera (.html)
├── sass/ # file .scss (tự compile sang CSS)
├── static/ # ảnh, font, file tĩnh — copy nguyên si
└── themes/ # theme cài thêm (tùy chọn)
Mở config.toml và sửa dòng quan trọng nhất:
base_url = "https://<tên-github>.github.io/my-blog"
title = "Blog của tôi"
default_language = "vi"
compile_sass = true
[markdown]
highlight_code = true
[taxonomies]
categories = [{ name = "categories", feed = true }]
tags = ["feed = true }", "{ name = "tags"]
Lưu ý: nếu deploy lên GitHub Pages dạng project page (
username.github.io/my-blog),base_urlphải có đuôi/my-blog, nếu không link và CSS sẽ gãy.
Bước 4 — Thêm theme (hoặc tự làm template)
Cách nhanh nhất cho người mới là dùng theme có sẵn ở getzola.org/themes. Thêm theme dưới dạng git submodule:
git init
git submodule add https://github.com/<tác-giả>/<theme>.git themes/<theme>
Rồi khai báo trong config.toml:
theme = "<theme>"
Nếu thích tự kiểm soát, tạo templates/index.html tối giản:
<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="utf-8">
<title>{{ config.title }}</title>
</head>
<body>
<h1>{{ config.title }}</h1>
{% for page in section.pages %}
<article>
<h2><a href="{{ page.permalink }}">{{ page.title }}</a></h2>
<p>{{ page.description }}</p>
</article>
{% endfor %}
</body>
</html>Bước 5 — Viết bài đầu tiên
Tạo file content/bai-viet-dau-tien.md:
+++
title = "Bài viết đầu tiên của tôi"
description = "Mô tả ngắn cho SEO và mạng xã hội."
date = 2026-06-16
[taxonomies]
categories = ["Linh tinh"]
tags = ["blog", "zola"]
+++
Xin chào! Đây là bài viết **đầu tiên** viết bằng Markdown.
Phần giữa hai dấu +++ gọi là frontmatter (định dạng TOML) — chứa metadata. Phần dưới là nội dung Markdown.
Bước 6 — Chạy thử ở máy local
zola serve
Mở http://127.0.0.1:1111 — Zola tự động live reload: bạn sửa file, lưu lại, trình duyệt cập nhật ngay. Khi ưng ý, build bản production:
zola build
Toàn bộ trang tĩnh được sinh ra trong thư mục public/.
Bước 7 — Deploy miễn phí lên GitHub Pages
Đẩy code lên một repo GitHub, rồi tạo file .github/workflows/deploy.yml:
name: Deploy
on:
push:
branches: [main]
permissions:
contents: read
pages: write
id-token: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Cài Zola
run: |
curl -sL https://github.com/getzola/zola/releases/download/v0.19.2/zola-v0.19.2-x86_64-unknown-linux-gnu.tar.gz | tar xz
sudo mv zola /usr/local/bin/
- run: zola build
- uses: actions/upload-pages-artifact@v3
with:
path: public
deploy:
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
steps:
- uses: actions/deploy-pages@v4
Vào Settings → Pages của repo, ở mục Build and deployment chọn Source = GitHub Actions. Từ giờ mỗi lần git push lên nhánh main, blog tự build và lên sóng. Đây cũng là nền tảng để tự động hoá QA và self-healing CI sau này.
Bước 8 — Tối ưu SEO cơ bản
Zola lo phần khó giúp bạn, chỉ cần bật:
- Sitemap: tự sinh ở
/sitemap.xml(không cần làm gì). - RSS/Atom: thêm
generate_feeds = truetrongconfig.toml. - Mô tả & tiêu đề: điền
descriptioncho mỗi bài, đặt từ khoá ở đầutitle. - Ngôn ngữ:
default_language = "vi"để thẻ<html lang>đúng.
Lỗi thường gặp
- CSS/ảnh không hiện sau khi deploy → sai
base_url(thiếu đuôi/repo). Sửa lại cho khớp URL GitHub Pages. - Theme trống trơn → quên
submodules: truekhi checkout trong workflow. - Link nội bộ gãy → dùng
@/đường-dẫn.mdcho internal link trong Markdown để Zola tự kiểm tra.
Kết
Chỉ với một file binary và một repo GitHub, bạn đã có blog miễn phí, nhanh, an toàn và tự động deploy. Bước tiếp theo nên làm: tùy biến template Tera cho ra chất riêng, thêm bình luận (giscus), và dựng pipeline tự động hoá nội dung.
Nếu bạn tò mò một blog Zola "đời thực" được vận hành thế nào — từ CMS mini viết bằng vanilla JS đến hệ thống tự fix lỗi — hãy đọc tiếp Tự xây blog cá nhân $0/tháng và QA Gatekeeper: blog tự fix lỗi 24/7.
Tham khảo & Nguồn dữ liệu
1. Liên kết bên ngoài được sử dụng trong bài viết
2. Liên kết nội bộ liên quan
3. Bản quyền & Ghi nguồn
Một phần dữ liệu trong bài viết được tham khảo từ getzola.org/themes. Mọi thương hiệu, tên sản phẩm và tài liệu gốc thuộc quyền sở hữu của chủ sở hữu tương ứng. Bài viết chỉ trích dẫn, tổng hợp và phân tích — không nhằm thay thế tài liệu chính thức.
Câu hỏi thường gặp
Zola là gì?
Tạo blog với Zola có miễn phí không?
Zola và Hugo nên chọn cái nào?
Cần biết lập trình để dùng Zola không?
💬 BÌNH LUẬN
Đăng nhập GitHub để comment. Hỗ trợ markdown, reaction, reply.