我如何建立一個每年約有 100k 次瀏覽的 $0 網誌
How I Built a $0 Blog That Gets 100k Views
作者分享如何用免費工具建立每年約有 100,000 次瀏覽的網誌,並將流量歸因於持續寫作與內容分發,而非建站工具。配置包括 Cloudflare Pages、Astro、giscus、Buttondown、Cloudflare Web Analytics 和 Pagefind;自訂網域另需約每年 $10-$15,亦可使用免費子網域。
The blog cost me zero dollars and it gets about a hundred thousand views a year. Both of those are true, and the gap between them is the whole story — because the free part took an afternoon, and the views took a year.
I'm writing this because every "build a blog" post sells you the afternoon. The stack. The deploy. The green checkmark. And the stack genuinely is free now, in a way it wasn't five years ago — I'll give you the exact one I run, link by link, and none of it will cost you a cent. But if you stop reading there, you'll do what I did the first three times: stand up a beautiful empty blog, publish twice, and watch it get forty views, thirty of them your own.
So this is in two halves. The stack that costs nothing. Then the thing that actually bought the traffic, which also costs nothing and is much harder to spend.
The $0 stack, link by link
Here's what's running this blog right now. Every line is a free tier I'm actually on, not a trial.
Hosting — Cloudflare Pages. Static sites, unlimited bandwidth, a global CDN, deploy on git push. The free tier isn't a teaser — it's unlimited requests and bandwidth, with a cap on builds per month you will not hit as one person. GitHub Pages does the same job if you'd rather; I moved for the faster edge and the branch previews.
The site itself — Astro. It builds to plain static HTML, so it's fast by default and there's no server to pay for or patch. I write posts in Markdown, Astro turns them into pages. If you prefer, Hugo and Eleventy land in the same place for the same price: $0.
Comments — giscus. Comments backed by GitHub Discussions. No database, no Disqus ads, no monthly bill — it stores the threads in your own repo's Discussions. Your readers sign in with GitHub, which for a dev audience is a feature, not a wall.
Newsletter — Buttondown's free tier. The free plan covers you until you have a few hundred subscribers, which is further away than you think on day one. The point isn't the tool. The point is that an email list is the only audience you actually own — every other number on this list is rented from a platform that can change its algorithm on a Tuesday.
Analytics — Cloudflare Web Analytics. Free, no cookies, no banner, doesn't sell your readers. It tells you the one thing that matters — which posts people actually land on — without you becoming the thing you'd unfollow.
Search — Pagefind. A full-text search index that's generated at build time and runs entirely in the browser. Static, free, and it makes a big archive feel like a real site instead of a pile of posts.
Fonts — Fontsource. Self-hosted open-source fonts, so no third-party font request slowing the first paint and no tracking. Pennies of bandwidth, which on Cloudflare is still zero.
Images — my own screenshots, plus Unsplash and Pexels for the occasional header. Both have genuinely free tiers; credit the photographer and you're done.
Total: $0.
The one honest asterisk: a custom domain costs about ten to fifteen dollars a year, and that's the only line item in the entire operation. You can skip even that and ship on the free *.pages.dev subdomain — it ranks fine, it just looks less like yours. I pay for the domain because it's the one cost I'd defend to anyone; it's the address the whole thing is built on, and it's mine no matter which host I'm on this year.
That's the afternoon. If a free stack was the thing standing between you and a hundred thousand views, you'd be done now. It isn't, and you're not, and here's the part that matters.
The views were never in the stack
I had this exact stack live, polished, fast, for most of a year before it got meaningful traffic. The theme was better than the writing. I'd spent my building energy on the Lighthouse score and almost none on the thing the Lighthouse score was supposed to deliver — somebody reading.
Three things turned it around, and not one of them is a tool.
1. I wrote for a question, not for myself. My early posts were "thoughts on" — thoughts on testing, thoughts on a framework. Nobody searches "thoughts on." They search "how do I fix CERTIFICATE_VERIFY_FAILED in Python," and if you've written the clear answer to a question real people type into a search bar, that post works for you at 3am for years. The posts that make up most of my hundred thousand views are four or five of these. They didn't go viral. They just answer a thing, and people keep needing the thing answered.
2. I stopped waiting for readers to find my site and went to where they already were. This is the lever almost nobody pulls, so here it is plainly: cross-post every piece to dev.to, Hashnode, and Medium — with a canonical URL pointing back to your own site. The canonical tag is the whole trick. It tells Google "the original lives over here," so you borrow those platforms' enormous built-in audiences without getting penalised for duplicate content, and the SEO credit still accrues to your domain. dev.to has a canonical_url frontmatter field. Hashnode has a canonical setting per post. Medium lets you import with the original as canonical. One piece, written once, now lives on four doorsteps instead of one empty room.
3. I accepted that the spike is luck and the baseline is work. Yes, one post hit the dev.to front page and another got a few hours on Hacker News, and those days were a rush. But a spike is a day. Search traffic and an email list are every day. If you build your strategy around going viral you've built it around a lottery ticket; if you build it around answering real questions and owning your list, the spike becomes a nice bonus on top of a number that doesn't reset to zero on Monday.
None of those three cost money. They cost the one thing a free tier can't provision for you: a post a week, for a year, when nobody is reading yet.
The part that actually breaks you
Here's what I didn't understand until I'd lived it: the blog was never the bottleneck. Consistency was. And consistency doesn't die because writing a post is hard — it dies in the second hour, the one after you finish writing, when the real job turns out to be turning that one post into the five places it needs to live.
Because "cross-post everywhere" is easy to say and quietly brutal to do. The same idea has to become a dev.to article with the right tags, a Medium version with the canonical set, a couple of posts for X that don't read like a press release, maybe a short script if you're doing video. That's not writing. That's an hour of reformatting the thing you already wrote, every single time, and it's exactly where my weekly cadence went to die. I'd write the post, feel finished, and never do the distribution that was the entire reason the post would be read.
That second hour is the gap we built Xenition to close — our AI workspace, a Flutter app on iOS and Android. You hand it the piece you wrote and describe where it's going — "a dev.to version with these tags, a Medium version pointing back here as canonical, three posts for X, and a short script" — and it drafts each surface in the right shape, so the distribution is a conversation instead of the chore that quietly ends your blog. The writing is still yours. The hour that used to kill the cadence isn't.
That's the honest shape of a $0 blog that gets 100k views. The stack is free and it's the easy afternoon. The traffic is also free and it's a year of showing up, most of it in the unglamorous work of putting one good post everywhere a reader already stands.
Build the free stack this afternoon — it really is that quick now. Then write the first post for a question somebody is actually typing, cross-post it with the canonical set, and do that again next week. The views don't come from the stack. They come from the week after you stopped expecting them to.
What's your $0 (or nearly $0) blogging stack — and the one tool you'd actually pay for? Drop it in the comments; I'm always looking to cut the last line item.
來源:DEV Community · dev.to