Verifique conflitos de canonical e riscos entre domínios
Uma tag canonical pode parecer válida e, mesmo assim, afastar silenciosamente os buscadores da página que você pretende indexar.
Executar grátis
Este verificador compara a URL da página com o endereço declarado na tag, informa se coincidem após uma normalização segura e destaca como alto risco qualquer domínio de destino diferente. Assim, você pode revisar alterações de template, migrações e erros de publicação antes que prejudiquem os sinais de indexação.
O que significa um conflito de canonical
A tag canonical informa aos buscadores qual URL deve representar uma página quando vários endereços exibem material igual ou muito parecido. Uma canonical autorreferente normalmente repete a URL da página e oferece aos rastreadores um endereço preferencial inequívoco. Existe conflito quando a URL enviada e o valor canonical geram textos normalizados diferentes. A diferença pode ser proposital, como quando uma URL de rastreamento consolida sinais em uma página limpa, mas merece revisão porque pode transferir autoridade para fora do endereço atual. O resultado traz as duas URL analisadas, as formas comparadas sem fragmentos, indicadores de correspondência e conflito e uma mensagem clara. A ferramenta não rastreia destinos nem decide se dois conteúdos são equivalentes; ela responde de modo determinístico se a canonical identifica a URL fornecida. Isso atende a verificações de implantação, auditorias, fluxos editoriais e testes automatizados que exigem uma resposta transparente.
Como as URL são validadas e comparadas
Informe o endereço HTTP ou HTTPS absoluto da página e o valor absoluto encontrado na tag canonical. Os dois campos são interpretados como URL; valores malformados, caminhos relativos, esquemas não aceitos, campos ausentes e endereços com credenciais incorporadas são rejeitados como entrada inválida. Essa regra impede que um trecho HTML, um host isolado ou um caminho como /produtos/item seja tratado como destino completo. Na comparação, a análise padrão normaliza detalhes como maiúsculas no host e portas padrão explícitas. Os fragmentos são removidos porque apontam para uma posição no documento, não para outro documento. Esquema, host, caminho, consulta e porta não padrão continuam relevantes. O verificador não remove parâmetros, unifica hosts www, força HTTPS nem considera barras finais equivalentes. Essas transformações poderiam esconder inconsistências reais. As formas normalizadas retornadas mostram exatamente o que foi comparado e ajudam você a entender a divergência.
Por que outro domínio recebe alto risco
Uma canonical direcionada a outro host pode ser legítima em artigos sindicados, conteúdo licenciado ou migrações cuidadosamente controladas. Também pode ser um erro grave de produção provocado por configuração de homologação, domínio antigo, template copiado ou marcação comprometida. Por isso, qualquer mudança de host é classificada como entre domínios e recebe risco alto, mesmo quando intencional. Risco alto indica prioridade de revisão, não certeza de erro. Confirme que os responsáveis entendem a consolidação, que o destino é a versão autorizada e que redirecionamentos, sitemaps, links internos e hreflang apoiam a decisão. Divergências no mesmo domínio recebem alerta porque também podem consolidar a URL em categoria, produto, idioma ou variante incorreta. Uma correspondência não apresenta risco. Use a verificação ao publicar, migrar, alterar rotas ou templates; na integração contínua, bloqueie conflitos inesperados e exija aprovação para cada resultado entre domínios.
Casos de uso
Detectar vazamento para homologação
Compare uma página de produção com sua canonical e sinalize imediatamente um host esquecido de homologação ou visualização.
Testar templates após a implantação
Confira pares representativos depois de mudar o CMS ou as rotas e encontre alterações indevidas de caminho, consulta, esquema ou host.
Revisar sinais de migração
Identifique declarações entre domínios durante uma mudança e valide cada resultado de alto risco com o mapa aprovado.
Perguntas frequentes
O que conta como correspondência?
As URL HTTP ou HTTPS analisadas devem ser idênticas após a normalização padrão e a remoção de fragmentos. Caminhos, consultas, esquemas e hosts continuam significativos.
Por que uma canonical entre domínios tem alto risco?
Ela pode consolidar conteúdo sindicado ou migrado, mas também enviar sinais a homologação, domínio antigo ou outro proprietário. Todo resultado exige revisão.
O verificador acessa alguma URL?
Não. Ele apenas valida e compara de forma determinística; não inspeciona conteúdo, redirecionamentos, status HTTP, regras robots nem a canonical do destino.
Valores canonical relativos são aceitos?
Não. O valor precisa ser uma URL HTTP ou HTTPS absoluta para explicitar o destino sem inventar um endereço base.
Uma divergência sempre significa erro?
Não. Variantes com parâmetros, páginas duplicadas, distribuição e migrações podem usar outra canonical intencionalmente. A divergência pede revisão.
Quanto custa a verificação pela API?
Cada solicitação pela API custa US$ 0,002. A versão no navegador executa gratuitamente a mesma comparação determinística no dispositivo.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"page_url": "https://www.example.com/products/blue-widget",
"canonical_url": "https://www.example.com/products/blue-widget"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "seo.canonical_conflict_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |