Générez les balises HTML de favicon et Apple touch icon
Ce générateur de balises HTML pour favicon transforme une liste de tailles et de chemins publics en un bloc ordonné d’éléments link destiné au head d’un site.
Lancer gratuitement
Il crée une référence de favicon pour chaque ressource fournie et ajoute automatiquement une référence Apple touch icon. Le résultat est déterministe, protège les valeurs d’attribut et peut être inséré directement dans un modèle, un site statique, un gestionnaire de contenu ou la mise en page d’une application.
Préparez un inventaire précis des icônes
Commencez par les fichiers d’icône que votre site publie déjà. Ajoutez une ligne par ressource, avec ses dimensions en pixels au format LARGEURxHAUTEUR et son chemin public ou son URL. Un jeu courant pour navigateur comprend de petits fichiers carrés pour les onglets et les favoris, tandis qu’une image carrée plus grande convient lorsqu’un appareil enregistre le site sur l’écran d’accueil. Vous pouvez indiquer un chemin relatif au site, comme /assets/icons/favicon-32.png, ou une URL absolue servie par un hébergeur de ressources. Chaque taille ne doit apparaître qu’une fois, car deux fichiers concurrents déclarés avec les mêmes dimensions rendent le choix ambigu. Le générateur valide chaque ligne avant de produire le balisage : chemins vides, dimensions incorrectes, tailles en double et valeurs extrêmes non prises en charge deviennent ainsi des erreurs explicites plutôt que des balises défectueuses. Il ne consulte pas le système de fichiers et ne télécharge aucune image ; les dimensions constituent donc votre déclaration. Vérifiez que chaque chemin sera public après le déploiement et que l’image possède réellement la taille indiquée.
Comprenez la sélection et l’ordre des balises
Pour chaque icône fournie, le résultat contient un élément link dont rel vaut icon, avec une valeur sizes normalisée en minuscules et un href échappé. Les balises destinées au navigateur sont classées de la plus petite surface en pixels à la plus grande, selon des critères de départage déterministes. Un même ensemble logique produit donc toujours la même sortie, quel que soit l’ordre des lignes reçues. L’Apple touch icon est choisi séparément. Une ressource carrée de exactement 180x180 est prioritaire, car cette taille est largement utilisée pour les icônes tactiles. À défaut, la plus grande icône carrée est retenue ; s’il n’existe aucune image carrée, la plus grande ressource fournie sert de solution de repli explicite. Le fichier sélectionné reste dans la liste normale des icônes, et un élément link supplémentaire l’identifie avec rel égal à apple-touch-icon. L’échappement protège les esperluettes, guillemets et chevrons présents dans les chemins sans modifier la destination interprétée par HTML. Aucun type MIME n’est déduit de l’extension, ce qui évite une déclaration erronée pour les routes transformées ou sans extension.
Insérez et contrôlez le balisage généré
Copiez la valeur html renvoyée dans le head du modèle commun qui dessert toutes vos pages publiques. Avec un framework, placez-la dans la mise en page racine ou le modèle de métadonnées plutôt que de la répéter dans chaque route. Le tableau tags fournit les mêmes lignes sous forme de chaînes séparées lorsqu’un script de construction requiert des valeurs structurées ; icon_count et apple_touch_size simplifient les contrôles automatisés. Après le déploiement, consultez la source de la page produite et vérifiez que les href se résolvent depuis l’origine publique définitive. Un chemin relatif commençant par une barre part de la racine du domaine ; sans barre, il est résolu par rapport au document courant et peut se comporter différemment dans une route imbriquée. Pour contrôler un remplacement, videz le cache du navigateur ou utilisez une fenêtre privée, car les favicons restent souvent longtemps en cache. Testez aussi l’ajout du site à l’écran d’accueil d’un mobile si ce parcours compte. Cet outil écrit uniquement des références : il ne crée pas d’image, ne modifie pas de manifeste web, ne téléverse pas de ressource et ne vérifie pas le type de contenu servi.
Cas d’usage
Construire le head d’un site statique
Transformez une liste versionnée d’icônes en balisage prêt à insérer dans une mise en page HTML partagée.
Uniformiser les modèles d’application
Produisez des déclarations de favicon ordonnées de façon cohérente pour plusieurs sites aux chemins différents.
Automatiser les métadonnées de déploiement
Transmettez les balises structurées et la taille tactile retenue à un contrôle de construction ou à un pipeline de livraison.
Questions fréquentes
Que se passe-t-il si je n’envoie aucune icône ?
La requête échoue avec une erreur d’entrée non valide, car au moins un chemin et une taille d’icône sont obligatoires.
Comment l’Apple touch icon est-il choisi ?
Une icône carrée de 180x180 est prioritaire, sinon la plus grande icône carrée est retenue. Sans icône carrée, la plus grande ressource fournie est sélectionnée.
Cet outil crée-t-il ou redimensionne-t-il les favicons ?
Non. Il génère uniquement des références HTML vers des fichiers que vous avez déjà créés et rendus publics.
Puis-je utiliser des URL absolues ?
Oui. Chaque chemin peut être une URL absolue ou un chemin relatif au site, et les caractères dangereux pour un attribut HTML sont échappés.
Pourquoi les tailles en double sont-elles refusées ?
Une seule déclaration par taille rend le choix du navigateur prévisible et empêche deux ressources de rivaliser pour les mêmes dimensions.
Quel est le prix de l’API ?
L’API coûte $0.002 par requête. La version pour navigateur est accessible gratuitement sur cette page.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
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)Exemple de requête
{
"icons": [
{
"size": "16x16",
"path": "/favicon-16x16.png"
},
{
"size": "32x32",
"path": "/favicon-32x32.png"
},
{
"size": "180x180",
"path": "/apple-touch-icon.png"
}
]
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.favicon_meta_generate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
timeout_sec | 30 |
max_crawl_pages | 25 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |