Add your file
Choose or drop a .html or .htm file. You can paste the contents instead.
Open an .html or .htm file, or paste markup, and you get the source as text rather than a rendered page, together with a list of structural findings: elements closed by the wrong end tag, elements left open at the end of the file, stray end tags, a self-closing slash on a div or other non-void element, duplicate attributes, broken attribute quoting, and character references that lack a semicolon or point outside Unicode. Every finding carries a line and column, and mismatches also point back to the opening tag. The inspector reports whether the doctype is missing, malformed, placed after content or triggers quirks mode; checks meta charset, http-equiv and XML encoding declarations against the actual UTF-8 bytes and flags any that arrive after the first 1024 bytes; builds an h1–h6 outline with level skips and a list of landmarks such as main and nav; and inventories the scripts, iframes, stylesheets, images, resource hints and external origins the source declares. When you want tidier markup, switch the transform to Reindent, pick 2 spaces, 4 spaces or a tab, and choose LF or the file's own CRLF line endings. The formatting report lists every line whose indentation changed and every region left untouched, and the result downloads as yourfile.formatted.html.
or drop a file here
Choose or drop a .html or .htm file. You can paste the contents instead.
The file is read and parsed in this browser — nothing is uploaded.
Look over what came back, then copy it, download it, or move on.
Want to know how files are handled? Read the privacy notice →
Choose the .html or .htm file here, or paste its markup, and it is shown as plain source text with structural findings beside it. Nothing is rendered, so you see tags, attributes and comments exactly as written. Inspect only is the default; switch the transform to Reindent if you also want a tidied copy you can download.
No upload happens: the HTML file is read and formatted inside your current browser tab and is not sent to a server. The tool also never requests the scripts, stylesheets, images or fonts the document points to, and performs no DNS prefetch or preconnect, so inspecting an intranet page does not announce anything to the hosts it references.
Open this page in your phone's browser, pick the HTML file from your files or paste the markup, and the source appears as text with its findings. Phones normally hand an HTML file straight to the browser to render, which hides the tags; here nothing is rendered. The same steps work in current browsers on Windows, macOS and Linux.
The file was saved in another encoding such as Windows-1252, Shift_JIS or GBK, and this tool decodes UTF-8 only, so it stops at the first bad byte. The error gives that byte's offset, line and column so you can find it. Re-save the file as UTF-8 in your editor and open it again; UTF-16 files and files starting with NUL bytes need the same conversion first.
Use the two positions each finding gives: the opening tag's line and column, and the end tag or end of file where the problem surfaced. A span closed by </div>, for example, lists both the span and the </div>. The formatter does not guess where a close belongs and leaves that stretch unindented, so correct it in your editor and inspect again.
The limit is 8,000,000 bytes per file (about 8 MB) and 512 levels of nested elements; anything beyond either is refused rather than partly processed. A depth refusal names the line and column where the ceiling was crossed. Pasted text counts against the same byte limit, and formatted output over 400,000 characters can still be downloaded even though the preview is shortened.
No, content inside pre, textarea, script and style is copied byte for byte, and only leading indentation elsewhere is rewritten. Comments, tags that span several lines and regions with structural errors are also left as they were, including their original line endings. Attribute order, quoting and text never change, and a newline right after <pre> or <textarea> is kept and flagged as significant.
Opening it here runs none of its scripts and renders nothing, and no URL inside the file is contacted. You get a list of the scripts, iframes and external origins the source declares, which helps you decide what the file does, but the tool gives no safe or unsafe verdict, detects no malware or trackers, and cannot see URLs that scripts assemble at runtime.
Not necessarily: zero findings means the structural checks listed in the report found nothing, not that the page passes a validator. Those checks cover tag balance, nesting, void and raw-text elements, doctype, charset, attributes, character references, headings and landmarks. No full HTML grammar is applied, and a heading outline is not an accessibility audit.
This formatter reindents your markup and reports structural problems with positions, while a conformance validator checks the document against the full HTML grammar. The inspector adds things a validator page does not focus on, such as an inventory of declared scripts and external origins and a line-by-line formatting report, and it works on the file in your browser instead of a submitted copy.
It tells you whether browsers would lay the page out in standards mode, limited-quirks mode or quirks mode based on its doctype. A missing doctype or an old public identifier usually means quirks mode, where box sizing and other layout rules differ. The report shows the public and system identifiers and byte offset; <!DOCTYPE html> gives standards mode.