Convertissez une liste de titres en slugs URL uniques
Cet outil convertit en une requête déterministe une liste ordonnée de titres de pages, d’articles, de produits ou d’autres rubriques en slugs adaptés aux URL.
Lancer gratuitement
Il met le texte en minuscules, retire les accents latins courants, remplace les espaces et la ponctuation par des traits d’union et conserve les chiffres. Si deux titres donnent la même base, le résultat suivant reçoit un suffixe numérique croissant. L’ordre initial reste intact afin que vous puissiez aligner facilement la sortie sur un import, une file éditoriale ou une migration.
Créez un slug propre pour chaque titre
Fournissez les titres dans l’ordre exact où vous souhaitez recevoir les résultats. Chaque titre devient un composant URL compact : les majuscules passent en minuscules, les signes diacritiques latins courants sont supprimés et chaque suite d’espaces ou de signes de ponctuation devient un seul trait d’union. Les séparateurs placés aux extrémités disparaissent, tandis que les chiffres sont conservés pour les versions, chapitres, années et éditions. L’opération exige de véritables chaînes et ne convertit pas silencieusement les objets, booléens ou nombres, car cette coercition pourrait produire des routes crédibles mais fausses. Tout titre doit fournir au moins une lettre ASCII ou un chiffre après normalisation. La réponse contient le tableau des slugs dans le même ordre et leur nombre, ce qui vous permet de vérifier chaque correspondance. Aucune donnée externe n’est recherchée, stockée, réordonnée ou déduite ; une entrée identique produit toujours une sortie identique.
Résolvez les collisions sans perdre l’ordre
Des titres différents peuvent se normaliser en un même slug, puisque la casse, les accents, les espaces répétés et la ponctuation cessent de les distinguer. La première occurrence conserve la base ; les suivantes reçoivent -2, -3, puis des suffixes croissants. L’unicité est contrôlée par rapport à tous les slugs déjà émis, et non par un simple décompte des textes sources identiques. Ce point est essentiel lorsqu’un titre se termine naturellement par un nombre ou lorsque plusieurs graphies convergent. Le traitement de gauche à droite accorde une priorité explicite à l’ordre d’entrée et rend les relances reproductibles. Si une priorité éditoriale existe, placez en premier le titre qui doit conserver la forme sans suffixe. L’outil n’examine ni votre site ni votre base de données ; incluez donc les titres existants utiles ou comparez la sortie à votre registre de slugs réservés avant d’enregistrer les routes.
Exploitez le résultat sans risque lors de la publication
La sortie groupée convient particulièrement à l’interface entre des données éditoriales et un gestionnaire de contenu. Conservez chaque slug auprès de sa ligne source au lieu de trier le tableau séparément : la correspondance par position permet à un import, un script de migration ou un générateur de site statique d’affecter la bonne route. Validez toute la requête avant de persister des changements, car un seul titre invalide rejette l’opération entière et empêche une migration partielle. L’algorithme vise des composants URL ASCII prudents. Il ne translittère pas tous les systèmes d’écriture, ne choisit pas de mots-clés, ne raccourcit pas les titres et ne garantit pas l’unicité face aux enregistrements absents. Pour l’automatisation, chaque requête coûte $0.002 ; la même logique déterministe peut être testée dans le navigateur. Archivez ensemble titres et slugs pour contrôler les redirections futures.
Cas d’usage
Préparez un import dans un CMS
Générez un composant de route unique pour chaque titre ordonné avant l’insertion groupée d’articles ou de pages.
Migrez des archives éditoriales
Normalisez les anciens titres et repérez les suffixes de collision tout en conservant l’alignement avec l’export source.
Construisez les routes d’un site statique
Créez des noms de fichiers ou des segments déterministes pour une collection durant un processus reproductible.
Questions fréquentes
Que se passe-t-il si deux titres donnent le même slug ?
Le premier conserve la base ; les collisions suivantes reçoivent des suffixes croissants comme -2, -3 et -4.
La sortie respecte-t-elle l’ordre d’entrée ?
Oui. Chaque slug occupe la position de son titre source et le compteur indique le nombre produit.
Quel est le coût d’une requête ?
Le tarif de l’API est de $0.002 par requête, même lorsque des titres entrent en collision.
Les slugs déjà utilisés sur mon site sont-ils vérifiés ?
Non. L’unicité concerne uniquement la liste transmise ; aucun accès à votre site, CMS ou base de données n’a lieu.
Pourquoi un titre a-t-il été refusé ?
Chaque élément doit être une chaîne produisant au moins une lettre ASCII ou un chiffre après normalisation.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre 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)Exemple de requête
{
"titles": [
"Getting Started",
"Getting Started",
"API Reference"
]
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.slugify_batch",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_items | 10000 |
max_chars_per_title | 10000 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |