Skip to main content
Mediaweb Logo

Mediaweb

Html Guida

Struttura del Documento HTML Spiegata: Guida Completa

Impara la struttura fondamentale di un documento HTML. Scopri come organizzare correttamente head, body e tutti gli elementi essenziali per pagine web ben strutturate.

September 3, 2025
10 min di lettura
Di Team Mediaweb
HTML
Struttura Documento
HTML5
Sviluppo Web
Best Practice

Struttura del Documento HTML Spiegata: Guida Completa

La struttura di un documento HTML è il fondamento su cui si basa ogni pagina web. Comprendere come organizzare correttamente gli elementi HTML non solo garantisce che le tue pagine funzionino correttamente, ma migliora anche l'accessibilità, l'ottimizzazione per i motori di ricerca e la manutenibilità del codice. Questa guida completa ti insegnerà tutto ciò che devi sapere sulla struttura dei documenti HTML.

Anatomia di Base di un Documento HTML

Ogni documento HTML valido segue una struttura specifica che include elementi obbligatori e opzionali. Ecco la struttura di base:

<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Titolo della Pagina</title>
</head>
<body>
    <h1>Contenuto della Pagina</h1>
    <p>Questo è il contenuto visibile della pagina.</p>
</body>
</html>

Analizziamo ogni componente in dettaglio.

Il DOCTYPE: Dichiarazione del Tipo di Documento

<!DOCTYPE html>

Il DOCTYPE è la prima riga di ogni documento HTML e serve a:

Scopo del DOCTYPE

  1. Specificare la versione HTML: Indica al browser quale versione di HTML utilizzare
  2. Attivare la modalità standard: Assicura che il browser interpreti il codice secondo gli standard web
  3. Evitare la modalità quirks: Previene comportamenti inconsistenti tra browser diversi

Evoluzione del DOCTYPE

HTML5 (Attuale):

<!DOCTYPE html>

HTML 4.01 Strict (Obsoleto):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

XHTML 1.0 (Obsoleto):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Il DOCTYPE di HTML5 è molto più semplice e dovrebbe essere utilizzato in tutti i nuovi progetti.

L'Elemento HTML: Il Contenitore Radice

<html lang="it">
    <!-- Tutto il contenuto del documento va qui -->
</html>

L'elemento <html> è il contenitore radice che racchiude tutto il contenuto della pagina.

Attributi Importanti dell'Elemento HTML

Attributo lang

<html lang="it">
<html lang="en">
<html lang="fr">
<html lang="es">

L'attributo lang specifica la lingua principale del documento e:

  • Migliora l'accessibilità per screen reader
  • Aiuta i motori di ricerca a comprendere il contenuto
  • Influenza la correzione ortografica del browser
  • Supporta la localizzazione automatica

Attributo dir

<html lang="ar" dir="rtl">  <!-- Arabo, da destra a sinistra -->
<html lang="he" dir="rtl">  <!-- Ebraico, da destra a sinistra -->
<html lang="it" dir="ltr">  <!-- Italiano, da sinistra a destra -->

Specifica la direzione del testo:

  • ltr: Left-to-Right (predefinito)
  • rtl: Right-to-Left

La Sezione HEAD: Metadati del Documento

La sezione <head> contiene metadati sulla pagina che non sono visibili agli utenti ma sono essenziali per browser, motori di ricerca e altri servizi web.

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="Descrizione della pagina">
    <meta name="keywords" content="parole, chiave, separate, da, virgole">
    <meta name="author" content="Nome Autore">
    <title>Titolo della Pagina</title>
    <link rel="stylesheet" href="styles.css">
    <link rel="icon" href="favicon.ico">
    <script src="script.js"></script>
</head>

Meta Tag Essenziali

Charset

<meta charset="UTF-8">

Specifica la codifica dei caratteri del documento:

  • UTF-8: Supporta tutti i caratteri Unicode (raccomandato)
  • ISO-8859-1: Solo caratteri latini (obsoleto)
  • Deve essere uno dei primi elementi nel <head>

Viewport

<meta name="viewport" content="width=device-width, initial-scale=1.0">

Controlla come la pagina viene visualizzata sui dispositivi mobili:

  • width=device-width: Adatta la larghezza al dispositivo
  • initial-scale=1.0: Zoom iniziale al 100%
  • user-scalable=no: Disabilita lo zoom (sconsigliato per accessibilità)

Description

<meta name="description" content="Descrizione concisa e accattivante della pagina che appare nei risultati di ricerca">
  • Lunghezza ideale: 150-160 caratteri
  • Utilizzata dai motori di ricerca negli snippet
  • Influenza il click-through rate

Keywords (Deprecato)

<meta name="keywords" content="html, css, javascript, sviluppo web">

Nota: I meta keywords sono largamente ignorati dai motori di ricerca moderni a causa dell'abuso passato.

Author

<meta name="author" content="Mario Rossi">

Specifica l'autore del documento.

Robots

<meta name="robots" content="index, follow">
<meta name="robots" content="noindex, nofollow">
<meta name="robots" content="index, nofollow">

Controlla come i motori di ricerca indicizzano la pagina:

  • index/noindex: Indicizza o non indicizzare la pagina
  • follow/nofollow: Segui o non seguire i link nella pagina

Open Graph Meta Tags

Per una migliore condivisione sui social media:

<meta property="og:title" content="Titolo della Pagina">
<meta property="og:description" content="Descrizione della pagina">
<meta property="og:image" content="https://esempio.com/immagine.jpg">
<meta property="og:url" content="https://esempio.com/pagina">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Nome del Sito">

Twitter Card Meta Tags

<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@nomeutente">
<meta name="twitter:title" content="Titolo della Pagina">
<meta name="twitter:description" content="Descrizione della pagina">
<meta name="twitter:image" content="https://esempio.com/immagine.jpg">

L'Elemento Title

<title>Titolo della Pagina - Nome del Sito</title>

Il titolo è cruciale per:

  • SEO: Fattore di ranking importante
  • Usabilità: Appare nella scheda del browser
  • Social sharing: Utilizzato quando la pagina viene condivisa
  • Bookmarks: Nome predefinito per i segnalibri

Best practice per i titoli:

  • Lunghezza: 50-60 caratteri
  • Unico per ogni pagina
  • Descrittivo e accattivante
  • Include parole chiave rilevanti

Collegamenti a Risorse Esterne

Fogli di Stile CSS

<link rel="stylesheet" href="styles.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap">

Favicon

<link rel="icon" href="favicon.ico">
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png">
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png">

Preconnect e DNS Prefetch

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://example.com">

Ottimizzano le prestazioni precaricando connessioni a domini esterni.

Script nel Head

<script src="script.js"></script>
<script>
    // JavaScript inline
    console.log('Pagina caricata');
</script>

Nota: Gli script nel <head> bloccano il rendering. Considera di spostarli prima della chiusura del <body> o utilizzare defer/async.

La Sezione BODY: Contenuto Visibile

La sezione <body> contiene tutto il contenuto visibile della pagina web.

<body>
    <header>
        <nav>Menu di navigazione</nav>
    </header>
    
    <main>
        <section>
            <h1>Titolo Principale</h1>
            <p>Contenuto principale della pagina.</p>
        </section>
    </main>
    
    <aside>
        <p>Contenuto laterale o correlato.</p>
    </aside>
    
    <footer>
        <p>Informazioni di copyright e contatti.</p>
    </footer>
</body>

Elementi Semantici HTML5

HTML5 ha introdotto elementi semantici che migliorano la struttura e l'accessibilità:

<header>
    <h1>Nome del Sito</h1>
    <nav>
        <ul>
            <li><a href="/">Home</a></li>
            <li><a href="/about">Chi Siamo</a></li>
            <li><a href="/contact">Contatti</a></li>
        </ul>
    </nav>
</header>

Rappresenta l'intestazione di una pagina o sezione.

<nav aria-label="Menu principale">
    <ul>
        <li><a href="/" aria-current="page">Home</a></li>
        <li><a href="/products">Prodotti</a></li>
        <li><a href="/services">Servizi</a></li>
        <li><a href="/contact">Contatti</a></li>
    </ul>
</nav>

Contiene link di navigazione principali.

Main

<main>
    <h1>Contenuto Principale</h1>
    <p>Il contenuto principale unico di questa pagina.</p>
</main>

Racchiude il contenuto principale della pagina. Deve essere unico per pagina.

Section

<section>
    <h2>Sezione di Contenuto</h2>
    <p>Contenuto tematicamente correlato.</p>
</section>

Raggruppa contenuto tematicamente correlato.

Article

<article>
    <header>
        <h2>Titolo dell'Articolo</h2>
        <p>Pubblicato il <time datetime="2025-09-03">3 Settembre 2025</time></p>
    </header>
    <p>Contenuto dell'articolo che può esistere indipendentemente.</p>
</article>

Contenuto indipendente che può essere distribuito separatamente.

Aside

<aside>
    <h3>Articoli Correlati</h3>
    <ul>
        <li><a href="/articolo1">Primo Articolo</a></li>
        <li><a href="/articolo2">Secondo Articolo</a></li>
    </ul>
</aside>

Contenuto correlato ma non essenziale al contenuto principale.

<footer>
    <p>&copy; 2025 Nome Azienda. Tutti i diritti riservati.</p>
    <nav aria-label="Menu footer">
        <a href="/privacy">Privacy Policy</a>
        <a href="/terms">Termini di Servizio</a>
    </nav>
</footer>

Informazioni di chiusura per la pagina o sezione.

Strutture di Documento Comuni

Struttura Blog

<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Titolo del Post - Nome Blog</title>
    <meta name="description" content="Descrizione del post del blog">
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <header>
        <h1>Nome del Blog</h1>
        <nav>
            <ul>
                <li><a href="/">Home</a></li>
                <li><a href="/categories">Categorie</a></li>
                <li><a href="/about">Chi Sono</a></li>
            </ul>
        </nav>
    </header>
    
    <main>
        <article>
            <header>
                <h1>Titolo del Post</h1>
                <p>Pubblicato il <time datetime="2025-09-03">3 Settembre 2025</time> da <span>Autore</span></p>
            </header>
            
            <div>
                <p>Contenuto del post...</p>
            </div>
            
            <footer>
                <p>Tag: <a href="/tag/html">HTML</a>, <a href="/tag/css">CSS</a></p>
            </footer>
        </article>
    </main>
    
    <aside>
        <section>
            <h2>Post Recenti</h2>
            <ul>
                <li><a href="/post1">Post 1</a></li>
                <li><a href="/post2">Post 2</a></li>
            </ul>
        </section>
    </aside>
    
    <footer>
        <p>&copy; 2025 Nome Blog. Tutti i diritti riservati.</p>
    </footer>
</body>
</html>

Struttura E-commerce

<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Nome Prodotto - Negozio Online</title>
    <meta name="description" content="Descrizione del prodotto">
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <header>
        <div>
            <h1>Logo Negozio</h1>
            <form role="search">
                <input type="search" placeholder="Cerca prodotti...">
                <button type="submit">Cerca</button>
            </form>
            <nav>
                <a href="/cart">Carrello (0)</a>
                <a href="/account">Account</a>
            </nav>
        </div>
        
        <nav aria-label="Menu principale">
            <ul>
                <li><a href="/electronics">Elettronica</a></li>
                <li><a href="/clothing">Abbigliamento</a></li>
                <li><a href="/home">Casa</a></li>
            </ul>
        </nav>
    </header>
    
    <main>
        <nav aria-label="Breadcrumb">
            <ol>
                <li><a href="/">Home</a></li>
                <li><a href="/electronics">Elettronica</a></li>
                <li aria-current="page">Smartphone</li>
            </ol>
        </nav>
        
        <section>
            <h1>Nome Prodotto</h1>
            <div>
                <img src="prodotto.jpg" alt="Nome Prodotto">
                <div>
                    <p>Descrizione del prodotto...</p>
                    <p>Prezzo: €299</p>
                    <button>Aggiungi al Carrello</button>
                </div>
            </div>
        </section>
    </main>
    
    <footer>
        <section>
            <h2>Servizio Clienti</h2>
            <ul>
                <li><a href="/help">Aiuto</a></li>
                <li><a href="/returns">Resi</a></li>
                <li><a href="/shipping">Spedizioni</a></li>
            </ul>
        </section>
    </footer>
</body>
</html>

Struttura Portfolio

<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Mario Rossi - Designer Grafico</title>
    <meta name="description" content="Portfolio di Mario Rossi, designer grafico specializzato in branding e web design">
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <header>
        <h1>Mario Rossi</h1>
        <p>Designer Grafico</p>
        <nav>
            <ul>
                <li><a href="#about">Chi Sono</a></li>
                <li><a href="#portfolio">Portfolio</a></li>
                <li><a href="#contact">Contatti</a></li>
            </ul>
        </nav>
    </header>
    
    <main>
        <section id="about">
            <h2>Chi Sono</h2>
            <p>Descrizione professionale...</p>
        </section>
        
        <section id="portfolio">
            <h2>I Miei Lavori</h2>
            <div>
                <article>
                    <h3>Progetto 1</h3>
                    <img src="progetto1.jpg" alt="Screenshot Progetto 1">
                    <p>Descrizione del progetto...</p>
                </article>
                
                <article>
                    <h3>Progetto 2</h3>
                    <img src="progetto2.jpg" alt="Screenshot Progetto 2">
                    <p>Descrizione del progetto...</p>
                </article>
            </div>
        </section>
        
        <section id="contact">
            <h2>Contattami</h2>
            <form>
                <label for="name">Nome:</label>
                <input type="text" id="name" name="name" required>
                
                <label for="email">Email:</label>
                <input type="email" id="email" name="email" required>
                
                <label for="message">Messaggio:</label>
                <textarea id="message" name="message" required></textarea>
                
                <button type="submit">Invia</button>
            </form>
        </section>
    </main>
    
    <footer>
        <p>&copy; 2025 Mario Rossi. Tutti i diritti riservati.</p>
        <nav>
            <a href="https://linkedin.com/in/mariorossi">LinkedIn</a>
            <a href="https://behance.net/mariorossi">Behance</a>
            <a href="mailto:mario@esempio.com">Email</a>
        </nav>
    </footer>
</body>
</html>

Best Practice per la Struttura del Documento

1. Usa HTML5 Semantico

<!-- Buono -->
<article>
    <header>
        <h1>Titolo</h1>
    </header>
    <section>
        <p>Contenuto...</p>
    </section>
</article>

<!-- Evita -->
<div class="article">
    <div class="header">
        <h1>Titolo</h1>
    </div>
    <div class="content">
        <p>Contenuto...</p>
    </div>
</div>

2. Mantieni una Gerarchia Logica dei Titoli

<!-- Corretto -->
<h1>Titolo Principale</h1>
<h2>Sottosezione</h2>
<h3>Sotto-sottosezione</h3>
<h2>Altra Sottosezione</h2>

<!-- Scorretto -->
<h1>Titolo Principale</h1>
<h3>Salto di livello</h3>
<h2>Ordine sbagliato</h2>

3. Un Solo Elemento Main per Pagina

<!-- Corretto -->
<body>
    <header>...</header>
    <main>
        <h1>Contenuto Principale</h1>
        <p>...</p>
    </main>
    <footer>...</footer>
</body>

<!-- Scorretto -->
<body>
    <main>Primo main</main>
    <main>Secondo main</main>
</body>

4. Usa Landmark ARIA quando Necessario

<nav aria-label="Menu principale">...</nav>
<nav aria-label="Breadcrumb">...</nav>
<section aria-labelledby="news-heading">
    <h2 id="news-heading">Ultime Notizie</h2>
</section>

5. Ottimizza per le Prestazioni

<head>
    <!-- CSS critici inline per above-the-fold -->
    <style>
        /* CSS critici */
    </style>
    
    <!-- CSS non critici caricati in modo asincrono -->
    <link rel="preload" href="styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
    
    <!-- JavaScript con defer -->
    <script src="script.js" defer></script>
</head>

Validazione e Testing

Strumenti di Validazione

  1. W3C Markup Validator: https://validator.w3.org/
  2. HTML5 Validator: https://html5.validator.nu/
  3. WAVE Web Accessibility Evaluator: https://wave.webaim.org/

Test di Accessibilità

<!-- Usa strumenti come -->
<!-- - axe DevTools -->
<!-- - Lighthouse -->
<!-- - Screen reader testing -->

Test Cross-Browser

Testa la tua struttura su:

  • Chrome
  • Firefox
  • Safari
  • Edge
  • Dispositivi mobili

Errori Comuni da Evitare

1. DOCTYPE Mancante o Scorretto

<!-- Scorretto -->
<html>
<head>...</head>

<!-- Corretto -->
<!DOCTYPE html>
<html>
<head>...</head>

2. Meta Charset Mancante

<!-- Scorretto -->
<head>
    <title>Titolo</title>
</head>

<!-- Corretto -->
<head>
    <meta charset="UTF-8">
    <title>Titolo</title>
</head>

3. Elementi Annidati Incorrettamente

<!-- Scorretto -->
<p><div>Contenuto</div></p>

<!-- Corretto -->
<div><p>Contenuto</p></div>

4. Attributi lang Mancanti

<!-- Scorretto -->
<html>

<!-- Corretto -->
<html lang="it">

Struttura per Diversi Tipi di Contenuto

Landing Page

<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Prodotto Rivoluzionario - Acquista Ora</title>
    <meta name="description" content="Scopri il prodotto che cambierà la tua vita. Offerta limitata!">
</head>
<body>
    <header>
        <h1>Prodotto Rivoluzionario</h1>
    </header>
    
    <main>
        <section>
            <h2>Trasforma la Tua Vita Oggi</h2>
            <p>Descrizione accattivante...</p>
            <button>Acquista Ora</button>
        </section>
        
        <section>
            <h2>Testimonianze</h2>
            <!-- Recensioni clienti -->
        </section>
        
        <section>
            <h2>Garanzia</h2>
            <!-- Informazioni garanzia -->
        </section>
    </main>
    
    <footer>
        <p>Contatti e informazioni legali</p>
    </footer>
</body>
</html>

Documentazione Tecnica

<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>API Documentation - Guida Sviluppatori</title>
    <meta name="description" content="Documentazione completa per l'API">
</head>
<body>
    <header>
        <h1>API Documentation</h1>
        <nav>
            <ul>
                <li><a href="#getting-started">Iniziare</a></li>
                <li><a href="#endpoints">Endpoints</a></li>
                <li><a href="#examples">Esempi</a></li>
            </ul>
        </nav>
    </header>
    
    <main>
        <section id="getting-started">
            <h2>Come Iniziare</h2>
            <p>Guida introduttiva...</p>
        </section>
        
        <section id="endpoints">
            <h2>Endpoints API</h2>
            <article>
                <h3>GET /users</h3>
                <p>Recupera lista utenti...</p>
                <pre><code>curl -X GET https://api.esempio.com/users</code></pre>
            </article>
        </section>
    </main>
    
    <aside>
        <nav aria-label="Indice">
            <h2>Indice</h2>
            <ul>
                <li><a href="#authentication">Autenticazione</a></li>
                <li><a href="#rate-limits">Rate Limits</a></li>
                <li><a href="#errors">Gestione Errori</a></li>
            </ul>
        </nav>
    </aside>
    
    <footer>
        <p>© 2025 API Documentation</p>
    </footer>
</body>
</html>

Conclusione

La struttura del documento HTML è il fondamento di ogni pagina web di successo. Una struttura ben organizzata non solo migliora l'esperienza utente, ma facilita anche l'indicizzazione da parte dei motori di ricerca, migliora l'accessibilità e rende il codice più manutenibile.

Ricorda questi punti chiave:

  1. Inizia sempre con un DOCTYPE valido
  2. Usa elementi semantici HTML5 per migliorare significato e accessibilità
  3. Organizza i metadati nel head per ottimizzare SEO e condivisione social
  4. Mantieni una gerarchia logica dei titoli e della struttura
  5. Valida sempre il tuo HTML per assicurarti che sia conforme agli standard

La padronanza della struttura HTML è un investimento che ripaga nel tempo, rendendo i tuoi progetti web più professionali, accessibili e performanti. Continua a praticare con diversi tipi di contenuto e rimani aggiornato sulle evoluzioni degli standard web.

Con una solida comprensione della struttura del documento HTML, hai le basi per creare esperienze web eccezionali che funzionano bene per tutti gli utenti, su tutti i dispositivi e in tutti i contesti.

Ultimo aggiornamento: September 10, 2025