Generare uno slug URL
Uno slug è ciò che resta di un titolo quando sono ammessi solo lettere, cifre e un separatore. La trappola non sono gli accenti: sono le legature e gli apostrofi a rompere le implementazioni frettolose.
Gli accenti vengono rimossi per scomposizione Unicode (NFD), le legature œ e æ sono sciolte, l'eszett tedesca diventa ss e la ø danese una o.
Come funziona il controllo
- 1
Gli accenti vengono scomposti
La normalizzazione NFD separa la lettera dal suo accento, che viene poi eliminato: é diventa e.
- 2
Si trattano i casi che NFD non copre
œ diventa oe, æ diventa ae, ß diventa ss, ø diventa o, ł diventa l.
- 3
Il resto viene sostituito dal separatore
Punteggiatura e spazi diventano trattini, senza doppioni né trattini ai bordi.
Cosa rompe le implementazioni frettolose
La sola rimozione degli accenti trasforma «cœur» in «cur»: la legatura œ non è una lettera accentata e NFD non la scompone. Lo stesso vale per ß, ø e ł. Un apostrofo tipografico (’) non è quello dritto (') e va trattato a parte.
Uno slug non si cambia
Fa parte dell'URL, quindi dell'indirizzo indicizzato. Modificarlo equivale a pubblicare una pagina nuova e perdere lo storico della vecchia, salvo mettere un redirect 301. Meglio congelarlo alla pubblicazione che rigenerarlo a ogni cambio di titolo.
Domande frequenti
Trattino o trattino basso in un URL?
Trattino. Google tratta il trattino come separatore di parole e il trattino basso come carattere di parola: «mio_articolo» si legge come un termine solo, «mio-articolo» come due. La raccomandazione è invariata da quindici anni.
Conviene tenere gli accenti in un URL?
Tecnicamente gli URL accettano UTF-8 codificato in percentuale. In pratica «città» diventa «citt%C3%A0» appena si copia l'indirizzo, illeggibile in un'email o in una citazione. Lo slug senza accenti resta più sicuro.
Quanto dev'essere lungo uno slug?
Abbastanza per descrivere, abbastanza corto per stare in un risultato di ricerca: da tre a sei parole bastano quasi sempre. Le parole vuote (il, la, di, e) si possono togliere senza perdere senso, ma non è obbligatorio.
Lo stesso controllo via API
Questo strumento gira nel vostro browser. Per lo stesso controllo dal vostro codice, in blocco o lato server, l'API risponde in JSON.
Vedi la documentazione