HTML Beautifier & Formatter
Paste HTML to beautify, minify, and validate instantly.
Upload a .html, .htm, or .txt file (max 5MB)
Beautify Options
What "Validate" Actually Checks (Read This Before Trusting It)
The Validate button is worth understanding precisely: it runs a single regex (/<[^>]+>/g) against your input and reports "Valid HTML" the moment it finds at least one tag-shaped string. It does not check that tags are closed, that nesting is correct, that void elements aren't wrongly closed, or that attribute syntax is sound โ pasting <div><span>broken with no closing tags at all will still report "Valid HTML" because it contains bracket-looking substrings. Treat this button as a quick "does this look like markup at all" sniff test, not a substitute for the W3C Nu HTML Checker or your editor's built-in linting if you need real structural validation.
How Beautify Handles Script, Style, and Void Tags
-
โ
Script and style content passes through untouched: the formatter tracks when it's inside
<script>or<style>and stops re-indenting until the matching closing tag โ so your embedded JavaScript or CSS keeps its original internal formatting rather than getting mangled by the HTML indenter. It won't beautify the JS/CSS itself; use this site's JavaScript minifier or CSS minifier/beautifier separately for that. -
โ
Void elements correctly don't add an indent level: the standard HTML5 void tags (
area base br col embed hr img input link meta param source track wbr) are recognized explicitly, so a stray<br>or<img>won't push everything after it one level deeper the way an unclosed regular tag would. -
โ
It's a tag-scanner, not a DOM parser: beautify works by walking character-by-character looking for
<and>, so it doesn't build a real element tree. Deeply malformed HTML (mismatched or missing closing tags) can produce indentation that drifts rather than an error message, since there's no structural validation happening during formatting.
A Real Gotcha: Minify and Whitespace-Sensitive Tags
Minify strips HTML comments and collapses every run of whitespace to a single space, anywhere in the document โ including inside <pre> and <textarea> tags, where whitespace is meaningful. If you minify a code sample wrapped in <pre>, expect its line breaks and indentation to collapse along with everything else โ this tool doesn't special-case those elements the way a production-grade minifier (like html-minifier-terser) would. It's also worth knowing the comment-stripping regex removes every <!-- ... --> block indiscriminately, which means IE conditional comments (<!--[if IE]>...<![endif]-->) get deleted too, not just decorative comments.
Frequently Asked Questions
I pasted broken HTML and it still said "Valid HTML" โ is that a bug?
No, that's the tool working as designed but with a narrow definition of "valid": it only confirms your input contains at least one tag-shaped string, not that your markup is well-formed. For real structural validation (unclosed tags, improper nesting), use a dedicated HTML validator.
Why did my <pre> code block lose its formatting after minifying?
Minify collapses all whitespace runs to a single space throughout the entire document, with no exception for <pre> or <textarea> content, where line breaks and indentation are semantically meaningful. Keep an unminified copy if you need to preserve that formatting.
Does Beautify reformat the JavaScript inside my <script> tags?
No โ it deliberately leaves everything between <script> and </script> (and <style>/</style>) untouched so it doesn't corrupt code syntax. Format your JS or CSS with a JS-aware or CSS-aware tool separately.
Will my IE conditional comments survive minification?
No โ the minifier removes every HTML comment block indiscriminately, including <!--[if IE]> conditional comments. If you still support those, minify a copy that has them removed intentionally or add them back after minifying.
Can Beautify fix mismatched or unclosed tags for me?
No โ it re-indents based on the tags it sees but doesn't detect or repair structural errors like a missing closing tag. If the HTML is malformed going in, expect the indentation to reflect that rather than get silently corrected.
