How to Launch a Static Site for Free: A Practical Guide for Indie Makers
1. Why Static Sites Still Win
Every week a new site-builder launches with a $15/month plan and a drag-and-drop interface. Most indie makers do not need them. A static site—plain HTML, CSS, and images—loads faster, costs nothing to host, and never breaks because a SaaS changed its pricing.
The trade-off is simplicity. You do not get a CMS dashboard. You edit files directly. For a landing page, a product store, a portfolio, or a documentation site, that is usually a feature, not a bug. You own the files. You own the hosting. You own the performance.
2. What You Actually Need
- A template or starting HTML file. You can write one from scratch in twenty minutes, or start from a minimal template pack.
- A hosting provider that serves static files for free. GitHub Pages, Cloudflare Pages, Netlify Drop, and Surge.sh all work without a credit card.
- A domain name (optional). Every free host gives you a subdomain. A custom domain costs roughly $10/year and takes five minutes to connect.
- Basic SEO metadata. Title, description, Open Graph tags, and a sitemap. These are just HTML tags, not plugins.
That is the entire stack. No build step, no npm install, no database, no server.
3. The Step-by-Step Launch
Step 1: Write or copy your HTML
Open a text editor. Create index.html. Start with a doctype, a head block with charset and viewport meta tags, and a body. Add an h1, a paragraph, and a link. That is a valid page. Everything else is refinement.
If you want a head start, use a single-file template. The Minimal HTML Template Pack includes eight zero-dependency layouts—landing page, portfolio, blog, product page, dashboard, resume, coming-soon page, and receipt. Each one is a single HTML file you can open locally, edit, and upload.
Step 2: Add a stylesheet
Create style.css in the same folder. Link it in the head:
<link rel="stylesheet" href="style.css">
Start with a reset, set a readable font size on the body (1rem/16px is fine), and use percentages or max-width for layout. You do not need a framework. Two hundred lines of custom CSS will out-perform a bloated library on every metric that matters.
Step 3: Add SEO metadata
Every page needs at minimum:
<title>— under 60 characters, include your primary keyword near the front.<meta name="description">— under 160 characters, describe the page accurately.<meta property="og:title">andog:description— what social platforms show when the link is shared.<meta name="viewport" content="width=device-width, initial-scale=1">— required for mobile rendering.
These four tags take two minutes to write and are the difference between a page that ranks and one that does not.
Step 4: Test locally
Open index.html in a browser. Resize the window to check mobile layout. Use the browser DevTools Network tab to confirm no 404s. If you used a template from the pack, it is already responsive and print-friendly.
Step 5: Deploy to a free host
Here are three zero-friction options:
- GitHub Pages: Create a public repository, enable Pages in Settings, drag your files in. Done. Custom domain support included.
- Cloudflare Pages: Drop a ZIP of your files into the dashboard. Instant global CDN. No account verification beyond email.
- Netlify Drop: Drag your folder onto
app.netlify.com/drop. Live URL in seconds. Branch deploys if you add Git later.
All three serve over HTTPS by default. All three handle cache headers and compression without configuration.
4. Performance Tips Without Build Tools
You do not need a build pipeline to score well on Core Web Vitals.
- Compress images. Use Squoosh or ImageOptim before uploading. Aim for under 100KB per image unless it is a hero shot.
- Self-host fonts. Google Fonts adds a third-party request and a cookie warning in some jurisdictions. Download the font files, drop them in an
assets/folder, and serve them yourself. - Use semantic HTML. Proper heading hierarchy, alt text on images, and descriptive link text improve accessibility and SEO simultaneously.
- Minify by hand if you care. Remove unnecessary whitespace from CSS. It is a five-minute edit, not a tool chain.
A well-built static site often scores 95+ on Lighthouse with no build step at all.
5. Connecting a Custom Domain
Once the site is live on a free host, buy a domain from a registrar (Porkbun, Namecheap, Cloudflare Registrar). In your host settings, add the custom domain. The host will give you a DNS target. Create a CNAME record in your registrar pointing to that target. Propagation usually takes under five minutes.
GitHub Pages and Cloudflare Pages both issue SSL certificates automatically. You do not touch certificates manually.
Launch Checklist Included
Before you publish, run through the Website Launch Checklist. It covers the 26 items most indie makers forget—meta tags, favicons, robots.txt, analytics, social previews, and more. Available as an interactive HTML page with print-to-PDF and a Notion-importable version.
Get the Checklist6. Use the Launch Checklist
The most common reason a static site underperforms is not the hosting—it is missing basics. No favicon. No Open Graph image. No sitemap. No alt text. These are easy to fix if you catch them before launch.
The Website Launch Checklist breaks launch preparation into four sections:
- Pre-launch foundation — domain, SSL, favicon, base meta tags.
- Content checks — heading structure, internal links, image alt text, spelling.
- Technical setup — robots.txt, sitemap, canonical URLs, analytics.
- Post-launch monitoring — search console, social share tests, uptime.
Run it once. Fix the red items. Ship.
7. What to Ship Next
A single static page is a start. The next moves that create real value:
- Add a product page. Turn the site into a store by adding a product listing. Use the Product Page template from the template pack.
- Write an article. SEO content compounds. One article per month on a topic you know well will outrank most SaaS landing pages within a year.
- Collect emails. A simple form that posts to a free service like Formspree or Buttondown gives you a distribution channel you own.
- Measure. Add a lightweight analytics script (Plausible, Fathom, or even a self-hosted goatcounter) so you know what is working.
The goal is not a perfect site. The goal is a site that is live, fast, and improving every week.