Gere uma tag canonical a partir de uma URL HTTP válida
O gerador de tags de link canonical transforma um endereço web absoluto em um elemento link HTML pronto para ser inserido no cabeçalho da página.
Executar grátis
Ele valida se o endereço pode ser interpretado e se usa HTTP ou HTTPS, depois escapa o valor com segurança para um atributo HTML. O resultado inclui a URL canonical normalizada e a tag completa, sendo útil em uma edição manual, um fluxo de publicação, um sistema de modelos ou um pipeline automatizado de SEO.
Escolha a URL que representa a página preferencial
Uma tag canonical informa aos mecanismos de busca qual URL absoluta você considera a versão preferencial de uma página. Comece pelo endereço que deve permanecer como referência quando o mesmo conteúdo estiver acessível por parâmetros de rastreamento, caminhos alternativos de navegação, versões para impressão ou outras duplicações. Inclua o esquema e o nome do host, pois um caminho relativo como /guias/exemplo não identifica uma página inequívoca entre sites diferentes. Escolha HTTP ou HTTPS de forma explícita; na maioria dos ambientes de produção, use o endereço HTTPS que visitantes e rastreadores conseguem abrir. Preserve caminhos, parâmetros de consulta e fragmentos significativos somente quando eles realmente fizerem parte do endereço preferencial. Este gerador interpreta o valor e o serializa de modo consistente, portanto alguns detalhes podem aparecer normalizados. Ele não visita a página, testa redirecionamentos, compara conteúdo duplicado nem decide qual variante merece ser canonical. Essa decisão editorial continua sendo sua. Antes de gerar a tag, confirme que o destino seja público, estável, indexável e adequado como referência duradoura para o conteúdo.
Gere marcação segura para o cabeçalho do documento
Envie o endereço escolhido no campo url. A ferramenta remove espaços nas extremidades, verifica se o valor é uma URL absoluta e aceita apenas os esquemas http e https. Endereços com mailto, ftp, javascript, file ou um protocolo específico de aplicativo são recusados porque não funcionam como canonicals convencionais da web. Um resultado válido contém canonical_url, que exibe a URL após a interpretação padrão, e tag, que traz o elemento link completo. O valor de href é escapado para um atributo HTML entre aspas duplas, inclusive os e comerciais em strings de consulta, evitando que caracteres da URL se transformem por engano em sintaxe HTML. Coloque o elemento gerado dentro de head, normalmente uma única vez por documento. Não inclua uma segunda declaração canonical conflitante e verifique se um cabeçalho HTTP ou plugin do framework não publica outro destino. O gerador cria uma tag HTML concisa sem barra de fechamento porque link é um elemento vazio. Ele apenas produz a marcação e não altera páginas nem contata servidores.
Confira a publicação e mantenha canonicals consistentes
Depois de adicionar a tag gerada, inspecione o código final da página ou a resposta definitiva do servidor, em vez de verificar somente um arquivo de modelo. Sistemas de gerenciamento de conteúdo, plugins de SEO, temas e middlewares de renderização podem substituir, duplicar ou remover elementos do cabeçalho após a sua alteração. Confirme que exista exatamente um link canonical intencional e que o href corresponda à URL pública selecionada. Em seguida, teste o destino no ambiente de publicação: ele deve responder corretamente, evitar uma cadeia desnecessária de redirecionamentos e não estar bloqueado para indexação quando o objetivo for visibilidade. Aplique a mesma política de modo consistente à paginação, coleções filtradas, páginas localizadas, variantes móveis e URLs com parâmetros de campanha. Tags canonical são sinais para consolidar páginas equivalentes, não redirecionamentos nem controles de acesso; todas as variantes continuam acessíveis. Quando a URL preferencial mudar, gere novamente a tag e atualize links internos, sitemaps, redirecionamentos e dados estruturados quando necessário. Para automação, a API custa US$ 0,002 por solicitação; a versão no navegador entrega localmente o mesmo resultado determinístico.
Casos de uso
Prepare uma tag para um modelo de CMS
Converta a URL preferencial do artigo em marcação escapada para inserir em head ou em um campo de modelo.
Padronize tags no fluxo de publicação
Gere uma URL canonical e um elemento link consistentes antes da montagem e da publicação das páginas.
Trate URLs parametrizadas com segurança
Crie HTML válido quando um endereço canonical contiver parâmetros cujos e comerciais exigem escape no atributo.
Perguntas frequentes
Que entrada o gerador aceita?
Ele aceita uma URL absoluta com esquema http ou https e nome de host. Caminhos relativos e outros protocolos são recusados.
A ferramenta verifica se a página existe?
Não. Ela faz uma validação determinística de sintaxe e protocolo sem realizar solicitações de rede.
Por que os e comerciais aparecem como & na tag retornada?
A URL é escapada para uso seguro em um atributo HTML. O navegador interpreta essa marcação como um e comercial na URL real.
Onde devo inserir a tag gerada?
Insira-a dentro de head e evite publicar outra tag canonical com uma URL conflitante.
Quanto custa uma solicitação de API?
Cada solicitação de API custa US$ 0,002. O gerador no navegador está disponível para usos pontuais.
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/web/canonical-tag-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/articles/canonical-tags?edition=web"}'const res = await fetch("https://api.kit.forhosting.com/web/canonical-tag-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"url": "https://example.com/articles/canonical-tags?edition=web"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/canonical-tag-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"url": "https://example.com/articles/canonical-tags?edition=web"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/canonical-tag-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"url":"https://example.com/articles/canonical-tags?edition=web"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"url":"https://example.com/articles/canonical-tags?edition=web"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/canonical-tag-generate", 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
{
"url": "https://example.com/articles/canonical-tags?edition=web"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.canonical_tag_generate",
"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.
Limites
timeout_sec | 30 |
max_crawl_pages | 25 |
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. |