Convierta una lista de títulos en slugs URL únicos
Esta herramienta convierte, en una sola solicitud determinista, una lista ordenada de títulos de páginas, artículos, productos u otros encabezados en slugs aptos para URL.
Ejecutar — gratis
Pasa el texto a minúsculas, elimina los acentos latinos habituales, sustituye espacios y signos por guiones y conserva los dígitos. Si dos títulos generan la misma base, el resultado posterior recibe un sufijo numérico incremental. Se mantiene el orden original para que usted pueda alinear la salida con una importación, una cola editorial o una migración.
Cree un slug limpio para cada título
Envíe los títulos en el mismo orden en que desea recibir los resultados. Cada elemento se transforma en un componente URL compacto: las mayúsculas pasan a minúsculas, se eliminan los signos diacríticos latinos comunes y cada secuencia de espacios o puntuación se convierte en un solo guion. También se quitan los separadores iniciales y finales, mientras que los dígitos se conservan para versiones, capítulos, años o ediciones. La operación exige cadenas reales y no convierte silenciosamente objetos, booleanos o números, pues esa coerción podría crear rutas verosímiles pero erróneas. Además, cada título debe producir al menos una letra ASCII o un dígito después de normalizarse. La respuesta incluye el array de slugs en el orden de entrada y un recuento, por lo que usted puede confirmar la correspondencia exacta. No se consulta, almacena, reordena ni deduce información externa; la misma entrada siempre genera la misma salida.
Resuelva colisiones sin perder el orden
Títulos distintos pueden normalizarse al mismo slug porque desaparecen las diferencias de mayúsculas, acentos, espacios repetidos y puntuación. La primera aparición conserva la base; las siguientes reciben -2, -3 y sufijos crecientes. La unicidad se comprueba contra todos los slugs ya emitidos, no solo contando textos de origen idénticos. Esto resulta importante cuando un título natural ya termina en número o varias grafías convergen en una forma. El procesamiento de izquierda a derecha otorga prioridad clara al orden de entrada y hace reproducibles las ejecuciones. Si existe una prioridad editorial, coloque primero el título que deba conservar la forma sin sufijo. La herramienta no inspecciona su sitio ni su base de datos, por lo que desconoce rutas ya publicadas. Incluya los títulos existentes pertinentes o compare la salida con su propio índice de slugs reservados antes de guardar cambios.
Use el resultado con seguridad al publicar
La salida por lotes encaja especialmente bien entre datos editoriales y un gestor de contenidos. Mantenga cada slug junto a su fila de origen y no ordene el array por separado: la correspondencia posicional permite que una hoja importada, un script de migración o un generador estático asigne la ruta correcta. Valide toda la solicitud antes de persistir cambios, porque un título inválido rechaza la operación completa y evita una migración parcial. El algoritmo produce componentes URL ASCII conservadores; no translitera todos los sistemas de escritura, no selecciona palabras clave, no acorta títulos ni garantiza unicidad frente a registros omitidos. Esas tareas pertenecen a la edición o al almacenamiento. En automatizaciones, cada solicitud cuesta $0.002; la misma lógica determinista puede probarse en el navegador. Conserve títulos y slugs juntos para auditar redirecciones y no regenere rutas públicas consolidadas sin una política de redirección preparada.
Qué puede hacer con ella
Prepare una importación al CMS
Genere un componente de ruta único para cada título ordenado antes de insertar artículos o páginas en lote.
Migre un archivo de contenidos
Normalice encabezados antiguos y detecte sufijos por colisión sin perder la alineación con la exportación original.
Construya rutas para un sitio estático
Cree nombres de archivo o segmentos deterministas para una colección durante un proceso repetible.
Preguntas frecuentes
¿Qué ocurre si dos títulos generan el mismo slug?
El primero conserva la base; las colisiones posteriores reciben sufijos crecientes como -2, -3 y -4.
¿Se conserva el orden de entrada?
Sí. Cada slug ocupa la misma posición que su título y el recuento indica cuántos se generaron.
¿Cuánto cuesta una solicitud?
El precio de la API es $0.002 por solicitud, aunque haya títulos duplicados.
¿Comprueba los slugs que ya usa mi sitio?
No. Solo garantiza la unicidad dentro de la lista enviada y no accede a su sitio, CMS ni base de datos.
¿Por qué se rechazó un título?
Cada elemento debe ser una cadena y producir al menos una letra ASCII o un dígito tras la normalización.
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, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/data/slugify-batch \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"titles":["Getting Started","Getting Started","API Reference"]}'const res = await fetch("https://api.kit.forhosting.com/data/slugify-batch", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"titles": [
"Getting Started",
"Getting Started",
"API Reference"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/slugify-batch",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"titles": [
"Getting Started",
"Getting Started",
"API Reference"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/slugify-batch", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"titles":["Getting Started","Getting Started","API Reference"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"titles":["Getting Started","Getting Started","API Reference"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/slugify-batch", 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
{
"titles": [
"Getting Started",
"Getting Started",
"API Reference"
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.slugify_batch",
"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.
Límites
max_items | 10000 |
max_chars_per_title | 10000 |
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. |