Background
This blog started in late 2013, hosted on GitHub Pages with Jekyll. After several theme changes, the most recent setup was jekyll-theme-chirpy 7.1.1.
After accumulating 55 articles, I decided to reassess the tech stack, looking for something simple, elegant, and developer-oriented.
Static Blog Ecosystem in 2026
Before making a choice, I compared the current mainstream static site generators (SSGs):
| SSG | Language | Build Speed | Highlights |
|---|---|---|---|
| Jekyll | Ruby | Moderate | Native GitHub Pages support, most mature ecosystem |
| Hugo | Go | Extremely fast (<1ms/page) | Single binary, zero dependencies |
| Astro | JS/TS | Fast | Zero JS by default, Island Architecture |
| 11ty | JS | Fast | Flexible, multi-template engine |
| Zola | Rust | Extremely fast | Single binary, built-in Sass/highlighting |
Why Hugo + PaperMod
After evaluation, Hugo + PaperMod was the winner:
- Build speed — 54 posts built in <100ms, Jekyll takes seconds
- PaperMod theme — Minimal, elegant, content-focused, perfect dark mode
- Zero Ruby dependency — Single
hugobinary, ready to go - Native multilingual support — Hugo’s built-in i18n works great for Chinese/English
- Actively maintained — PaperMod community is active, still receiving updates in 2026
Migration Process
1. Project Structure Change
| |
2. Front Matter Standardization
Front matter was inconsistent during the Jekyll era. During migration, everything was unified to:
| |
3. Multilingual Configuration
Hugo’s multilingual support is intuitive — differentiated by filename suffix:
| |
With defaultContentLanguage: zh in the config, English versions are accessible via the /en/ prefix.
4. GitHub Actions Deployment
Using peaceiris/actions-hugo along with GitHub’s official Pages deployment actions:
| |
PaperMod Features
Out-of-the-box features with PaperMod:
- Auto dark/light mode switching
- Site search (Fuse.js-based)
- One-click code copy
- Reading time estimation
- Table of contents (TOC)
- Breadcrumb navigation
- RSS feed
- SEO optimization (Open Graph, Twitter Cards)
- Responsive design
- Archives page
- Multilingual support
GitHub Pages Best Practices in 2026
Key recommendations for using GitHub Pages today:
Deployment Method
Use GitHub Actions — branch-based deployment is outdated. Actions advantages:
- Not limited to Jekyll; use any SSG
- Full control over build environment
- Always using the latest tool versions
Performance Optimization
- Enable
minifyfor compressed output - Leverage CDN (GitHub Pages includes Fastly CDN)
- Use WebP format for images
- Enable PWA caching for offline access
Custom Domain
- Place a
CNAMEfile in the repository root - Configure DNS CNAME pointing to
<username>.github.io - GitHub auto-provisions HTTPS certificates
Content Management
- Write in Markdown, git push to deploy
- Use
archetypestemplates for quick post creation - Use
draft: trueto manage drafts
Migration Summary
| Dimension | Before (Jekyll) | After (Hugo) |
|---|---|---|
| Build time | ~5s | <100ms |
| Dependencies | Ruby + Bundler | Single binary |
| Theme | Chirpy 7.1.1 | PaperMod |
| Multilingual | Not supported | Native support |
| Search | None | Fuse.js full-text search |
| Post count | 55 | 54 (removed 1 duplicate) |
The migration took about half a day, mostly spent standardizing front matter. The result is satisfying — build speed went from seconds to milliseconds, the theme is clean and elegant, and multilingual support is ready.