Validar un mapa de redirecciones
Una hoja de redirecciones puede parecer correcta al revisar cada fila y aun así contener un ciclo que atrape rastreadores o una fuente enviada a dos destinos distintos.
Ejecutar — gratis
Pegue el mapa CSV o TSV para analizar el grafo completo antes del despliegue. El informe relaciona cada hallazgo con su registro, sigue cada ruta inequívoca hasta su destino terminal y se detiene expresamente cuando no existe un final honesto.
Revise el plan antes de mover el tráfico
Los fallos de redirección cuestan menos cuando el mapa todavía es un archivo. El validador lee la fuente, el destino y un estado HTTP opcional de cada registro y construye el grafo dirigido que produciría la configuración al publicarse. Señala rutas mal formadas, estados no admitidos, fuentes asignadas a destinos incompatibles y autorredirecciones. Como el análisis es local, no solicita direcciones de pruebas o producción ni modifica el mapa. Puede incorporarlo a una revisión de migración, una lista de lanzamiento o un control automatizado sin revelar rutas todavía privadas a un tercero.
Distinga cadenas, ciclos y destinos terminales
Cada fuente utilizable se sigue hasta alcanzar un destino que ya no figura como otra fuente. Una ruta de un salto se marca como directa. Las rutas más largas se identifican como cadenas e incluyen el número de saltos, el recorrido completo y final_target, para que usted pueda aplanarlas de forma deliberada. Un ciclo es diferente: no tiene destino terminal. Ante un bucle de dos páginas, uno más largo o una ruta que entra en él, la salida indica cycle y muestra el recorrido repetido, pero omite final_target. Las fuentes ambiguas y las autorredirecciones tampoco reciben un destino inventado.
Aplique reglas conservadoras al CSV y las URLs
La entrada admite coma, punto y coma, tabulación o barra vertical, además de campos entre comillas, comillas escapadas y espacios alrededor del valor. La detección automática prefiere una cabecera con source y target; para exportaciones inusuales puede indicar el separador. Las fuentes y destinos pueden ser URLs absolutas HTTP o HTTPS o rutas que empiecen por barra. Añada base_url si necesita comparar ambos formatos en el mismo grafo. La herramienta conserva mayúsculas de ruta, consultas y caracteres codificados, sin una normalización agresiva que pudiera juntar direcciones distintas. Los límites de bytes y filas rechazan mapas excesivos antes del recorrido.
Qué puede hacer con ella
Revisión previa a una migración
Valide la exportación de la agencia, el gestor de contenidos o el inventario del rastreo antes de cambiar DNS, plantillas o reglas del servidor.
Calidad continua del mapa
Ejecute el mismo informe determinista en cada entrega e impida que fuentes contradictorias o ciclos lleguen a producción.
Aplanado de cadenas antiguas
Use el recorrido, los saltos y el destino terminal informados para sustituir trayectos múltiples por una redirección directa revisada.
Preguntas frecuentes
¿El validador visita las URLs de origen o destino?
No. Analiza el texto como un grafo sin conexión. No sigue redirecciones vivas, no comprueba respuestas HTTP, no confirma que el destino exista y no envía rutas inéditas por la red.
¿Qué ocurre si el mapa contiene un ciclo?
La resolución afectada se marca como cycle y muestra el recorrido repetido. No incluye final_target porque un ciclo carece de destino terminal.
¿Qué códigos de redirección se admiten?
La columna opcional de código debe llamarse exactamente `status`; `code` y `status_code` no se reconocen. Acepta 301, 302, 307 y 308. Un valor vacío se interpreta como 301; cualquier otro se informa como estado no válido en su fila.
¿Puedo mezclar rutas relativas y URLs absolutas?
Sí, pero indique base_url cuando deban formar un solo grafo. Sin esa base se presenta un aviso porque no es seguro asumir que una ruta pertenece al dominio de la URL absoluta.
¿La herramienta es gratuita?
La herramienta del navegador se ejecuta localmente y gratis en computadora y celular. La automatización por API usa el mismo contrato y cobra la tarifa publicada $0.002 del saldo prepago de KIT.
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/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)Ejemplo de solicitud
{
"mapping": "source,target,status\n/old-page,/new-page,301\n/new-page,/final-page,301"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "seo.redirect_map_validate",
"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_bytes | 1048576 |
max_rows | 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. |