Minifiez du code HTML et mesurez le gain de taille
Ce minificateur HTML supprime les commentaires et les textes composés uniquement d’espaces entre des balises voisines, tout en préservant le texte visible, les attributs, les valeurs entre guillemets, les scripts et les styles.
Lancer gratuitement
Il vérifie aussi que les éléments ordinaires se ferment dans le bon ordre, en reconnaissant les éléments vides HTML standard et la syntaxe explicite de fermeture automatique. Chaque résultat valide contient le HTML compact, le nombre d’octets UTF-8 avant et après traitement, le pourcentage économisé et le nombre de commentaires supprimés. L’opération est déterministe, ne nécessite aucun accès réseau et constitue une solution prudente face aux réécritures agressives du balisage.
Retirez la mise en forme sans effacer le contenu
Un document HTML lisible contient souvent des retraits, des lignes vides et des commentaires explicatifs qui facilitent sa maintenance, mais ajoutent des octets à la ressource livrée. Cette capacité supprime les commentaires HTML ordinaires et retire les nœuds de texte constitués uniquement d’espaces lorsqu’ils se trouvent entre deux balises. Elle conserve volontairement tout texte contenant au moins un caractère non blanc, car une espace dans un texte visible peut séparer des mots et compter pour la mise en page ou l’accessibilité. Les valeurs des attributs restent inchangées, y compris les valeurs entre guillemets qui contiennent des chevrons, des espaces, des séquences ressemblant à des commentaires ou des données incorporées. L’analyseur lit chaque balise complète en respectant les guillemets, au lieu de s’arrêter au premier chevron fermant rencontré. Les corps de script et de style bénéficient d’un traitement particulier : leur contenu est copié à l’identique jusqu’à la balise de fermeture correspondante. Les opérateurs de comparaison, chaînes, sélecteurs CSS et commentaires internes ne sont donc pas pris pour du HTML. Vous pouvez enregistrer le champ html renvoyé comme artefact de déploiement tout en conservant la source lisible dans le contrôle de versions. Ce périmètre prudent évite de réordonner les attributs, normaliser le texte, décoder les entités, omettre des balises ou effectuer d’autres transformations susceptibles de modifier le comportement du navigateur.
Repérez un balisage incomplet ou mal imbriqué
La minification ne doit jamais faire passer un modèle tronqué pour un fichier prêt à être publié. Pendant l’analyse du document, la capacité mémorise chaque élément ouvrant ordinaire et exige une fermeture dans l’ordre inverse. Ainsi, si un div est ouvert avant un span, le span doit être fermé avant le div. Une balise fermante inattendue, une balise inachevée, un commentaire non terminé ou un élément encore ouvert à la fin produit une erreur d’entrée non valide au lieu d’un résultat partiel. Les éléments vides standard tels que img, input, meta, link, br, hr, source et wbr n’exigent pas de balise fermante. La syntaxe explicite de fermeture automatique est également acceptée pour tout élément nommé, afin de prendre en charge les fragments de forme XML et les sorties de composants avec une barre oblique finale. Il s’agit d’une validation structurelle volontaire, et non d’un contrôle complet de conformité à la spécification HTML. L’algorithme ne déduit notamment pas les balises finales facultatives et ne répare pas le balisage toléré par un navigateur. Si votre source omet les fermetures des paragraphes ou des éléments de liste, ajoutez-les explicitement avant l’envoi. Cette règle stricte aide à détecter les sorties de modèles défectueuses et garantit des résultats prévisibles dans tous les environnements d’automatisation.
Mesurez le gain dans un flux de publication reproductible
La réponse mesure la source envoyée et le résultat compact en octets UTF-8, ce qui représente mieux le stockage et le transfert des ressources HTML courantes qu’un simple nombre de caractères JavaScript. Cette distinction importe lorsque le balisage contient des accents, des écritures non latines, des emoji ou d’autres caractères codés sur plusieurs octets. reduction_percent est calculé à partir de ces totaux exacts et arrondi à deux décimales, tandis que comments_removed indique combien de commentaires HTML complets ont été retirés. Un générateur de site statique peut traiter chaque page rendue, stocker la valeur html renvoyée et inscrire les mesures dans son rapport de compilation. Une chaîne de modèles peut exploiter les erreurs structurelles pour interrompre la publication lorsque le balisage généré est tronqué ou mal imbriqué. Le traitement étant pur et déterministe, une entrée identique produit toujours la même sortie et les mêmes mesures, sans appel réseau, dépendance externe, hasard ni comportement lié à l’heure. Chaque requête API automatisée coûte $0.002. Cette opération ne compresse pas le transport, ne regroupe pas les ressources liées, n’optimise pas le JavaScript ou le CSS intégré et ne réécrit pas la sémantique du document. Vous pouvez ensuite appliquer une compression serveur telle que Brotli afin de réduire encore le transfert.
Cas d’usage
Préparer des pages statiques au déploiement
Retirez les commentaires de rédaction et les retraits du HTML généré avant de publier l’artefact compact.
Valider la sortie des modèles
Arrêtez une compilation si le balisage généré contient un élément non vide non fermé ou mal imbriqué.
Suivre la réduction du balisage
Consignez les octets initiaux et finaux, le nombre de commentaires et le pourcentage gagné dans un rapport de version.
Questions fréquentes
Que supprime le minificateur ?
Il retire les commentaires HTML complets et les textes composés uniquement d’espaces entre des balises voisines.
Supprime-t-il les espaces du texte visible ?
Non. Tout texte contenant un caractère non blanc est conservé exactement, y compris ses espaces environnantes.
Quels éléments peuvent rester sans balise fermante ?
Les éléments vides HTML standard sont exemptés, et tout élément écrit avec une fermeture automatique explicite est accepté.
Comment les scripts et les styles sont-ils traités ?
Leur corps est copié sans modification jusqu’à la fermeture correspondante, afin que le code intégré ne soit pas analysé comme du HTML.
Comment la réduction est-elle calculée ?
La capacité compare les nombres d’octets UTF-8 avant et après traitement, puis arrondit le pourcentage à deux décimales.
Combien coûte une requête API ?
Chaque requête API coûte $0.002.
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/dev2/minify-html \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"html":"<!doctype html>\n<html>\n <body>\n <!-- Greeting -->\n <h1>Hello</h1>\n </body>\n</html>"}'const res = await fetch("https://api.kit.forhosting.com/dev2/minify-html", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"html": "<!doctype html>\n<html>\n <body>\n <!-- Greeting -->\n <h1>Hello</h1>\n </body>\n</html>"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/minify-html",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"html": "<!doctype html>\n<html>\n <body>\n <!-- Greeting -->\n <h1>Hello</h1>\n </body>\n</html>"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/minify-html", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"html":"<!doctype html>\\n<html>\\n <body>\\n <!-- Greeting -->\\n <h1>Hello</h1>\\n </body>\\n</html>"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"html":"<!doctype html>\n<html>\n <body>\n <!-- Greeting -->\n <h1>Hello</h1>\n </body>\n</html>"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/minify-html", 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
{
"html": "<!doctype html>\n<html>\n <body>\n <!-- Greeting -->\n <h1>Hello</h1>\n </body>\n</html>"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.minify_html",
"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.
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. |