Slugify de texto (URL)

Normaliza el texto en un slug amigable para URL, con soporte para minúsculas, separadores y palabras vacías personalizadas.

Parámetros y entrada

Se recomienda usar - o _, de 1 a 3 caracteres de longitud

Resultado

¿Por qué necesitas Slugify?

🔍 Optimización SEO

Las palabras clave en las URLs ayudan a los motores de búsqueda a entender el contenido de la página, mejorando su clasificación. Por ejemplo, example.com/blog/how-to-learn-javascript es mucho más amigable que example.com/blog/123.

👁️ Legibilidad y compartibilidad

Los usuarios pueden entender el contenido solo con mirar la URL, lo que la hace más amigable para compartir en redes sociales, fácil de recordar y de ingresar manualmente.

💻 Compatibilidad del sistema

Evita errores causados por caracteres especiales en nombres de archivos o URLs, garantiza compatibilidad entre plataformas (Windows/Linux/macOS) y previene problemas de codificación.

🗄️ Amigable para bases de datos

Ideal como identificador único (por ejemplo, nombres de usuario o etiquetas), reduce el riesgo de inyección SQL y facilita el indexado y las consultas.

¿Qué es Slugify?

Un slug es una cadena estandarizada de texto utilizada como URL, nombre de archivo o identificador. Los procesos comunes incluyen normalización de mayúsculas/minúsculas, eliminación de signos de puntuación y unión de palabras con separadores.

  • Prioridad ASCII: eliminar acentos y símbolos, conservando solo letras, números y espacios
  • Compatibilidad Unicode: normalizar caracteres de la mayoría de los idiomas mediante NFKD antes de procesar
  • Amigable para URL: el resultado contiene solo letras, números y separadores, listo para usar directamente en rutas

Casos de uso

URL de artículos de blog

¿Cómo aprender JavaScript?

how-to-learn-javascript

Nombres de archivo

Documento de requisitos del producto v2.0.docx

product-requirements-v2-0.docx

Identificadores de base de datos

Usuario-张三

user-zhang-san

Preguntas frecuentes

Q: ¿Cómo se manejan los caracteres chinos?

A: Por defecto, se eliminan los acentos y se conservan las letras pinyin. Los caracteres chinos puros pueden convertirse en cadenas vacías; se recomienda convertir manualmente a pinyin antes de aplicar slugify, o usar una herramienta de conversión de pinyin.

Q: ¿Por qué mi resultado está vacío?

A: Es posible que la entrada contenga solo signos de puntuación, símbolos o espacios, o que al activar la eliminación de palabras vacías no queden palabras restantes. Intente desactivar la opción de palabras vacías o ajustar el contenido de entrada.

Q: ¿Debo usar - o _ como separador?

A: Para SEO, se recomienda usar - (guión), ya que Google lo interpreta como un espacio; _ (guión bajo) se considera un conector, lo que dificulta la separación de palabras. Para nombres de archivo, puedes elegir cualquiera de los dos.

Q: ¿Hay un límite de longitud para el slug?

A: Técnicamente no hay límite, pero se recomienda mantenerlo por debajo de 50 caracteres para facilitar la visualización en URLs y mejorar el SEO. Los slugs demasiado largos pueden ser truncados por los motores de búsqueda.

Mejores prácticas

Prácticas recomendadas

  • Manténlo corto (sugerido: < 50 caracteres)
  • Evita caracteres especiales; usa solo letras, números y separadores
  • Convierte a minúsculas para evitar problemas de sensibilidad a mayúsculas/minúsculas
  • Elimina palabras vacías para aumentar la densidad semántica

Prácticas a evitar

  • No incluyas información sensible (como IDs, correos electrónicos o contraseñas)
  • No uses caracteres especiales (como @#$%^&*)
  • No conserves espacios ni separadores consecutivos
  • No repitas la misma palabra

Notas técnicas

Normalización Unicode:

Se utiliza NFKD para descomponer y eliminar marcas diacríticas (\p{M}), convirtiendo Café en Cafe. Compatible con la mayoría de los caracteres latinos.

Lista de palabras vacías:

Basada en palabras comunes en inglés (a/an/the/and/or/of/to/in/on/for/at/by/with); puede extenderse personalizadamente. Las palabras vacías en chino requieren procesamiento adicional.

Compatibilidad con navegadores:

Se requiere soporte para ES6+ y expresiones regulares Unicode (\p{...}). Todos los navegadores modernos (Chrome 64+, Firefox 78+, Safari 11.1+) lo admiten.

¿Cómo generar un Slug mediante un lenguaje de programación?

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("^-+|-+$", "");
}