Slugify testo (URL)
Normalizza il testo in un slug amichevole per l'URL, con supporto per minuscole, separatori e rimozione personalizzata delle parole di stop.
Perché usare Slugify?
🔍 Ottimizzazione SEO
Le parole chiave nell'URL aiutano i motori di ricerca a capire il contenuto della pagina, migliorando il posizionamento. Ad esempio, example.com/blog/how-to-learn-javascript è molto più efficace di example.com/blog/123.
👁️ Leggibilità e condivisione
Gli utenti possono capire il contenuto semplicemente guardando l'URL, rendendolo più adatto alla condivisione sui social media e più facile da ricordare o digitare manualmente.
💻 Compatibilità del sistema
Evita errori causati da caratteri speciali nei nomi dei file o negli URL, garantendo compatibilità tra piattaforme (Windows/Linux/macOS) e prevenendo problemi di codifica.
🗄️ Amichevole per il database
Come identificatore univoco (es. username, tag), evita rischi di SQL injection e facilita l'indicizzazione e le query.
Cos'è Slugify?
Uno slug è una sequenza di testo normalizzata utilizzata come URL, nome file o identificatore. Le operazioni comuni includono l'unificazione delle maiuscole/minuscole, la rimozione della punteggiatura e la connessione delle parole con separatori.
- Priorità ASCII: rimuovi accenti e simboli, conserva solo lettere, numeri e spazi
- Compatibilità Unicode: normalizza i caratteri di molte lingue con NFKD prima dell'elaborazione
- Amichevole per l'URL: il risultato contiene solo lettere, numeri e separatori, pronto per essere usato nei percorsi
Domande frequenti
Q: Come vengono gestiti i caratteri cinesi?
A: Di default, vengono rimossi i segni tonali e conservate le lettere pinyin. I caratteri cinesi puri potrebbero diventare vuoti; si consiglia di convertire manualmente in pinyin prima di applicare il slugify, o di utilizzare uno strumento di conversione pinyin.
Q: Perché il mio risultato è vuoto?
A: Potrebbe essere che l'input contenga solo punteggiatura, simboli o spazi, oppure che, dopo aver attivato la rimozione delle parole di stop, non rimangano parole valide. Prova a disattivare l'opzione delle parole di stop o a modificare il contenuto di input.
Q: Quale separatore devo usare, - o _?
A: Per il SEO si consiglia di usare - (trattino), poiché Google lo interpreta come uno spazio; _ (sottolineatura) viene invece considerato un concatenatore, ostacolando la suddivisione in parole. Per i nomi di file puoi scegliere liberamente.
Q: C'è un limite di lunghezza per il slug?
A: Tecnicamente non ci sono limiti, ma si consiglia di mantenere una lunghezza inferiore a 50 caratteri per facilitare la visualizzazione nell'URL e il SEO. Slug troppo lunghi potrebbero essere troncati dai motori di ricerca.
Best practice
Pratiche consigliate
- ✓ Mantienilo breve (consigliato < 50 caratteri)
- ✓ Evita caratteri speciali; usa solo lettere, numeri e separatori
- ✓ Usa lettere minuscole per evitare problemi di sensibilità maiuscole/minuscole
- ✓ Rimuovi le parole di stop per aumentare la densità semantica
Pratiche da evitare
- ✗ Non includere informazioni sensibili (es. ID, email, password)
- ✗ Non usare caratteri speciali (es. @#$%^&*)
- ✗ Non lasciare spazi o separatori consecutivi
- ✗ Non ripetere la stessa parola
Note tecniche
Utilizza la decomposizione NFKD e rimuove i segni combinatori (\p{M}), trasformando Café in Cafe. Supporta la maggior parte dei caratteri latini.
Basata sulle parole comuni in inglese (a/an/the/and/or/of/to/in/on/for/at/by/with); può essere estesa personalizzandola. Le parole di stop cinesi richiedono un trattamento aggiuntivo.
Richiede supporto per ES6+ e espressioni regolari Unicode (\p{...}). Tutti i browser moderni (Chrome 64+, Firefox 78+, Safari 11.1+) sono compatibili.
Come generare un Slug tramite un linguaggio di programmazione?
JavaScript
function slugify(text) {
return text
.toLowerCase()
.normalize("NFKD")
.replace(/[\u0300-\u036f]/g, "")
.replace(/[^\w\s-]/g, "")
.trim()
.replace(/[\s_-]+/g, "-")
.replace(/^-+|-+$/g, "");
}
PHP
function slugify($text) {
$text = mb_strtolower($text);
$text = iconv("UTF-8", "ASCII//TRANSLIT", $text);
$text = preg_replace("/[^\w\s-]/", "", $text);
$text = preg_replace("/[\s_-]+/", "-", $text);
return trim($text, "-");
}
Python
import re
import unicodedata
def slugify(text):
text = text.lower()
text = unicodedata.normalize("NFKD", text)
text = text.encode("ascii", "ignore").decode("ascii")
text = re.sub(r"[^\w\s-]", "", text)
text = re.sub(r"[\s_-]+", "-", text)
return text.strip("-")
Go
import (
"regexp"
"strings"
"golang.org/x/text/unicode/norm"
)
func Slugify(text string) string {
text = strings.ToLower(text)
text = norm.NFKD.String(text)
re := regexp.MustCompile(`[^\w\s-]`)
text = re.ReplaceAllString(text, "")
re = regexp.MustCompile(`[\s_-]+`)
text = re.ReplaceAllString(text, "-")
return strings.Trim(text, "-")
}
Ruby
require "unicode"
def slugify(text)
text = text.downcase
text = Unicode.nfkd(text).gsub(/[^\x00-\x7F]/, "")
text = text.gsub(/[^\w\s-]/, "")
text = text.gsub(/[\s_-]+/, "-")
text.strip.gsub(/^-+|-+$/, "")
end
Java
import java.text.Normalizer;
public static String slugify(String text) {
text = text.toLowerCase();
text = Normalizer.normalize(text, Normalizer.Form.NFKD);
text = text.replaceAll("[^\\w\\s-]", "");
text = text.replaceAll("[\\s_-]+", "-");
return text.replaceAll("^-+|-+$", "");
}