Valider un plan de redirections
Un tableau de redirections peut sembler juste ligne par ligne tout en cachant une boucle qui retient les robots ou une source envoyée vers deux destinations différentes.
Lancer gratuitement
Collez votre fichier CSV ou TSV afin d’analyser le graphe complet avant sa mise en service. Le rapport rattache chaque constat à son enregistrement, suit les routes sans ambiguïté jusqu’à leur terme et s’arrête clairement lorsqu’aucune destination finale honnête n’existe.
Contrôlez le plan avant de déplacer le trafic
Une erreur de redirection se corrige plus facilement tant que le plan reste un fichier. Le validateur lit la source, la cible et le statut HTTP facultatif de chaque enregistrement, puis construit le graphe orienté que la configuration produirait après publication. Il signale les routes mal formées, les codes non admis, une source associée à plusieurs cibles incompatibles et les auto-redirections. L’analyse étant hors ligne, aucune adresse de recette ou de production n’est demandée et le fichier n’est jamais modifié. Vous pouvez donc intégrer ce résultat à une revue de migration, une liste de lancement ou un contrôle automatique sans révéler des chemins encore privés.
Distinguez chaînes, boucles et destinations terminales
Chaque source exploitable est suivie jusqu’à une cible qui n’apparaît plus comme source. Une route à un saut est directe. Une route plus longue devient une chaîne et expose le nombre de sauts, le parcours complet ainsi que final_target, afin que vous puissiez la raccourcir en connaissance de cause. Une boucle ne possède au contraire aucun terme. Pour une boucle de deux pages, un cycle plus long ou une route qui rejoint ce cycle, la sortie indique cycle et conserve le chemin répété, mais elle omet final_target. Une source ambiguë ou une auto-redirection ne reçoit pas davantage de cible supposée.
Appliquez des règles prudentes au CSV et aux URL
L’entrée accepte la virgule, le point-virgule, la tabulation ou la barre verticale, ainsi que les champs entre guillemets, les guillemets échappés et les espaces périphériques. La détection automatique privilégie un en-tête contenant source et target ; un séparateur explicite reste possible pour un export particulier. Les deux colonnes peuvent contenir des URL HTTP ou HTTPS absolues ou des chemins commençant par une barre. Renseignez base_url pour comparer ces formes dans un même graphe. La casse des chemins, les requêtes et les caractères encodés sont conservés : aucune normalisation agressive ne fusionne silencieusement deux routes. Des limites strictes de taille et de lignes arrêtent les fichiers excessifs.
Cas d’usage
Revue avant une migration
Validez l’export fourni par une agence, un CMS ou un inventaire de crawl avant de modifier le DNS, les modèles ou les règles du serveur.
Qualité continue du plan
Exécutez le même rapport déterministe à chaque livraison et empêchez les sources contradictoires ou les cycles d’atteindre la production.
Réduction des anciennes chaînes
Servez-vous du parcours, du nombre de sauts et de la destination terminale pour remplacer une suite historique par une redirection directe validée.
Questions fréquentes
Le validateur visite-t-il les URL sources ou cibles ?
Non. Il analyse le texte comme un graphe hors ligne. Il ne suit pas les redirections actives, ne teste pas les réponses HTTP, ne confirme pas l’existence d’une cible et n’envoie aucun chemin inédit sur le réseau.
Que se passe-t-il lorsqu’un cycle est trouvé ?
La résolution concernée porte l’état cycle et contient le parcours répété. final_target est absent, car une boucle ne possède pas de destination terminale.
Quels codes de redirection sont acceptés ?
La colonne facultative de code doit s’appeler exactement `status` ; `code` et `status_code` ne sont pas reconnus. Elle accepte 301, 302, 307 et 308. Une cellule vide vaut 301 ; une autre valeur est signalée comme statut incorrect sur sa ligne.
Peut-on mélanger chemins relatifs et URL absolues ?
Oui, mais indiquez base_url lorsqu’ils appartiennent au même graphe. Sans cette base, un avertissement est émis, car le domaine d’un chemin ne doit pas être deviné.
L’outil est-il gratuit ?
L’outil du navigateur fonctionne localement et gratuitement sur ordinateur et mobile. L’automatisation par API conserve le même contrat et prélève le tarif publié $0.002 sur le solde KIT prépayé.
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/seo/redirect-map-validate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"mapping":"source,target,status\n/old-page,/new-page,301\n/new-page,/final-page,301"}'const res = await fetch("https://api.kit.forhosting.com/seo/redirect-map-validate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"mapping": "source,target,status\n/old-page,/new-page,301\n/new-page,/final-page,301"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/seo/redirect-map-validate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"mapping": "source,target,status\n/old-page,/new-page,301\n/new-page,/final-page,301"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/seo/redirect-map-validate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"mapping":"source,target,status\\n/old-page,/new-page,301\\n/new-page,/final-page,301"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"mapping":"source,target,status\n/old-page,/new-page,301\n/new-page,/final-page,301"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/seo/redirect-map-validate", 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
{
"mapping": "source,target,status\n/old-page,/new-page,301\n/new-page,/final-page,301"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "seo.redirect_map_validate",
"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_bytes | 1048576 |
max_rows | 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. |