Crear un slug de URL
Un nombre de producto escrito en vietnamita, un título de blog con guion largo o un nombre de archivo lleno de guiones bajos necesitan convertirse en lo mismo: una cadena corta, en minúsculas y separada por guiones que funcione en una URL. Esta API generadora de slugs elimina tildes, transcribe alfabetos no latinos y reduce la puntuación suelta para que el resultado sea seguro de enrutar, indexar y compartir, siempre.
Ejecutar — gratis
Corre en su navegador. Gratis y sin límite: sus datos no salen de esta página.
El problema que se esconde detrás de cada botón 'Guardar'
Los equipos de contenido rara vez piensan en los slugs hasta que uno rompe algo: dos artículos colisionan en la misma URL, un título en cirílico termina codificado como una cadena ilegible de signos de porcentaje, o un apóstrofe suelto cierra antes de tiempo un atributo HTML. Un slug parece una simple transformación de texto, pero hacerlo bien implica manejar la normalización Unicode, tablas de transliteración para alfabetos no latinos y una política consistente sobre qué hacer con números, guiones y palabras reservadas como 'admin' o 'null'.
Cómo procesa una cadena dev.slug
POST /dev/slug recibe un título y devuelve un task_id porque la generación se ejecuta de forma asíncrona. El proceso convierte el texto a minúsculas, normaliza el Unicode para que caracteres visualmente idénticos se reduzcan a una sola forma, transcribe caracteres con tilde y no latinos a su equivalente ASCII más cercano, reemplaza espacios y puntuación por un único separador, y recorta guiones al inicio o al final. El resultado es determinista: el mismo título siempre produce el mismo slug, algo esencial cuando se deduplica contenido en un catálogo grande.
De dónde vienen los slugs y por qué importan las reglas
La convención de segmentos de URL en minúsculas separados por guiones surgió de las primeras recomendaciones de motores de búsqueda y de plataformas CMS que competían por ser legibles y rastreables, mucho antes de que los dominios Unicode y la gestión de contenido multilingüe fueran comunes. Ese origen explica por qué la mayoría de las bibliotecas de slugs se construyeron pensando primero en alfabetos latinos, y por qué los títulos en árabe, japonés o coreano suelen quedar mal transliterados o simplemente descartados por herramientas que nunca se actualizaron para contenido global.
Cómo encaja en un flujo de publicación
Los equipos editoriales llaman a este endpoint en el momento en que se guarda un título, de modo que el slug esté listo antes de que la página salga en vivo, mientras que los catálogos de comercio electrónico lo llaman en lote al importar miles de nombres de producto desde un feed de proveedor. Como la respuesta llega mediante un webhook firmado o un enlace firmado válido por 24 horas, se integra sin fricciones en un worker de CMS basado en colas o en una sincronización nocturna del catálogo, sin bloquear la solicitud que creó el título.
Costo predecible, sin llamadas desperdiciadas
Una tarea fallida se reintenta automáticamente hasta tres veces y nunca se cobra si sigue sin completarse, así que las importaciones masivas con algunas filas mal formadas no inflan la factura. A $0.002 por solicitud, generar slugs para toda una migración de contenido es una partida pequeña y fija, no un costo de ingeniería abierto.
Qué puede hacer con ella
Publicar artículos de blog y noticias
Genere un slug limpio en el momento en que un editor guarda un titular, para que la URL final del artículo sea corta, legible y libre de riesgo de colisión con otra.
Importar catálogos de productos multilingües
Convierta nombres de producto proporcionados por proveedores en japonés, alemán o portugués en slugs ASCII consistentes durante importaciones masivas de catálogo.
Deduplicar contenido generado por usuarios
Normalice los títulos de publicaciones de la comunidad en slugs para detectar envíos casi duplicados antes de que se publiquen bajo URL distintas.
Migrar URL de un CMS antiguo
Regenere slugs a partir de títulos antiguos con formato inconsistente al mover el contenido a una nueva plataforma con convenciones de URL más estrictas.
Preguntas frecuentes
¿Qué es exactamente un slug?
Un slug es la parte de una URL en minúsculas y separada por guiones que se deriva de un título, por ejemplo convertir 'Las Mejores Cafeterías!' en las-mejores-cafeterias. La API generadora de slugs automatiza esa conversión de forma consistente.
¿Funciona con títulos que no están en inglés?
Sí. El endpoint transcribe caracteres con tilde y alfabetos no latinos, desde las tildes del español hasta el cirílico y las escrituras CJK, a un ASCII legible en lugar de descartarlos o dejar Unicode sin procesar en la URL.
¿La API para generar slugs es gratuita?
La herramienta de arriba es gratis en su navegador. La API es de pago: cada llamada se descuenta de su saldo prepago de ForHosting KIT — se recarga desde $10.00 (no caduca), se paga el precio publicado de cada solicitud, y una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens, y una tarea fallida no se cobra.
¿Cuánto cuesta cada solicitud?
Cada llamada a POST /dev/slug cuesta $0.002, y se cobra únicamente cuando la tarea se completa con éxito.
¿Puedo procesar miles de títulos en lote?
Sí. Como el endpoint es asíncrono y los resultados llegan mediante webhook, está pensado para importaciones masivas y migraciones de catálogo, no solo para llamadas individuales.
¿Dos títulos distintos pueden producir el mismo slug?
Es posible si dos títulos son lo suficientemente parecidos después de la normalización, ya que generar un slug es una transformación determinista pero con pérdida de información; los equipos suelen añadir un ID o sufijo corto como desempate a nivel de aplicación.
¿Qué pasa con los números y los caracteres especiales?
Los números se conservan tal cual, la puntuación y los espacios se reducen a guiones simples, y los caracteres sin un equivalente ASCII razonable se eliminan en lugar de dejarse mal formados.
¿Cómo obtengo el slug generado?
El resultado se entrega mediante un webhook firmado, recomendado para flujos automatizados, o un enlace firmado válido por 24 horas para recuperación manual.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/dev/slug \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"items":["valor-1","valor-2"]}'const res = await fetch("https://api.kit.forhosting.com/dev/slug", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"items": [
"valor-1",
"valor-2"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/slug",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"items": [
"valor-1",
"valor-2"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/slug", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"items":["valor-1","valor-2"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"items":["valor-1","valor-2"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/slug", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"items": [
"valor-1",
"valor-2"
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.slug",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |