Verifichi conflitti canonical e rischi tra domini
Un tag canonical può sembrare valido e tuttavia allontanare silenziosamente i motori dalla pagina che Lei desidera indicizzare.
Esegui gratis nel browser
Questo controllo confronta l’URL della pagina con quello dichiarato nel tag, verifica la corrispondenza dopo una normalizzazione sicura e classifica come rischio alto ogni dominio di destinazione diverso. Può così esaminare template, migrazioni ed errori di pubblicazione prima che indeboliscano i segnali di indicizzazione.
Che cosa indica un conflitto canonical
Il tag canonical comunica ai motori quale URL deve rappresentare una pagina quando più indirizzi mostrano materiale uguale o molto simile. Una canonical autoreferenziale ripete normalmente l’URL della pagina e offre ai crawler un riferimento preferito inequivocabile. Si verifica un conflitto quando l’URL inviato e il valore canonical producono stringhe normalizzate diverse. La differenza può essere intenzionale, per esempio quando un URL di tracciamento consolida i segnali su una scheda pulita, ma richiede attenzione perché può trasferire autorevolezza altrove. Il risultato contiene entrambi gli URL analizzati, le forme confrontate senza frammenti, gli indicatori di corrispondenza e conflitto e un messaggio chiaro. Lo strumento non visita le destinazioni né stabilisce se i contenuti siano equivalenti: risponde in modo deterministico alla domanda tecnica se la canonical identifica l’URL fornito. È quindi adatto a controlli di rilascio, audit, procedure editoriali e test automatizzati che richiedono una risposta trasparente.
Come vengono validati e confrontati gli URL
Inserisca l’indirizzo HTTP o HTTPS assoluto della pagina e il valore assoluto presente nel tag canonical. Entrambi vengono analizzati come URL; valori non validi, percorsi relativi, schemi non ammessi, campi mancanti o indirizzi con credenziali incorporate sono rifiutati. Questo rigore impedisce che un frammento HTML, un semplice host o un percorso come /prodotti/articolo venga scambiato per una destinazione completa. Nel confronto, il parser standard normalizza dettagli quali maiuscole dell’host e porte predefinite esplicite. I frammenti vengono rimossi perché individuano una posizione nello stesso documento. Schema, host, percorso, query e porte non predefinite restano significativi. Il controllo non elimina parametri, non unifica varianti www, non impone HTTPS e non equipara le barre finali. Queste trasformazioni potrebbero nascondere incoerenze reali. I valori normalizzati mostrano esattamente che cosa è stato confrontato e perché è stata segnalata una differenza.
Perché un altro dominio comporta rischio alto
Una canonical diretta a un altro host può essere legittima per articoli distribuiti, contenuti concessi in licenza o migrazioni controllate. Può anche essere un grave errore dovuto a impostazioni di staging, vecchi domini, template copiati o markup compromesso. Per questo ogni cambio di host è classificato come interdominio e a rischio alto, anche quando voluto. Rischio alto significa priorità di verifica, non certezza di errore. Confermi che i proprietari comprendano il consolidamento, che la destinazione sia la versione autorevole e che redirect, sitemap, link interni e hreflang sostengano la scelta. Le differenze nello stesso dominio ricevono un avviso, poiché possono consolidare la pagina nella categoria, nel prodotto o nella lingua sbagliata. Una corrispondenza non presenta rischi. Esegua il controllo durante pubblicazioni, migrazioni e modifiche dei template; nell’integrazione continua può bloccare conflitti inattesi e richiedere approvazione per ogni risultato interdominio.
Casi d'uso
Scoprire riferimenti allo staging
Confronti una pagina pubblica con la canonical e segnali subito un host di staging o anteprima rimasto nel markup.
Provare i template dopo il rilascio
Verifichi coppie rappresentative dopo modifiche a CMS o routing per trovare variazioni involontarie di percorso, query, schema o host.
Controllare i segnali di migrazione
Individui dichiarazioni interdominio durante un trasferimento e confermi ogni rischio alto con la mappa approvata.
Domande frequenti
Che cosa viene considerato una corrispondenza?
Gli URL HTTP o HTTPS analizzati devono essere identici dopo la normalizzazione standard e la rimozione dei frammenti. Percorsi, query, schemi e host restano significativi.
Perché una canonical interdominio è ad alto rischio?
Può consolidare contenuti distribuiti o migrati, ma anche inviare segnali a staging, vecchi domini o terzi. Ogni risultato deve essere verificato.
Il controllo visita gli URL?
No. Esegue solo validazione e confronto deterministici; non analizza contenuto, redirect, stato HTTP, direttive robots o canonical della destinazione.
Sono accettati valori canonical relativi?
No. Il valore deve essere un URL HTTP o HTTPS assoluto, così la destinazione è esplicita e non occorre inventare un indirizzo base.
Una differenza indica sempre un errore?
No. Parametri, duplicati, distribuzione e migrazioni possono richiedere intenzionalmente un’altra canonical. La differenza richiede una verifica.
Quanto costa il controllo tramite API?
Ogni richiesta API costa $0.002. La versione nel browser esegue gratuitamente in locale lo stesso confronto deterministico.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo 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)Esempio di richiesta
{
"page_url": "https://www.example.com/products/blue-widget",
"canonical_url": "https://www.example.com/products/blue-widget"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "seo.canonical_conflict_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |