Introduzione
Per anni, scrivere a mano un sito web è stato lo standard di riferimento per gli sviluppatori che volevano il controllo completo su ogni riga di HTML, CSS e JavaScript. Offriva una flessibilità senza pari e una profonda comprensione del codice. Ma man mano che i siti web crescono, con più pagine, più contenuti, più complessità, quell'approccio artigianale può trasformarsi in un incubo di manutenzione. Ti ritrovi a copiare e incollare barre di navigazione, aggiornare piè di pagina in decine di file e ottimizzare manualmente le risorse per le prestazioni.
È esattamente la situazione in cui si è trovato l'autore dell'articolo di How-To Geek. Il suo sito web, l'ultima riprogettazione risalente al 2018, era passato dal supportare sei o sette libri a molti di più. La correzione e l'aggiunta manuale erano diventate insostenibili. La soluzione? Ricostruire l'intero sito con Astro, un moderno generatore di siti statici che promette velocità, semplicità e una migliore esperienza per lo sviluppatore.
In questo post, analizzeremo quel percorso di migrazione, esploreremo le decisioni tecniche alla base e ti mostreremo come applicare gli stessi principi ai tuoi progetti. Che tu stia gestendo un blog personale, un portfolio o un sito di documentazione, le lezioni qui sono direttamente applicabili.
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.
L'Esperienza dello Sviluppatore: Perché Astro Vince
Oltre alle prestazioni, l'esperienza dello sviluppatore lavorando con Astro è un motivo importante per migrare. Ecco alcuni aspetti che l'autore di How-To Geek ha probabilmente apprezzato.
Sostituzione a Caldo dei Moduli (HMR)
Quando sviluppi in locale, il server di sviluppo di Astro fornisce un feedback immediato. Modifica un componente e il browser si aggiorna senza ricaricare completamente la pagina. Questo è un enorme aumento di produttività rispetto all'aggiornamento manuale del browser dopo ogni modifica.
Ecosistema di Integrazioni
Astro ha un ecosistema in crescita di integrazioni per strumenti popolari:
- Tailwind CSS: Per uno stile utility-first.
- React, Vue, Svelte: Usa i componenti del tuo framework preferito all'interno di Astro.
- MDX: Incorpora componenti React direttamente in Markdown.
- Ottimizzazione delle immagini: Ridimensionamento automatico e conversione del formato.
- Feed RSS: Genera feed RSS dalle tue raccolte di contenuti.
Questo significa che non sei vincolato a un unico framework. Puoi usare lo strumento migliore per ogni lavoro.
Supporto TypeScript
Astro ha un supporto TypeScript di prima classe. Puoi definire interfacce di props per i tuoi componenti, che catturano gli errori in fase di build anziché in fase di esecuzione.
---
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>
Questo cattura gli errori di tipo in anticipo e rende il tuo codice più manutenibile.
Insidie Comuni e Come Evitarle
Migrare da un sito scritto a mano ad Astro è generalmente fluido, ma ci sono alcune insidie comuni da tenere d'occhio.
1. Ingegnerizzare eccessivamente l'Albero dei Componenti
È tentante creare un componente per tutto, anche per un singolo paragrafo. Ma questo può portare a una complessità inutile. Inizia con gli elementi più ripetitivi (layout, navigazione, card) e crea componenti solo quando vedi uno schema che si ripete tre o più volte.
2. Ignorare il Processo di Build
Astro genera un sito statico, ma devi comunque configurare il processo di build. Assicurati che il tuo astro.config.mjs includa l'URL site corretto per la sitemap e che le impostazioni di ottimizzazione delle immagini corrispondano alle tue esigenze.
3. Non Usare le Raccolte di Contenuti per i Dati Strutturati
Se hai un elenco di elementi (libri, post del blog, pezzi del portfolio), usa le Raccolte di Contenuti. Forniscono sicurezza dei tipi, paginazione automatica e filtraggio facile. Elencare manualmente gli elementi in un componente è un passo indietro.
4. Dimenticare le Pagine di Errore 404
I siti scritti a mano hanno spesso una pagina 404 personalizzata. In Astro, crei un file 404.astro in src/pages/. Verrà servito automaticamente per qualsiasi route che non esiste.
---
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>
Risultati Reali: Cosa Ha Raggiunto l'Autore
L'articolo di How-To Geek offre uno sguardo sincero sul processo di migrazione. L'autore non ha solo ricostruito il sito, ma ha anche migliorato la struttura dei contenuti, aggiunto nuove funzionalità e ottimizzato le prestazioni.
Conclusione: Astro è Adatto al Tuo Sito Scritto a Mano?
Se stai gestendo un sito web scritto a mano che è cresciuto oltre poche pagine, migrare ad Astro è probabilmente una mossa intelligente. I vantaggi sono chiari:
- Sviluppo più veloce: Componenti riutilizzabili e contenuti in Markdown riducono il lavoro ripetitivo.
- Migliori prestazioni: Zero JavaScript per impostazione predefinita porta a pagine velocissime.
- SEO migliorato: Sitemap automatiche, dati strutturati e immagini ottimizzate migliorano il posizionamento nei motori di ricerca.
- Manutenzione più facile: Aggiorna un componente una volta e cambia ovunque.
Il processo di migrazione stesso è semplice. Inizia creando un nuovo progetto Astro, estrai il tuo layout in un componente, poi converti le tue pagine in file Markdown o Astro. Usa le Raccolte di Contenuti per i dati strutturati e sfrutta l'ecosistema di integrazioni per immagini, SEO e altro.
Astro non è solo uno strumento, è una filosofia. Rispetta l'artigianalità dei siti scritti a mano fornendo al contempo l'automazione e la scalabilità che lo sviluppo web moderno richiede. Se sei pronto a lasciarti alle spalle il ciclo di copia e incolla, dai una possibilità ad Astro.

