Note
UPDATE (November 2025): Since writing this post, I’ve migrated from Hugo to Astro with the Erudite theme. The principles here still apply — static sites are still the right call for content-focused websites.
Ten years of WordPress taught me enough to know when to leave. You start tweaking PHP configs, switching to LiteSpeed, juggling plugin updates — and for what? A blog. WordPress makes sense for e-commerce maybe, but for a simple content site it’s just overhead. Every plugin is another attack surface, and the DB adds a bottleneck you don’t need.

Known vulnerabilities tracked at wpscan.com.
Hugo
merox.dev has been running on Hugo for over six months. Static files, no backend, free hosting on GitHub Pages, everything version-controlled. Hugo is written in Go so builds are fast, and the output is clean enough that SEO scores came in above 80% without any extra work.

I went with the Blowfish theme. To track upstream updates without breaking my customizations, I forked it and added it as a submodule:
git submodule add https://github.com/YOURUSERNAME/blowfish themes/blowfishThe only real downside to Hugo is that you need to be comfortable in a terminal and working with Markdown. There’s no dashboard.
GitHub Pages + Cloudflare
- Push Hugo project to a private repo
- Enable GitHub Pages on a public repo (branch:
gh-pages, folder:/) - In Cloudflare, add a CNAME for
www.yourdomain.com→yourusername.github.ioand A records for GitHub Pages IPs if needed - Add a
CNAMEfile to your repo:
merox.dev
Automated Deploys with GitHub Actions
My workflow: edit in VS Code → push to private repo → GitHub Actions builds and deploys to the public repo.
Private → Public Deploy via RSA
Since I keep the source in a private repo, I wire the two together with an SSH deploy key:
- Generate the key pair:
ssh-keygen -t rsa -b 4096 -C "github-deploy" -f deploy_key -N ""-
Public repo: Settings → Deploy Keys → add
deploy_key.pubwith write access -
Private repo: Settings → Secrets → add
PRIVATE_KEYwith the private key contents -
.github/workflows/deploy.yml:
name: github pages
on: push: branches: - master
permissions: contents: write id-token: write
jobs: deploy: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 with: submodules: true fetch-depth: 0
- name: Setup Hugo uses: peaceiris/actions-hugo@v3 with: hugo-version: 'latest' extended: true
- name: Build run: hugo --minify
- name: Deploy uses: peaceiris/actions-gh-pages@v3 with: deploy_key: ${{ secrets.PRIVATE_KEY }} external_repository: meroxdotdev/merox.dev publish_branch: gh-pages publish_dir: ./public
SEO Results
No extra configuration — Hugo’s clean output just scores well out of the box.


From seositecheckup.com