# Footer: quali link mostrare

> Come comporre il blocco dei link legali in base al tipo di sito, perché deve essere globale e come tenerlo allineato alle pagine effettivamente pubblicate.

<!-- Fonte: https://sitoanorma.it/docs/footer/blocco-link -->
<!-- Aggiornato: 2026-08-15 -->

Il blocco dei link legali cambia in base a cosa fa il sito. Un sito vetrina e un e-commerce hanno esigenze diverse, e mostrare link a pagine che non esistono è peggio che non mostrarli.

## Perché deve essere globale

Le pagine legali devono essere accessibili **da qualunque punto del sito**: l'utente deve poter consultare l'informativa privacy anche mentre è a metà di un checkout. Mettendo il blocco nel footer globale, il requisito è soddisfatto ovunque con un solo elemento.

## Quali link, per tipo di sito

| Tipo di sito | Link nel footer |
|--------------|-----------------|
| Vetrina / corporate | privacy, cookie¹, note legali, accessibilità² |
| E-commerce B2C | + termini di vendita, recesso, resi, spedizioni, garanzia, pagamenti |
| Sito con ≥ 50 dipendenti | + whistleblowing |
| Sito con contenuti AI | + informativa sulla trasparenza dei contenuti³ |

¹ Solo se il sito usa cookie non tecnici. Se non ne usa, una pagina che lo dichiara resta buona prassi.
² Per i soggetti rientranti nell'ambito dell'European Accessibility Act.
³ Vedi [AI Act e trasparenza dei contenuti](/docs/riferimenti/ai-act-trasparenza).

## Generarlo dalla configurazione

Il modo più robusto per evitare link orfani è **derivare il blocco dalla stessa lista** che governa quali pagine vengono pubblicate:

```ts
// config/pagine-legali.ts
export const PAGINE_LEGALI = [
  { slug: "privacy",       titolo: "Privacy Policy",  attiva: true },
  { slug: "cookie",        titolo: "Cookie Policy",   attiva: true },
  { slug: "note-legali",   titolo: "Note legali",     attiva: true },
  { slug: "accessibilita", titolo: "Accessibilità",   attiva: true },
  { slug: "recesso",       titolo: "Diritto di recesso", attiva: false }, // no e-commerce
];

export const IN_FOOTER = PAGINE_LEGALI.filter((p) => p.attiva);
```

```astro
<nav aria-label="Link legali">
  <ul>
    {IN_FOOTER.map((p) => (
      <li><a href={`/${p.slug}`}>{p.titolo}</a></li>
    ))}
  </ul>
</nav>
```

Se la stessa lista genera **sia le route sia i link**, un link orfano diventa impossibile per costruzione: disattivare una pagina la rimuove da entrambi.

## Ordine e presentazione

Nessuna norma impone un ordine, ma conviene:

- mettere per prime privacy e cookie, che sono le più cercate;
- non nascondere il blocco dietro un accordion chiuso;
- distinguerlo visivamente dai link di navigazione commerciale;
- mantenere dimensioni di testo e contrasti leggibili: è il posto dove più spesso si trova testo grigio chiaro a 10px, che non rispetta le WCAG.

## Cosa verificare

- [ ] Il blocco è presente su tutte le pagine.
- [ ] Ogni link punta a una pagina che esiste e risponde 200.
- [ ] I link mostrati corrispondono alle pagine effettivamente pubblicate.
- [ ] Il contrasto e la dimensione del testo rispettano le WCAG anche nel footer.
