Generador de Slug

Convierte cualquier texto en un slug limpio y compatible con URLs

Prueba un ejemplo
Separador

Texto de entrada

Slug

Se ejecuta localmente · Es seguro pegar secretos
El slug aparecerá aquí…

¿Qué es un slug de URL?

Un slug de URL es la parte de una dirección web que identifica una página específica de forma legible para los usuarios. En la URL https://ejemplo.com/blog/mi-primer-articulo, el slug es mi-primer-articulo. Un generador de slug transforma el título o descripción de una página en una cadena que contiene únicamente letras minúsculas, números y guiones (u otro separador elegido). Este proceso elimina espacios, suprime acentos y diacríticos, descarta caracteres especiales y normaliza los espacios en blanco en separadores individuales.

La generación de slugs es un paso estándar en sistemas de gestión de contenidos, generadores de sitios estáticos, plataformas de blog y cualquier aplicación que derive URLs a partir de la entrada del usuario. WordPress, Ghost, Hugo, Next.js y Django incluyen lógica de generación de slugs porque las URLs legibles mejoran tanto la usabilidad como la optimización para motores de búsqueda. Un slug bien formado indica al usuario el contenido de una página antes de hacer clic en el enlace.

El término "slug" proviene del mundo editorial, donde se utilizaba como etiqueta corta para identificar una historia durante la producción. En el desarrollo web, el slug cumple la misma función: es un identificador compacto, único y seguro para URLs, derivado de un título o nombre más largo. Como los slugs se generan mediante programación, un generador de slugs fiable garantiza coherencia en todas las páginas y configuraciones regionales.

¿Por qué usar este generador de slug?

Crear slugs de URL de forma manual es propenso a errores. Olvidar eliminar un acento, dejar un guion doble o no contemplar un caso especial con entrada Unicode puede producir URLs rotas o poco elegantes. Esta herramienta gestiona esos problemas de forma automática.

Conversión instantánea
Pega o escribe cualquier texto y observa cómo el slug se actualiza en tiempo real. Sin envío de formularios ni recarga de página. Útil cuando necesitas slugs para un lote de títulos de artículos o nombres de productos.
🔒
Procesamiento con privacidad
Toda la generación de slugs se ejecuta en tu navegador. Tu texto nunca abandona la página, por lo que puedes convertir con seguridad títulos en borrador, nombres de proyectos internos o nombres de productos no publicados.
⚙️
Salida configurable
Elige entre separadores de guion, guion bajo o punto. Activa o desactiva las minúsculas. Esto cubre las convenciones de slug más habituales en distintos frameworks y CMSes.
🌐
Gestión de Unicode y acentos
El generador aplica la normalización NFD para eliminar los diacríticos de los caracteres acentuados. Café se convierte en cafe, naïve en naive. Los caracteres no latinos que no pueden transliterarse se eliminan de forma limpia.

Casos de uso del generador de slug

Desarrollador frontend — Planificación de rutas
Genera slugs coherentes para las rutas de página en React Router, Next.js o Nuxt antes de configurar los segmentos de ruta dinámica. Verifica que los títulos con caracteres especiales produzcan rutas limpias.
Ingeniero backend — Identificadores de base de datos
Crea slugs seguros para URLs en registros de base de datos que necesiten identificadores legibles. Los slugs funcionan bien como claves secundarias junto a IDs numéricos para endpoints de API REST como /api/products/auriculares-inalambricos.
DevOps — Nombres de archivos de configuración
Convierte nombres de servicios o etiquetas de entorno en cadenas seguras para el sistema de archivos, para archivos de configuración, etiquetas de imagen Docker o nombres de recursos de Kubernetes donde no se permiten caracteres especiales.
Ingeniero de QA — Generación de datos de prueba
Genera rápidamente variantes de slug a partir de títulos de casos de prueba para verificar el enrutamiento de URLs, las reglas de redirección y el comportamiento de las etiquetas canónicas en entornos de staging.
Ingeniero de datos — Normalización de columnas
Normaliza encabezados de columnas desordenados procedentes de importaciones CSV o Excel en identificadores coherentes en snake_case o kebab-case para usar en esquemas de base de datos o canalizaciones de datos.
Estudiante — Proyectos con CMS y blogs
Aprende cómo funciona la generación de slugs al construir un blog con WordPress, Jekyll o un CMS personalizado. Usa esta herramienta para comparar tus slugs manuales con una implementación de referencia.

Reglas de generación de slug y gestión de caracteres

La generación de slugs sigue una secuencia predecible de transformaciones. Entender cada paso te ayuda a depurar resultados inesperados o a construir tu propia función slugify.

  1. 1. Normalización Unicode (NFD)
    Descompón los caracteres combinados en carácter base + marca de combinación. Por ejemplo, é (U+00E9) se convierte en e + acento agudo combinante (U+0301). Esto hace que los diacríticos sean eliminables en el siguiente paso.
  2. 2. Eliminar diacríticos
    Elimina todos los caracteres del bloque Unicode de marcas diacríticas combinantes (U+0300–U+036F). Tras este paso, café se convierte en cafe y Ñ se convierte en N.
  3. 3. Eliminar caracteres especiales
    Reemplaza cualquier carácter que no sea una letra, dígito, espacio en blanco o guion por un espacio. Esto descarta puntuación, símbolos y caracteres sin equivalente ASCII.
  4. 4. Recortar y colapsar espacios en blanco
    Elimina los espacios en blanco iniciales y finales, luego colapsa todas las secuencias de espacios consecutivos, guiones bajos o guiones en un único separador elegido.
  5. 5. Aplicar mayúsculas/minúsculas y separador
    Convierte a minúsculas (opcional) y une las palabras con el separador elegido: guion (-), guion bajo (_) o punto (.).

Referencia de transformación de caracteres

La tabla siguiente muestra cómo se gestionan los caracteres habituales durante la generación de slugs:

EntradaSalidaRegla aplicada
Hello Worldhello-worldLowercase + space → hyphen
Café au Laitcafe-au-laitNFD normalization strips é → e
naïve résuménaive-resumeMultiple diacritics removed
Price: $9.99!price-9-99Symbols ($, !, :) removed
too many too-manyWhitespace trimmed and collapsed
one--two___threeone-two-threeMixed separators collapsed
Привет мирprivet-mirCyrillic (if transliteration) or removed
file_name.txtfile-name-txtDots and underscores replaced
React & Vuereact-vueAmpersand removed
2026-03-302026-03-30Digits and hyphens preserved

Ejemplos de código

Generación de slugs en lenguajes y frameworks populares. Cada ejemplo gestiona la normalización Unicode, la eliminación de diacríticos y la inserción de separadores.

JavaScript
function slugify(text, separator = '-') {
  return text
    .normalize('NFD')                   // decompose accented chars
    .replace(/[\u0300-\u036f]/g, '')    // strip diacritics
    .toLowerCase()
    .replace(/[^\w\s-]/g, ' ')          // drop special chars
    .trim()
    .replace(/[\s_-]+/g, separator)     // collapse whitespace → separator

  // slugify('Café au Lait')      → "cafe-au-lait"
  // slugify('Hello World', '_')  → "hello_world"
}

// Node.js alternative using the `slugify` npm package:
// npm install slugify
// const slugify = require('slugify')
// slugify('Hello World', { lower: true, strict: true }) → "hello-world"
Python
import re
import unicodedata

def slugify(text: str, separator: str = '-') -> str:
    """Convert text to a URL-safe slug."""
    text = unicodedata.normalize('NFD', text)
    text = text.encode('ascii', 'ignore').decode('ascii')  # strip non-ASCII
    text = text.lower()
    text = re.sub(r'[^\w\s-]', ' ', text)
    text = text.strip()
    text = re.sub(r'[\s_-]+', separator, text)
    return text

# slugify('Café au Lait')      → "cafe-au-lait"
# slugify('Hello World', '_')  → "hello_world"

# Alternative: python-slugify (pip install python-slugify)
# from slugify import slugify
# slugify('Café au Lait')  → "cafe-au-lait"
Go
package main

import (
	"regexp"
	"strings"
	"unicode"

	"golang.org/x/text/unicode/norm"
	"golang.org/x/text/transform"
	"golang.org/x/text/runes"
)

func slugify(text string) string {
	// NFD normalize and strip diacritics
	t := transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC)
	result, _, _ := transform.String(t, text)

	result = strings.ToLower(result)
	re := regexp.MustCompile(`[^\w\s-]+`)
	result = re.ReplaceAllString(result, " ")
	result = strings.TrimSpace(result)
	re = regexp.MustCompile(`[\s_-]+`)
	result = re.ReplaceAllString(result, "-")
	return result
}

// slugify("Café au Lait") → "cafe-au-lait"
// slugify("Hello World")  → "hello-world"
PHP
function slugify(string $text, string $separator = '-'): string {
    // Transliterate non-ASCII characters
    $text = transliterator_transliterate(
        'Any-Latin; Latin-ASCII; Lower()', $text
    );
    // Remove anything that is not a word char, space, or hyphen
    $text = preg_replace('/[^\w\s-]/', ' ', $text);
    $text = trim($text);
    $text = preg_replace('/[\s_-]+/', $separator, $text);
    return $text;
}

// slugify('Café au Lait')      → "cafe-au-lait"
// slugify('Hello World', '_')  → "hello_world"

Preguntas frecuentes

¿Cuál es la diferencia entre un slug y una ruta de URL?
Una ruta de URL es el segmento completo después del dominio, como /blog/2026/mi-articulo. Un slug es la parte legible que identifica un recurso específico dentro de esa ruta, típicamente el último segmento: mi-articulo. Los slugs suelen derivarse de títulos, mientras que el resto de la ruta refleja la estructura de enrutamiento del sitio.
¿Cómo gestiona la generación de slugs los sistemas de escritura no latinos, como el chino o el árabe?
Los generadores de slugs estándar que utilizan la normalización NFD y la eliminación de diacríticos no pueden transliterar sistemas de escritura no latinos. Caracteres como los hanzi chinos o las letras árabes no tienen equivalente ASCII, por lo que se eliminan en el paso de limpieza de caracteres especiales. Para conservar contenido no latino en los slugs, necesitas una biblioteca de transliteración como limax (JavaScript), python-slugify con el backend unidecode, o una tabla de mapeo personalizada.
¿Debo usar guiones o guiones bajos en los slugs de URL?
Google trata los guiones como separadores de palabras, pero los guiones bajos como conectores de palabras. El slug mi-primer-articulo se interpreta como tres palabras (mi, primer, articulo), mientras que mi_primer_articulo se lee como un único token. Para SEO, los guiones son la elección estándar en slugs de URL. Los guiones bajos son comunes en nombres de archivos, columnas de base de datos e identificadores de programación, donde actúan como conectores seguros para variables.
¿Qué longitud debe tener un slug de URL?
Google muestra aproximadamente 60 caracteres de una URL en los resultados de búsqueda antes de truncarla. Los slugs más cortos son más fáciles de leer, compartir y escribir. Apunta a 3 o 6 palabras. Elimina las palabras vacías (el, la, un, una, y, o, en) cuando no cambian el significado: como-construir-app-nextjs es mejor que como-construir-una-app-de-next-js-en-2026.
¿La generación de slugs es lo mismo que la codificación de URL?
No. La codificación de URL (percent-encoding) reemplaza los caracteres no seguros con tripletes de signo de porcentaje, como %20 para un espacio. La generación de slugs elimina o reemplaza por completo los caracteres no seguros, produciendo una cadena limpia sin artefactos de codificación. Un slug nunca contiene signos de porcentaje, espacios ni caracteres especiales. La codificación de URL preserva el contenido original; la generación de slugs lo transforma en algo nuevo.
¿Pueden dos títulos distintos producir el mismo slug?
Sí. Los títulos que difieren solo en puntuación, acentos o mayúsculas suelen colapsar en el mismo slug. Por ejemplo, Résumé Tips y Resume Tips producen ambos resume-tips. En contextos de CMS o base de datos, necesitas una comprobación de unicidad que añada un sufijo numérico (resume-tips-2) cuando se produzca una colisión.
¿Cómo genero slugs en WordPress o Django?
WordPress genera slugs automáticamente a partir del título de la entrada utilizando sanitize_title(). Puedes editar el slug en el editor de entradas. Django proporciona la función slugify() en django.utils.text, que gestiona bien la entrada ASCII. Para soporte Unicode, pasa allow_unicode=True. Ambas plataformas almacenan los slugs en la base de datos junto al título completo.