Series Build a Website from Scratch Part 10 of 10

Go Live —
Uploading Your Site to a Web Server

Over nine parts, we've built the café SOEL website from scratch — HTML structure, CSS styling, responsive layouts, SEO, and accessibility. Everything is in place. In this final part, we'll take those files and put them where the whole world can see them.

Quick Recap

📖 Quick Recap
  • Added ARIA attributes (aria-label, aria-expanded) to the hamburger button for screen reader support
  • Applied loading="lazy" to all images except the hero for faster initial loads
  • Converted JPG images to WebP, significantly reducing total page weight

After Part 9, the café SOEL website reached "production quality." The HTML validator came back clean, Lighthouse scores looked healthy, and every image was optimized. All that's left is to place those finished files somewhere the entire internet can access them.

There's almost no new code to write in this part. Instead, we'll focus on understanding how web hosting works and walking through the actual upload process. If this is your first time deploying a site, it might feel a little nerve-wracking — but the steps are surprisingly straightforward. Let's do this together.

Goals for This Part

🎯 Goals for This Part
  • Understand the big picture of how websites go live — servers, domains, and DNS
  • Learn how to choose a hosting provider that fits your needs
  • Upload your site files to a server using an FTP client (FileZilla)
  • Understand why SSL (HTTPS) matters and confirm it's set up
  • Verify everything works after launch and learn how to push future updates

How Websites Go Live — Three Key Players

Throughout this series, we've been building the site on our own computers. Opening index.html in a browser shows it just fine — but only to us. Nobody else on the internet can reach those files.

"Publishing" a website means placing your files on a computer that's always online and always ready to respond to visitors. That computer is called a server. Then you give it an address so people can find it. Three things make this happen.

▶ Live Demo — How Web Publishing Works
🖥
Server
+
🏷
Domain
+
📡
DNS
🌐
Live!

Server — Where Your Files Live

A server is a computer that stores your website files (HTML, CSS, images) and sends them to anyone who asks. It runs 24/7, 365 days a year, responding to requests from all over the world.

Running your own server is expensive and complex, so most people rent space from a hosting provider. This is true for personal sites and professional projects alike. You pay a monthly fee and get a reliable slice of server space in return.

Domain — Your Site's Address

A domain is the human-readable address — something like cafe-soel.com. Behind the scenes, every server has an IP address (a string of numbers like 203.0.113.50), but nobody wants to type that into a browser. A domain gives your site a name people can actually remember.

You purchase a domain through a domain registrar. Most hosting providers offer domain registration as part of their plans, making it easy to get both in one place.

DNS — The Phone Book That Connects Them

DNS (Domain Name System) is the system that maps a domain name to a server's IP address. Think of it as a phone book: you look up a name (domain) and get back a number (IP address).

When you type cafe-soel.com into your browser, a DNS lookup happens instantly behind the scenes — "That domain lives on server 203.0.113.50" — and the server sends back the index.html file. This entire process takes fractions of a second.

📌 Good to Know
The step-by-step details for purchasing a domain and configuring DNS settings are covered in a separate article, "Web Hosting Fundamentals." For this tutorial, we'll focus on understanding the big picture and move straight into the actual upload process.

Choosing a Hosting Provider

There are many hosting providers out there. The right one depends on your budget, location, and preferences. For readers in Japan, here are four popular options. For international readers, providers like Bluehost, SiteGround, A2 Hosting, and Hostinger serve similar needs — the principles in this tutorial apply regardless of which provider you pick.

Provider Starting Price Key Strengths
Xserver ~¥1,000/mo Japan's top market share. Extremely stable with abundant online tutorials and community support.
ConoHa WING ~¥900/mo Modern, intuitive dashboard. Focuses on speed performance. Popular domain-bundled plans.
Lolipop! ~¥220/mo Budget-friendly entry point. Great for students and first-time projects. Scalable to higher tiers.
Sakura Internet ~¥500/mo Long-established, trusted for reliability. A favorite among the developer community.

All of these support free SSL (HTTPS). Pricing and plans change over time, so check each provider's current offerings before signing up.

💡 KANON's Tip
If you're stuck deciding, here's a secret: for a static HTML site like café SOEL, they're all more than capable. Pick whichever dashboard you find friendliest, or whichever fits your budget. The important thing isn't finding the "perfect" host — it's getting your site live. When I uploaded my very first site, I was on the cheapest plan available. It worked just fine.

Once you've signed up with a provider and secured a domain (follow each service's own guides for those steps), it's time for the fun part — uploading your files.

⚠️ Heads Up
Hosting plans and domain registrations come with costs — typically a monthly server fee and an annual domain renewal fee. Many providers offer free trial periods, so it's perfectly fine to test the waters before committing.

Pre-Upload Check — Make Sure Your Files Are Ready

Before uploading anything, let's confirm that your local project folder has everything it needs. If you completed all the steps through Part 9, your folder should look like this:

📁 Files to Upload
my-website/
├── index.html
├── css/
│   └── style.css
└── img/
    ├── hero.webp
    ├── concept.webp
    ├── menu-coffee.webp
    ├── menu-latte.webp
    ├── menu-cake.webp
    ├── menu-sandwich.webp
    ├── interior-01.webp
    ├── interior-02.webp
    ├── exterior.webp
    ├── logo.png
    ├── ogp.jpg
    └── favicon.svg
    

The images are the WebP versions you created in Part 9. The logo (.png), OGP image (.jpg), and favicon (.svg) stay in their original formats. If your old .jpg files are still in the img/ folder, that's fine — but leaving them out keeps things tidy.

📌 Good to Know
You upload the contents of the my-website/ folder — not the folder itself. The server's public directory should have index.html sitting right at the root level. Not my-website/index.html, just index.html. Small detail, big difference.

What Is FTP — Delivering Files to Your Server

FTP (File Transfer Protocol) is the standard method for transferring files from your computer to a server. The name says it all: it's a protocol — an agreed-upon set of rules — for moving files between two machines.

Think of it like a delivery service. Your computer is the sender, the server is the destination, and an FTP client is the delivery driver carrying your packages (files) from one to the other.

In practice, you'll typically see FTPS or SFTP, which are encrypted versions of FTP. They work exactly the same way but protect your data in transit so nobody can peek at your files or credentials. Most hosting providers support these by default.

💡 KANON's Tip
Many hosting providers also offer a browser-based "File Manager" in their control panel. For a small site like ours, that's a perfectly valid option. But if you plan to update your site regularly or work with larger projects in the future, learning an FTP client now will pay off quickly. It's faster, more reliable, and gives you much more control.

Uploading with FileZilla

We'll use FileZilla, a free, open-source FTP client that runs on Windows, Mac, and Linux. It's one of the most widely used FTP tools in the world — simple enough for beginners, powerful enough for professionals.

1

Install FileZilla

Head to https://filezilla-project.org/ and download FileZilla Client (not Server). Install it like any other application.

2

Find Your Server's Connection Details

In your hosting provider's control panel, locate the FTP connection information. You need four things:

FTP Connection Details
Host      : ftp.example.com  (listed in your hosting control panel)
Username  : your-username    (set during hosting signup)
Password  : your-password    (set during hosting signup)
Port      : 21               (for FTPS — use 22 for SFTP)

Different providers label this differently — look for "FTP Accounts," "FTP Settings," or "Server Information" in the control panel. It's always there.

3

Connect to the Server

Open FileZilla. At the top of the window, you'll see fields for Host, Username, Password, and Port. Enter your details and click Quickconnect. If a certificate dialog appears, click "OK" to proceed.

Once connected, you'll see a split-panel view — your local files on the left, the server on the right.

▶ Live Demo — FileZilla Interface
Local (Your Computer)
📁 my-website/
  📄 index.html
  📁 css/
    📄 style.css
  📁 img/
    🖼 hero.webp
    🖼 concept.webp
    🖼 ...
Remote (Server)
📁 public_html/
  (drop your files here)
4

Navigate to the Public Directory

On the right (remote) side, navigate to the directory where web files should live. This is usually called public_html, www, or htdocs — your hosting provider's documentation will tell you which one.

5

Upload Your Files

On the left (local) side, open your my-website/ folder so you can see index.html, the css/ folder, and the img/ folder. Select all three and drag them into the remote side's public directory. The transfer begins immediately.

With only a dozen or so files, the transfer finishes in seconds. When the status bar at the bottom shows "Transfer complete," you're done.

⚠️ Common Mistake
The number-one mistake is breaking the folder structure during upload. The server's public directory should contain index.html directly at the root, with css/ and img/ right alongside it. If you drag the my-website/ folder itself, your URL becomes https://example.com/my-website/ — not what we want.
✅ Correct Server Structure
public_html/          ← public directory
├── index.html        ← directly at root
├── css/
│   └── style.css
└── img/
    ├── hero.webp
    ├── concept.webp
    └── ...
❌ Common Mistake
public_html/
└── my-website/      ← extra folder wrapping everything
    ├── index.html
    ├── css/
    └── img/

SSL (HTTPS) — Securing Your Connection

Before you open your browser and check, there's one more thing to confirm: SSL.

SSL (Secure Sockets Layer) encrypts the communication between a visitor's browser and your server. When SSL is active, your URL starts with https:// and the browser shows a padlock icon in the address bar.

You might wonder, "Does a café website really need encryption?" The answer today is an unconditional yes. Google gives a slight ranking boost to HTTPS sites, and browsers display a "Not Secure" warning on sites without it. For a business site, that warning alone can scare visitors away.

The hosting providers we mentioned all offer free SSL through services like Let's Encrypt. Look for "SSL Settings" or "Free SSL" in your control panel and enable it for your domain. In most cases, it's a single button click.

📌 Good to Know
After enabling SSL, it may take a few minutes to a few hours to take effect. If https:// doesn't work immediately, give it some time before troubleshooting. The exact steps vary by provider, so check their documentation for specifics.

You're Live — Open Your Browser and Check

Files uploaded. SSL enabled. Now for the moment you've been working toward.

Type your domain into the browser — https://your-domain.com — and hit Enter.

The café SOEL website that has lived on your local machine for nine parts is now visible to anyone, anywhere, at your very own URL.

Seeing something you built with your own hands appear at its own URL — that feeling never gets old, no matter how many times you experience it.

Post-Launch Checklist

Take a moment to enjoy it, then run through these checks:

✅ Post-Launch Checklist
  • The homepage (index.html) displays correctly
  • All images load (no broken image icons)
  • CSS is applied (the site isn't showing plain unstyled HTML)
  • Navigation links (#concept, #menu, etc.) scroll to the right sections
  • Narrowing the browser window triggers the mobile layout
  • The URL starts with https:// and shows a padlock icon
  • The site looks correct on an actual smartphone

If images are missing or CSS isn't loading, the cause is almost always a file path mismatch. Go back to FileZilla and double-check that your server's folder structure matches your local one exactly.

⚠️ Common Mistake
If CSS isn't loading, check whether the path in <link rel="stylesheet" href="css/style.css"> matches your server's actual file structure. Some servers are case-sensitive — CSS/Style.css and css/style.css are treated as different files. Keeping all filenames lowercase is the safest practice.

Verify Your OGP Tags

We set up OGP (Open Graph Protocol) tags in Part 8 to control how the site looks when shared on social media. Now that the site is live, let's confirm they're working.

1

Facebook Sharing Debugger

Paste your URL into the Facebook Sharing Debugger. It will show you exactly what Facebook reads — og:title, og:description, og:image. Make sure they all look right.

2

X (Twitter) Card Validator

Check how your site appears in X posts using the Card Validator. If the OGP image (ogp.jpg) appears as a card preview, everything is set.

If the image doesn't appear, check whether your og:image is still using a relative path. After going live, switching to an absolute URL is more reliable:

index.html — Update og:image to an absolute URL
<!-- Before (relative path) -->
<meta property="og:image" content="img/ogp.jpg">

<!-- After (absolute URL) -->
<meta property="og:image" content="https://your-domain.com/img/ogp.jpg">

After making this change locally, simply re-upload index.html through FileZilla.

Updating and Backing Up After Launch

A launched site isn't a finished site. Text corrections, photo swaps, seasonal updates — changes are inevitable. Here's the workflow you'll follow from now on.

The Update Workflow

1

Edit Locally

Make your changes in VS Code and verify them in your local browser. Never edit files directly on the server — if something goes wrong, you won't be able to undo it easily.

2

Re-Upload Only the Changed Files

Open FileZilla and drag just the modified files to the server. You don't need to upload everything again — just the files you changed.

3

Verify on the Live Site

Reload the live URL in your browser. If the old version still shows, do a hard refresh with Ctrl + Shift + R (or Cmd + Shift + R on Mac) to bypass the browser cache.

Keeping Backups

Always keep a copy of your complete project folder somewhere safe — a USB drive, Google Drive, Dropbox, anywhere. Before making significant changes, duplicating the folder with a date suffix (like my-website-2025-06-15) gives you a simple way to roll back if needed.

💡 KANON's Tip
For proper version control, Git is the tool professionals use. It tracks every change you make, lets you compare versions, and makes it trivial to revert mistakes. It's beyond the scope of this series, but once you're comfortable maintaining your site, I'd strongly encourage exploring it as a next step.

Congratulations — Looking Back at the Journey

We started in Part 1 with nothing but a text editor and a "Hello World!" on a blank page. And now, ten parts later, you've built and published a complete, responsive, SEO-optimized, accessibility-conscious website — with your own hands.

Let's take a moment to appreciate everything you've learned. In Part 1, you set up your environment. Part 2 taught you the skeleton of HTML. Part 3 filled it with real content. Part 4 introduced CSS fundamentals. Part 5 brought Flexbox layouts. Part 6 added CSS Grid and responsive design. Part 7 polished everything with fonts, transitions, and hover effects. Part 8 tackled SEO and structured data. Part 9 refined accessibility and performance. And today, you put it all online for the world to see.

HTML structure, CSS styling, responsive layouts, SEO, accessibility, performance optimization, and deployment — you've experienced the entire lifecycle of building a website, start to finish. That end-to-end understanding is something no single tutorial can give you. You earned it by doing the work.

What matters most isn't writing perfect code — it's finishing what you started. A completed project is a stronger foundation than any textbook.

Of course, this series is just the beginning. JavaScript interactions, CSS animations, design customization — there's a whole world ahead. The three bonus parts explore those next steps, so pick them up whenever you're ready.

And don't stop here. Change the colors. Add a new section. Make the café SOEL site your own — or use what you've learned to build something entirely different. Every hour you spend writing code makes you better.

Thank you for sticking with all ten parts. I hope the site you built finds its way to someone who appreciates it.

👀 Final Demo
Compare your live site with the completed demo. If they look the same, this series has done its job.
View the completed demo →

What You Learned

  • Publishing a website requires three things: a server to host files, a domain for a human-readable address, and DNS to connect the two
  • Hosting providers like Xserver, ConoHa WING, Lolipop!, and Sakura Internet are beginner-friendly options — for international readers, Bluehost, SiteGround, and similar services fill the same role
  • FTP clients like FileZilla let you drag and drop files from your computer to the server
  • Upload the contents of your project folder — not the folder itself — directly into the server's public directory
  • SSL (HTTPS) is essential for every site. Most hosts offer free SSL through Let's Encrypt
  • After launch, verify OGP display with Facebook's Sharing Debugger and X's Card Validator
  • The update cycle is simple: edit locally, re-upload changed files, verify on the live site