Gere tags HTML para favicon e Apple touch icon
Este gerador de tags HTML para favicon transforma uma lista de tamanhos e caminhos públicos de ícones em um bloco organizado de elementos link para o head do site.
Executar grátis
Ele cria uma referência de favicon para cada recurso informado e acrescenta automaticamente uma referência Apple touch icon. O resultado é determinístico, protege os valores dos atributos e fica pronto para você inserir em um template, site estático, sistema de conteúdo ou layout de aplicativo.
Prepare um inventário preciso de ícones
Comece pelos arquivos de ícone que seu site já publica. Adicione uma linha para cada recurso, informando as dimensões em pixels no formato LARGURAxALTURA e o caminho público ou a URL. Conjuntos comuns para navegadores incluem arquivos quadrados pequenos para abas e favoritos, enquanto uma imagem quadrada maior é útil quando um dispositivo salva o site na tela inicial. Os caminhos podem ser relativos ao site, como /assets/icons/favicon-32.png, ou URLs absolutas fornecidas por um serviço de ativos. Cada tamanho deve aparecer apenas uma vez, pois dois arquivos concorrentes declarados com dimensões idênticas tornam a seleção ambígua. O gerador valida todas as linhas antes de produzir a marcação; assim, caminhos vazios, dimensões malformadas, tamanhos repetidos e extremos não suportados viram erros claros de entrada, em vez de tags quebradas. A ferramenta não consulta o sistema de arquivos nem baixa imagens, portanto considera as dimensões uma declaração explícita sua. Confirme se cada caminho estará acessível publicamente após a implantação e se as dimensões reais da imagem correspondem ao tamanho informado.
Entenda como as tags são escolhidas e ordenadas
Para cada ícone fornecido, o resultado inclui um elemento link com rel definido como icon, um valor sizes normalizado em letras minúsculas e um href protegido. As tags do navegador são ordenadas da menor área em pixels para a maior, com critérios determinísticos de desempate. Dessa forma, o mesmo conjunto lógico sempre produz a mesma saída, mesmo quando as linhas chegam em outra ordem. O Apple touch icon é escolhido separadamente. Um recurso quadrado de exatamente 180x180 tem preferência, pois esse tamanho é muito usado para ícones de toque. Se ele não existir, o maior ícone quadrado será selecionado; se não houver recurso quadrado, o maior item fornecido será usado por uma regra de contingência explícita. O arquivo escolhido continua na lista comum do navegador, e outro elemento link o identifica com rel igual a apple-touch-icon. O escape de atributos protege e comerciais, aspas e sinais angulares nos caminhos sem alterar o destino interpretado pelo HTML. Nenhum tipo MIME é deduzido pela extensão, evitando uma declaração incorreta em rotas transformadas ou sem extensão.
Insira e confira a marcação gerada
Copie o valor html retornado para o head do template compartilhado que atende todas as páginas públicas. Se você usa um framework, coloque-o no layout raiz ou no template de metadados, em vez de repeti-lo em cada rota. O array tags contém as mesmas linhas como strings separadas quando um script de build precisa de valores estruturados; icon_count e apple_touch_size facilitam verificações automatizadas. Depois da implantação, abra o código-fonte da página gerada e confirme se os valores href são resolvidos a partir da origem pública final. Um caminho relativo ao site iniciado por barra é resolvido desde a raiz do domínio; um caminho relativo sem barra usa a localização do documento e pode se comportar de maneira diferente em rotas aninhadas. Ao verificar substituições, limpe o cache do navegador ou use uma janela privativa, porque o cache de favicon costuma ser especialmente persistente. Teste também a adição do site à tela inicial de um celular se essa experiência for relevante. Esta ferramenta escreve somente referências: ela não cria imagens, altera um manifesto web, envia ativos nem confirma o tipo de conteúdo devolvido pelo servidor.
Casos de uso
Montar o head de um site estático
Transforme uma lista versionada de ativos de ícone em marcação pronta para inserir em um layout HTML compartilhado.
Padronizar templates de aplicações
Gere declarações de favicon ordenadas de modo consistente para vários sites com caminhos de ícone diferentes.
Automatizar metadados de implantação
Forneça tags estruturadas e o tamanho Apple touch selecionado a uma verificação de build ou pipeline de lançamento.
Perguntas frequentes
O que acontece se eu não enviar nenhum ícone?
A solicitação falha com um erro de entrada inválida, pois pelo menos um caminho e um tamanho de ícone são obrigatórios.
Como o Apple touch icon é escolhido?
Um ícone quadrado de 180x180 tem preferência; caso não exista, usa-se o maior ícone quadrado. Sem ícones quadrados, é selecionado o maior recurso informado.
A ferramenta cria ou redimensiona arquivos favicon?
Não. Ela apenas gera referências HTML para arquivos que você já criou e disponibilizou publicamente.
Posso usar URLs absolutas?
Sim. Cada caminho pode ser uma URL absoluta ou um caminho relativo ao site, e caracteres inseguros em atributos HTML são escapados.
Por que tamanhos repetidos são rejeitados?
Uma declaração por tamanho torna previsível a seleção do navegador e evita que dois ativos concorram pelas mesmas dimensões.
Quanto custa a API?
A API custa US$ 0,002 por solicitação. A versão para navegador está disponível gratuitamente nesta página.
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/favicon-meta-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"icons":[{"size":"16x16","path":"/favicon-16x16.png"},{"size":"32x32","path":"/favicon-32x32.png"},{"size":"180x180","path":"/apple-touch-icon.png"}]}'const res = await fetch("https://api.kit.forhosting.com/web/favicon-meta-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"icons": [
{
"size": "16x16",
"path": "/favicon-16x16.png"
},
{
"size": "32x32",
"path": "/favicon-32x32.png"
},
{
"size": "180x180",
"path": "/apple-touch-icon.png"
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/favicon-meta-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"icons": [
{
"size": "16x16",
"path": "/favicon-16x16.png"
},
{
"size": "32x32",
"path": "/favicon-32x32.png"
},
{
"size": "180x180",
"path": "/apple-touch-icon.png"
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/favicon-meta-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"icons":[{"size":"16x16","path":"/favicon-16x16.png"},{"size":"32x32","path":"/favicon-32x32.png"},{"size":"180x180","path":"/apple-touch-icon.png"}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"icons":[{"size":"16x16","path":"/favicon-16x16.png"},{"size":"32x32","path":"/favicon-32x32.png"},{"size":"180x180","path":"/apple-touch-icon.png"}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/favicon-meta-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
{
"icons": [
{
"size": "16x16",
"path": "/favicon-16x16.png"
},
{
"size": "32x32",
"path": "/favicon-32x32.png"
},
{
"size": "180x180",
"path": "/apple-touch-icon.png"
}
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.favicon_meta_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. |