Générateur de slug
Un slug est la partie lisible d’une adresse web tirée d’un titre : « Nos réalisations 2026 » devient « nos-realisations-2026 ». Cet outil convertit un texte en slug propre — minuscules, tirets à la place des espaces, accents retirés — prêt pour une URL ou un nom de fichier. La conversion se fait entièrement dans votre navigateur.
Lancer gratuitement
Tout se passe dans votre navigateur : gratuit, sans envoi de vos données.
D’un titre à une URL lisible
Un bon slug rend une adresse claire pour le lecteur comme pour les moteurs de recherche : « /nos-realisations-2026 » se comprend mieux qu’un identifiant numérique opaque. L’outil part de votre titre, passe tout en minuscules, remplace les espaces par des tirets et supprime la ponctuation superflue. Le résultat est court, propre et stable — car une URL, une fois publiée, ne devrait plus jamais changer.
Le sort des accents et caractères spéciaux
En français, la question des accents est centrale : « é », « à », « ç » n’ont pas leur place dans une URL propre. L’outil les translittère vers leur équivalent sans accent — « é » devient « e » — plutôt que de les encoder en « %xx » illisibles. Les caractères sans équivalent simple, comme l’esperluette ou les guillemets, sont retirés ou remplacés par un tiret unique. Résultat : une adresse propre, sans séquence « %xx » ni caractère hasardeux dans le lien.
Éviter les doublons et les collisions
Deux titres proches peuvent produire le même slug : « Offre été » et « Offre étés » se réduisent tous deux à « offre-ete ». Dans un CMS, on ajoute alors un suffixe pour distinguer les adresses. Garder des slugs courts mais assez spécifiques limite ces télescopages et donne des URLs durables, faciles à partager et à retenir de mémoire. Un slug stable, c’est aussi un lien qui ne se casse pas quand on partage la page des mois plus tard.
Généré en local
La conversion s’exécute dans votre navigateur, sans transmission : ni le titre ni le slug ne sont envoyés à nos serveurs. Pour intégrer la génération de slugs à un CMS ou un script via l’API, l’appel revient à $0.002 la requête, en dollars US ; l’usage manuel reste gratuit et illimité. Le web est le canal principal ; l’API n’est qu’une commodité pour traiter beaucoup de titres d’un coup.
Cas d’usage
Publier un article
Camille Moreau transforme le titre « Réduire un PDF pour impots.gouv » en slug « reduire-un-pdf-pour-impots-gouv » avant de mettre son article en ligne.
Nommer des fichiers proprement
Menuiserie Rousseau & Fils convertit les intitulés de ses devis en slugs pour des noms de fichiers sans espaces ni accents, faciles à trier.
Migrer un catalogue
Le Studio Lumen SAS génère les slugs de centaines de pages produits pour construire des URLs cohérentes lors d’une refonte.
Questions fréquentes
Qu’est-ce qu’un slug exactement ?
C’est la portion lisible d’une URL, dérivée d’un titre : minuscules, mots séparés par des tirets, sans accents ni caractères spéciaux. Il rend l’adresse compréhensible pour les lecteurs et les moteurs de recherche.
Comment sont traités les accents ?
Ils sont translittérés vers leur équivalent sans accent : « é » devient « e », « à » devient « a ». C’est préférable à un encodage « %xx » qui rendrait l’URL illisible.
Deux titres peuvent-ils donner le même slug ?
Oui, quand ils se ressemblent une fois simplifiés. La plupart des CMS ajoutent alors un suffixe pour distinguer les adresses. Des slugs un peu spécifiques réduisent ce risque.
Mon texte est-il envoyé quelque part ?
Non. La conversion se fait dans votre navigateur ; ni le titre ni le slug ne sont transmis ou conservés.
Est-ce gratuit ?
Oui, sans limite dans le navigateur. Pour générer des slugs en masse via l’API, le tarif est de $0.002 par requête, en dollars US, sans abonnement.
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/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)Exemple de requête
{
"items": [
"valor-1",
"valor-2"
]
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.slug",
"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.
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. |