Compruebe conflictos de canonical y riesgos entre dominios
Una etiqueta canonical puede parecer válida y, aun así, desviar silenciosamente a los buscadores de la página que usted desea indexar.
Ejecutar — gratis
Este comprobador compara la URL de la página con la declarada en la etiqueta, informa si coinciden tras una normalización segura y destaca como riesgo alto cualquier dominio de destino distinto. Así puede revisar cambios de plantilla, migraciones y errores de publicación antes de que debiliten la indexación.
Qué significa un conflicto de canonical
Una etiqueta canonical indica a los buscadores qué URL debe representar una página cuando varias direcciones contienen material igual o muy parecido. Una canonical autorreferente suele repetir la URL de la página y ofrece a los rastreadores una dirección preferida inequívoca. Existe un conflicto cuando la URL enviada y el valor canonical producen cadenas normalizadas diferentes. La diferencia puede ser deliberada, por ejemplo si una URL de seguimiento consolida señales en una ficha limpia, pero debe revisarse porque puede transferir autoridad fuera de la dirección actual. El resultado incluye las URL analizadas, las formas comparadas sin fragmentos, indicadores de coincidencia y conflicto y un mensaje claro. No rastrea destinos ni decide si dos contenidos son equivalentes: responde de forma determinista si la canonical identifica la URL suministrada. Por ello resulta útil en despliegues, auditorías, controles editoriales y pruebas automatizadas que necesitan una respuesta transparente.
Cómo se validan y comparan las URL
Introduzca la dirección HTTP o HTTPS absoluta de la página y el valor absoluto de su etiqueta canonical. Ambos campos se analizan como URL; los valores mal formados, rutas relativas, esquemas no admitidos, campos ausentes o direcciones con credenciales incrustadas se rechazan como entrada no válida. Esta exigencia evita interpretar un fragmento HTML, un host aislado o una ruta como /productos/articulo como si fuese un destino completo. Al comparar, el análisis estándar normaliza detalles como las mayúsculas del host y los puertos predeterminados explícitos. Se eliminan los fragmentos porque señalan una posición dentro del documento, no otro documento. Se conservan el esquema, host, ruta, consulta y puerto no predeterminado. La herramienta no elimina parámetros, unifica variantes www, fuerza HTTPS ni considera equivalentes las barras finales. Tales cambios podrían ocultar errores reales. Las formas normalizadas muestran exactamente por qué se notificó una diferencia.
Por qué otro dominio implica riesgo alto
Una canonical hacia otro nombre de host puede ser legítima en artículos sindicados, contenido con licencia o una migración controlada. También puede ser un grave error de producción causado por la configuración del entorno de pruebas, un dominio antiguo, una plantilla copiada o marcado alterado. Por ello, cualquier cambio de host se clasifica como interdominio y riesgo alto, aunque sea intencionado. Riesgo alto significa prioridad de revisión, no certeza de error. Confirme que las partes conocen la consolidación, que el destino es la versión autorizada y que redirecciones, sitemaps, enlaces internos y hreflang respaldan la decisión. Las diferencias dentro del mismo dominio reciben una advertencia, pues también pueden consolidar una página en una categoría, producto, idioma o variante equivocada. Una coincidencia no presenta riesgo. Ejecute la comprobación al publicar, migrar, modificar rutas o cambiar plantillas; en integración continua puede bloquear conflictos inesperados y exigir aprobación para resultados interdominio.
Qué puede hacer con ella
Detectar fugas al entorno de pruebas
Compare una página de producción con su canonical y marque de inmediato un host olvidado de pruebas o vista previa.
Probar plantillas tras un despliegue
Revise pares representativos después de cambiar el CMS o las rutas para descubrir diferencias involuntarias de ruta, consulta, esquema o host.
Revisar señales de migración
Identifique declaraciones entre dominios durante un traslado y confirme cada resultado de riesgo alto con el mapa aprobado.
Preguntas frecuentes
¿Qué se considera una coincidencia?
Las URL HTTP o HTTPS analizadas deben ser idénticas tras la normalización estándar y la eliminación de fragmentos. Las rutas, consultas, esquemas y hosts siguen siendo significativos.
¿Por qué una canonical entre dominios tiene riesgo alto?
Puede consolidar contenido sindicado o migrado, pero también enviar señales a un entorno de pruebas, dominio antiguo o propietario ajeno. Revise siempre el resultado.
¿El comprobador descarga alguna URL?
No. Solo valida y compara de manera determinista; no inspecciona contenido, redirecciones, estados HTTP, reglas robots ni la canonical del destino.
¿Se aceptan valores canonical relativos?
No. El valor debe ser una URL HTTP o HTTPS absoluta para que el destino sea explícito y no sea necesario inventar una dirección base.
¿Una diferencia significa siempre que la canonical es incorrecta?
No. Las variantes con parámetros, duplicados, sindicación y migraciones pueden usar otra canonical de forma deliberada. La diferencia requiere revisión.
¿Cuánto cuesta la comprobación por API?
Cada solicitud por API cuesta $0.002. La versión del navegador ejecuta gratis la misma comparación determinista de forma local.
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/canonical-conflict-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"page_url":"https://www.example.com/products/blue-widget","canonical_url":"https://www.example.com/products/blue-widget"}'const res = await fetch("https://api.kit.forhosting.com/seo/canonical-conflict-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"page_url": "https://www.example.com/products/blue-widget",
"canonical_url": "https://www.example.com/products/blue-widget"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/seo/canonical-conflict-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"page_url": "https://www.example.com/products/blue-widget",
"canonical_url": "https://www.example.com/products/blue-widget"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/seo/canonical-conflict-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"page_url":"https://www.example.com/products/blue-widget","canonical_url":"https://www.example.com/products/blue-widget"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"page_url":"https://www.example.com/products/blue-widget","canonical_url":"https://www.example.com/products/blue-widget"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/seo/canonical-conflict-check", 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
{
"page_url": "https://www.example.com/products/blue-widget",
"canonical_url": "https://www.example.com/products/blue-widget"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "seo.canonical_conflict_check",
"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.
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. |