Minifique código HTML y mida la reducción de tamaño
Este minificador HTML elimina comentarios y texto compuesto solo por espacios entre etiquetas contiguas, pero conserva el texto visible, los atributos, los valores entre comillas, los scripts y los estilos.
Ejecutar — gratis
También comprueba que los elementos ordinarios se cierren en el orden correcto, y reconoce tanto los elementos vacíos estándar de HTML como la sintaxis de cierre automático explícito. Cada resultado correcto incluye el HTML compacto, los recuentos de bytes UTF-8 originales y finales, el porcentaje ahorrado y el número de comentarios eliminados. La operación es determinista, no necesita conexión de red y ofrece una alternativa prudente a la reescritura agresiva del marcado.
Elimine formato sin borrar el contenido de la página
El HTML legible suele contener sangrías, líneas en blanco y comentarios explicativos que facilitan el mantenimiento del documento, pero añaden bytes al recurso publicado. Esta capacidad elimina los comentarios HTML ordinarios y suprime los nodos de texto compuestos solo por espacios cuando aparecen entre dos etiquetas de marcado. Conserva deliberadamente todo texto que contenga algún carácter distinto de un espacio, ya que un espacio dentro de una frase visible puede separar palabras y ser importante para el diseño o la accesibilidad. Los valores de los atributos no cambian, incluidos los valores entre comillas que contienen ángulos, espacios, secuencias parecidas a comentarios o datos incrustados. El analizador lee cada etiqueta completa y respeta las comillas, en lugar de detenerse ante el primer signo de cierre que encuentra. Los cuerpos de script y style reciben un tratamiento especial: su contenido se copia exactamente hasta la etiqueta de cierre correspondiente, por lo que los operadores de comparación, cadenas, selectores CSS y sintaxis de comentarios internos no se confunden con marcado HTML. El campo html devuelto puede guardarse como artefacto de despliegue, mientras el código legible permanece en el control de versiones. Este alcance prudente evita reordenar atributos, normalizar texto, decodificar entidades, omitir etiquetas o efectuar otras transformaciones que podrían alterar el comportamiento del navegador.
Detecte marcado incompleto o anidado de forma incorrecta
La minificación nunca debería ocultar una plantilla truncada presentándola como un archivo válido para producción. Durante el análisis del documento, la capacidad registra cada elemento de apertura ordinario y exige que los elementos se cierren en el orden inverso al de su apertura. Por tanto, si se abre un div y después un span, el span debe cerrarse antes que el div. Una etiqueta de cierre inesperada, una etiqueta sin terminar, un comentario sin cerrar o un elemento que siga abierto al final genera un error de entrada no válida en vez de una salida parcial. Los elementos vacíos estándar, como img, input, meta, link, br, hr, source y wbr, no necesitan etiqueta de cierre. También se admite la sintaxis explícita de cierre automático para cualquier elemento con nombre, lo que permite procesar fragmentos con forma XML y resultados de componentes que incluyen una barra final. Se trata de una validación estructural deliberada, no de un comprobador completo de conformidad con la especificación HTML. En particular, el algoritmo no deduce cierres opcionales ni repara marcado que un navegador podría tolerar. Si el origen omite cierres de elementos como párrafos o elementos de lista, ciérrelos explícitamente antes de enviarlo. Esta regla estricta facilita la detección de plantillas defectuosas y mantiene resultados predecibles en cualquier entorno de automatización.
Mida el ahorro en un flujo de publicación reproducible
La respuesta mide tanto el código enviado como el resultado compacto en bytes UTF-8, una representación más fiel del tamaño de almacenamiento y transferencia de los recursos HTML habituales que el recuento de caracteres de JavaScript. Esta diferencia importa cuando el marcado contiene texto acentuado, alfabetos no latinos, emoji u otros caracteres que ocupan varios bytes. reduction_percent se calcula a partir de esos totales exactos y se redondea a dos decimales, mientras que comments_removed indica cuántos comentarios HTML completos se eliminaron. Un generador de sitios estáticos puede procesar cada página renderizada con esta capacidad, guardar el valor html devuelto y registrar las mediciones en su informe de compilación. Un flujo de plantillas puede usar los errores estructurales para detener la publicación cuando el marcado generado está cortado o mal anidado. Como el procesamiento es puro y determinista, la misma entrada siempre produce la misma salida y las mismas métricas, sin llamadas de red, dependencias externas, valores aleatorios ni comportamientos vinculados a la hora. Cada solicitud API automatizada cuesta $0.002. Tenga en cuenta que esta operación no comprime los datos de transporte, agrupa recursos enlazados, optimiza JavaScript o CSS en línea ni reescribe la semántica del documento. Después puede aplicar compresión del servidor, como Brotli, para ahorrar aún más en la transferencia.
Qué puede hacer con ella
Prepare páginas estáticas para el despliegue
Elimine comentarios de autor y sangrías del HTML generado antes de publicar el artefacto compacto.
Valide el resultado de las plantillas
Detenga una compilación cuando el marcado generado contenga un elemento no vacío sin cerrar o mal anidado.
Controle la reducción de tamaño del marcado
Registre bytes originales, bytes compactos, número de comentarios y porcentaje ahorrado en un informe de versión.
Preguntas frecuentes
¿Qué elimina el minificador?
Elimina comentarios HTML completos y texto compuesto solo por espacios situado entre etiquetas contiguas.
¿Elimina espacios del texto visible?
No. Todo texto que contenga algún carácter distinto de un espacio se conserva exactamente, incluidos sus espacios circundantes.
¿Qué elementos pueden quedar sin etiqueta de cierre?
Los elementos vacíos estándar de HTML están exentos y se acepta cualquier elemento escrito con sintaxis explícita de cierre automático.
¿Cómo se tratan los scripts y los estilos?
Sus cuerpos se copian sin cambios hasta la etiqueta de cierre correspondiente, para evitar que el código incrustado se interprete como HTML.
¿Cómo se calcula la reducción?
La capacidad compara los recuentos de bytes UTF-8 originales y finales, y redondea el porcentaje de reducción a dos decimales.
¿Cuánto cuesta una solicitud API?
Cada solicitud API cuesta $0.002.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su 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)Ejemplo de solicitud
{
"html": "<!doctype html>\n<html>\n <body>\n <!-- Greeting -->\n <h1>Hello</h1>\n </body>\n</html>"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.minify_html",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |