Converta uma lista de títulos em slugs de URL únicos
Esta ferramenta converte uma lista ordenada de títulos de páginas, artigos, produtos ou outros cabeçalhos em slugs adequados para URL em uma única solicitação determinística.
Executar grátis
Ela transforma letras em minúsculas, remove acentos latinos comuns, troca espaços e pontuação por hífens e preserva dígitos. Quando dois títulos geram a mesma base, o resultado posterior recebe um sufixo numérico crescente. A ordem original é mantida, facilitando o alinhamento da saída com uma importação, fila editorial, migração ou fluxo de publicação.
Crie um slug limpo para cada título
Envie os títulos exatamente na ordem em que você deseja receber os resultados. Cada título vira um componente compacto de URL: letras maiúsculas passam para minúsculas, sinais diacríticos latinos comuns são removidos e cada sequência de espaços ou pontuação vira um único hífen. Separadores no início e no fim desaparecem, mas os dígitos permanecem, o que atende versões, capítulos, anos e edições. A operação exige strings verdadeiras e não converte silenciosamente objetos, booleanos ou números, pois essa coerção pode criar URLs plausíveis, porém incorretas. Cada título também precisa produzir ao menos uma letra ASCII ou um dígito após a normalização. A resposta traz o array de slugs na mesma ordem e uma contagem, permitindo confirmar a correspondência de todos os itens. Nenhuma informação externa é consultada, armazenada, reordenada ou inferida; entradas iguais sempre produzem saídas iguais.
Resolva colisões sem alterar a ordem
Títulos diferentes podem resultar no mesmo slug, pois capitalização, acentos, espaços repetidos e pontuação deixam de diferenciá-los. A primeira ocorrência mantém a base; as seguintes recebem -2, -3 e outros sufixos crescentes. A unicidade é verificada contra todos os slugs já emitidos, não apenas por uma contagem de textos idênticos. Isso importa quando um título natural termina em número ou grafias distintas convergem para a mesma forma. O processamento da esquerda para a direita dá prioridade clara à ordem fornecida e torna novas execuções reproduzíveis. Se houver prioridade editorial, coloque primeiro o título que deve ficar sem sufixo. A ferramenta não examina seu site nem seu banco de dados e, portanto, não conhece rotas já publicadas. Inclua títulos existentes relevantes ou compare o resultado com seu índice de slugs reservados antes de gravar as rotas.
Use o resultado com segurança na publicação
A saída em lote funciona muito bem entre dados editoriais e um sistema de gerenciamento de conteúdo. Mantenha cada slug ao lado da linha original e não reordene o array isoladamente; a correspondência por posição permite que uma planilha, um script de migração ou um gerador estático associe a rota correta. Valide a solicitação inteira antes de persistir alterações, pois um título inválido rejeita toda a operação e evita migrações parciais. O algoritmo cria componentes ASCII conservadores para URL. Ele não translitera todos os sistemas de escrita, escolhe palavras-chave, encurta títulos nem garante unicidade diante de registros omitidos. Essas tarefas cabem à edição ou ao armazenamento. Para automação, cada solicitação custa US$ 0,002, e a mesma lógica determinística pode ser testada no navegador. Guarde os títulos com os slugs para auditar redirecionamentos e não regenere rotas públicas estáveis sem preparar sua política de redirecionamento.
Casos de uso
Prepare uma importação para o CMS
Gere um componente de rota único para cada título ordenado antes de inserir artigos ou páginas em lote.
Migre um acervo de conteúdo
Normalize cabeçalhos antigos e identifique sufixos de colisão mantendo o alinhamento com a exportação original.
Monte rotas de um site estático
Crie nomes de arquivo ou segmentos determinísticos para uma coleção durante um processo repetível.
Perguntas frequentes
O que ocorre quando dois títulos geram o mesmo slug?
O primeiro mantém a base; colisões posteriores recebem sufixos crescentes como -2, -3 e -4.
A saída preserva a ordem de entrada?
Sim. Cada slug ocupa a mesma posição do título original, e a contagem informa quantos foram produzidos.
Quanto custa uma solicitação?
O preço da API é US$ 0,002 por solicitação, independentemente de colisões entre títulos.
A ferramenta verifica slugs já usados no meu site?
Não. Ela garante unicidade apenas na lista enviada e não acessa seu site, CMS ou banco de dados.
Por que um título foi rejeitado?
Cada item deve ser uma string e gerar ao menos uma letra ASCII ou um dígito após a normalização.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"titles": [
"Getting Started",
"Getting Started",
"API Reference"
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.slugify_batch",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_items | 10000 |
max_chars_per_title | 10000 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |