For a static blog, the hosting decision comes down to a short list: GitHub Pages, Netlify, Vercel, Cloudflare Pages. I already use Cloudflare for DNS on several domains, so Cloudflare Pages was the natural choice. One login, one dashboard, everything in the same place.
The value proposition for a static site is hard to argue with. Global CDN, automatic HTTPS, Git-based deployments, and a free tier that covers everything a personal blog needs. Every push to the main branch triggers a build and deploy automatically. There is no deployment step to remember.
The setup process itself is mostly what you would expect: connect your GitHub account, select the repository, configure the build settings. For Astro, the build command is npm run build and the output directory is dist. Cloudflare Pages recognizes Astro and suggests the right settings automatically.
The part that cost me time: the Cloudflare dashboard does not have a top-level “Pages” link in the sidebar the way you might expect. You get there through Compute → Workers & Pages. Once you are there, there is another trap: the prominent “Create application” button takes you into the Workers flow, not Pages. Look for the smaller text that says “Looking to deploy Pages?” and click that instead. It is easy to miss the first time.
Once you are past that, the experience is clean. Build logs are visible in real time. Preview deployments are created automatically for pull requests if you want them. The custom domain setup walks you through adding the DNS records, and since I was already managing DNS in Cloudflare, the propagation was instant.
One habit I built early: always run npm run build locally before pushing. The Astro dev server is forgiving about certain errors in frontmatter and component syntax. The build is not. Better to catch those locally than wait for a Cloudflare build to fail and then read the logs.
Cloudflare also gives you Web Analytics for free, without cookies, without GDPR headaches. I enabled it globally across all my Cloudflare Pages sites. It is not GA4, but for a personal blog, the traffic overview and top pages view is everything I actually look at.
The deployment workflow ended up being exactly what I wanted: write, commit, push, done. No build servers to maintain, no deployment pipelines to configure, no hosting bills to watch.