Pendahuluan
Selama bertahun-tahun, membuat kode situs web secara manual adalah standar emas bagi pengembang yang menginginkan kendali penuh atas setiap baris HTML, CSS, dan JavaScript. Pendekatan ini menawarkan fleksibilitas yang tak tertandingi dan pemahaman mendalam tentang basis kode. Namun, seiring pertumbuhan situs web—lebih banyak halaman, lebih banyak konten, lebih banyak kompleksitas—pendekatan buatan tangan itu bisa menjadi mimpi buruk dalam hal pemeliharaan. Anda akan mendapati diri Anda menyalin dan menempelkan bilah navigasi, memperbarui footer di puluhan file, dan mengoptimalkan aset secara manual untuk performa.
Situasi inilah yang dialami oleh penulis artikel How-To Geek. Situs web mereka, yang terakhir didesain ulang sekitar tahun 2018, telah berkembang dari mendukung enam atau tujuh buku menjadi jauh lebih banyak. Penambalan dan penambahan manual menjadi tidak berkelanjutan. Solusinya? Membangun ulang seluruh situs dengan Astro, generator situs statis modern yang menjanjikan kecepatan, kesederhanaan, dan pengalaman pengembang yang lebih baik.
Dalam postingan ini, kita akan membedah perjalanan migrasi tersebut, mengeksplorasi keputusan teknis di baliknya, dan menunjukkan kepada Anda bagaimana Anda dapat menerapkan prinsip yang sama pada proyek Anda sendiri. Baik Anda memelihara blog pribadi, portofolio, atau situs dokumentasi, pelajaran di sini dapat langsung diterapkan.
Enter Astro: The Static Site Generator That Respects Your Code
Astro is a relatively new static site generator that has quickly gained popularity among frontend developers. Its core philosophy is simple: ship zero JavaScript by default, and only load client-side scripts when absolutely necessary. This approach leads to incredibly fast page loads and a smaller carbon footprint.
But what makes Astro particularly appealing for rebuilding a hand-coded website is its component-based architecture. You can create reusable components for headers, footers, cards, and layouts, then compose them into pages. This eliminates the repetitive boilerplate that plagues hand-coded sites.
The Migration Process: Step by Step
Let's walk through the actual steps the author took to rebuild their site with Astro. We'll focus on the technical decisions and code examples that made the transition successful.
Step 1: Setting Up the Astro Project
First, you need to initialize a new Astro project. The official CLI makes this straightforward:
npm create astro@latest my-new-site
During setup, you'll be prompted to choose a template. For a content-heavy site, the "Blog" template is a great starting point. It includes Markdown support, RSS feed generation, and a basic layout.
Once the project is created, you can start customizing the structure. The key folders are:
src/pages/, Each file here becomes a route.src/layouts/, Reusable layout components.src/components/, Smaller UI components.public/, Static assets like images and fonts.
Step 2: Extracting the Layout
In a hand-coded site, every page likely contains the same <header>, <nav>, and <footer> markup. With Astro, you create a single layout component that wraps your page content.
---
// src/layouts/BaseLayout.astro
export interface Props {
title: string;
description?: string;
}
const { title, description } = Astro.props;
---
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{title}</title>
{description && <meta name="description" content={description} />}
<link rel="stylesheet" href="/styles/global.css" />
</head>
<body>
<header>
<nav>
<a href="/">Home</a>
<a href="/blog">Blog</a>
<a href="/about">About</a>
</nav>
</header>
<main>
<slot /> <!-- Page content goes here -->
</main>
<footer>
<p>© 2025 My Site</p>
</footer>
</body>
</html>
Now every page can use this layout with just a few lines:
---
import BaseLayout from '../layouts/BaseLayout.astro';
---
<BaseLayout title="About Me" description="Learn more about the author.">
<h1>About Me</h1>
<p>I'm a frontend developer who loves Astro.</p>
</BaseLayout>
This single change eliminates hundreds of lines of duplicated HTML across the site.
Step 4: Reusable Components for UI Elements
Beyond layouts, Astro components let you encapsulate any UI pattern. For example, a book card component that displays a cover image, title, and description can be reused across multiple pages.
---
// src/components/BookCard.astro
export interface Props {
title: string;
cover: string;
description: string;
url: string;
}
const { title, cover, description, url } = Astro.props;
---
<article class="book-card">
<img src={cover} alt={title} loading="lazy" />
<h3>{title}</h3>
<p>{description}</p>
<a href={url}>Learn More</a>
</article>
<style>
.book-card {
border: 1px solid #e0e0e0;
border-radius: 8px;
padding: 1rem;
max-width: 300px;
}
.book-card img {
width: 100%;
height: auto;
border-radius: 4px;
}
</style>
Now you can use this component anywhere:
<BookCard
title="Astro for Beginners"
cover="/images/astro-book.jpg"
description="A comprehensive guide to building fast websites with Astro."
url="/books/astro-for-beginners"
/>
This component-based approach not only saves time but also ensures visual consistency across the site.
Performance Gains: What the Numbers Say
One of the most compelling reasons to migrate to Astro is performance. By shipping zero JavaScript by default, Astro pages load incredibly fast. Let's look at some typical improvements.

SEO and Accessibility Improvements
Rebuilding with Astro also opens the door to better SEO and accessibility practices. Here are some specific improvements you can implement.
Semantic HTML and Structured Data
Astro encourages writing semantic HTML because you're composing components rather than copying and pasting. You can easily add structured data (JSON-LD) to your pages for better search engine understanding.
---
// src/components/SEO.astro
const { title, description, url, image } = Astro.props;
---
"@context": "https://schema.org",
"@type": "WebPage",
"name": title,
"description": description,
"url": url,
"image": image,
})} />
Then include this component in your layout:
<SEO title={title} description={description} url={Astro.url} image="/og-image.jpg" />
Automatic Sitemap Generation
Astro has an official sitemap integration that generates a sitemap.xml file at build time. This is crucial for SEO because it helps search engines discover all your pages.
npm install @astrojs/sitemap
Then add it to your astro.config.mjs:
import { defineConfig } from 'astro/config';
import sitemap from '@astrojs/sitemap';
export default defineConfig({
site: 'https://example.com',
integrations: [sitemap()],
});
That's it. Every page in your src/pages/ directory will be included in the sitemap automatically.
Pengalaman Pengembang: Mengapa Astro Unggul
Selain performa, pengalaman pengembang saat bekerja dengan Astro adalah alasan utama untuk migrasi. Berikut adalah beberapa aspek yang mungkin diapresiasi oleh penulis How-To Geek.
Hot Module Replacement (HMR)
Saat Anda mengembangkan secara lokal, server dev Astro memberikan umpan balik instan. Ubah komponen, dan browser memperbarui tanpa memuat ulang halaman sepenuhnya. Ini adalah peningkatan produktivitas besar dibandingkan dengan menyegarkan browser secara manual setelah setiap pengeditan.
Ekosistem Integrasi
Astro memiliki ekosistem integrasi yang berkembang untuk alat-alat populer:
- Tailwind CSS: Untuk gaya berbasis utilitas.
- React, Vue, Svelte: Gunakan komponen framework favorit Anda di dalam Astro.
- MDX: Sematkan komponen React langsung di Markdown.
- Optimasi gambar: Pengubahan ukuran dan konversi format otomatis.
- Umpan RSS: Hasilkan umpan RSS dari koleksi konten Anda.
Ini berarti Anda tidak terikat pada satu framework. Anda dapat menggunakan alat terbaik untuk setiap pekerjaan.
Dukungan TypeScript
Astro memiliki dukungan TypeScript kelas satu. Anda dapat mendefinisikan antarmuka props untuk komponen Anda, yang menangkap kesalahan pada waktu pembangunan daripada waktu proses.
---
interface Props {
title: string;
date: Date;
excerpt: string;
tags: string[];
}
const { title, date, excerpt, tags } = Astro.props;
---
<article>
<h2>{title}</h2>
<time datetime={date.toISOString()}>{date.toLocaleDateString()}</time>
<p>{excerpt}</p>
<ul>
{tags.map(tag => <li>{tag}</li>)}
</ul>
</article>
Ini menangkap kesalahan tipe lebih awal dan membuat kode Anda lebih mudah dipelihara.
Jebakan Umum dan Cara Menghindarinya
Migrasi dari situs buatan tangan ke Astro umumnya lancar, tetapi ada beberapa jebakan umum yang perlu diwaspadai.
1. Rekayasa Berlebihan pada Pohon Komponen
Sangat menggoda untuk membuat komponen untuk semuanya, bahkan satu paragraf. Namun, itu dapat menyebabkan kompleksitas yang tidak perlu. Mulailah dengan elemen yang paling berulang (tata letak, navigasi, kartu) dan hanya buat komponen saat Anda melihat pola berulang tiga kali atau lebih.
2. Mengabaikan Proses Build
Astro menghasilkan situs statis, tetapi Anda tetap perlu mengonfigurasi proses build. Pastikan astro.config.mjs Anda menyertakan URL site yang benar untuk peta situs, dan pengaturan optimasi gambar Anda sesuai dengan kebutuhan.
3. Tidak Menggunakan Content Collections untuk Data Terstruktur
Jika Anda memiliki daftar item (buku, postingan blog, karya portofolio), gunakan Content Collections. Mereka menyediakan keamanan tipe, paginasi otomatis, dan pemfilteran yang mudah. Mendaftar item secara manual dalam komponen adalah langkah mundur.
4. Lupa tentang Halaman 404
Situs buatan tangan sering memiliki halaman 404 kustom. Di Astro, Anda membuat file 404.astro di src/pages/. File ini akan disajikan secara otomatis untuk rute apa pun yang tidak ada.
---
import BaseLayout from '../layouts/BaseLayout.astro';
---
<BaseLayout title="Page Not Found">
<h1>404</h1>
<p>Sorry, the page you're looking for doesn't exist.</p>
<a href="/">Go back home</a>
</BaseLayout>
Hasil Dunia Nyata: Apa yang Dicapai Penulis
Artikel How-To Geek memberikan pandangan jujur tentang proses migrasi. Penulis tidak hanya membangun ulang situs, tetapi juga meningkatkan struktur konten, menambahkan fitur baru, dan mengoptimalkan performa.
Kesimpulan: Apakah Astro Tepat untuk Situs Buatan Tangan Anda?
Jika Anda memelihara situs web buatan tangan yang telah berkembang melampaui beberapa halaman, migrasi ke Astro kemungkinan adalah langkah yang cerdas. Manfaatnya jelas:
- Pengembangan lebih cepat: Komponen yang dapat digunakan kembali dan konten Markdown mengurangi pekerjaan berulang.
- Performa lebih baik: Nol JavaScript secara default menghasilkan halaman yang sangat cepat.
- SEO yang lebih baik: Peta situs otomatis, data terstruktur, dan gambar yang dioptimalkan meningkatkan peringkat pencarian.
- Pemeliharaan lebih mudah: Perbarui komponen sekali, dan itu berubah di mana-mana.
Proses migrasi itu sendiri mudah. Mulailah dengan menyiapkan proyek Astro baru, ekstrak tata letak Anda menjadi komponen, lalu konversi halaman Anda ke file Markdown atau Astro. Gunakan Content Collections untuk data terstruktur, dan manfaatkan ekosistem integrasi untuk gambar, SEO, dan lainnya.
Astro bukan sekadar alat, ini adalah filosofi. Ia menghormati keahlian situs buatan tangan sambil menyediakan otomatisasi dan skalabilitas yang dibutuhkan pengembangan web modern. Jika Anda siap meninggalkan siklus salin-tempel, cobalah Astro.

