Heading & document structure checker

Paste Markdown, HTML, or plain text to see its heading outline: skipped levels, duplicate headings, sections with no subhead running long, and a table of contents you can copy straight out.

Your text never leaves your browser.

Paste a Markdown, HTML, or plain-text document above to see its outline.

What this checks

Structural defects are invisible line by line — a heading reads perfectly well on its own, and the problem only shows up when you compare it against the rest of the outline. That's exactly the kind of check a sentence-level proofread misses and a tool built to see the whole document at once catches immediately.

Skipped levels, and missing or duplicate H1s

An H2 followed directly by an H4 breaks the outline for anything that generates a table of contents from heading depth, including screen readers. A document needs exactly one H1 — used as the title — and any heading text repeated word-for-word at the same level makes a generated TOC ambiguous about which section a link actually points to.

Sections with no subheading, in both directions

A heading with 400-plus words and no subhead under it is harder to scan and impossible to link to a specific point within — split it up. A heading with almost nothing under it is usually a sign it should be merged into a neighboring section instead of standing alone. Both thresholds are adjustable above, since "too long" genuinely varies by document type.

Non-parallel siblings and case style drift

"Installing the agent," "Configuration," and "How to run tests" are three different grammatical shapes sitting at the same level — a reader scanning the outline has to re-orient for each one. This tool classifies each heading's opening as a gerund, an imperative, a question, or a noun phrase, and flags a set of three or more siblings that don't share a form. It does the same for capitalization: Title Case and sentence case mixed among siblings reads as inconsistent even when each heading is fine in isolation.

Where this tool is deliberately shallow

Markdown parsing is regex-based on purpose: a "#" inside a fenced code block or an inline code span is never mistaken for a heading, and front matter at the top of the document is skipped entirely, but nothing here is a full CommonMark parser. Plain text has no explicit heading levels at all, so detection there is a best-effort guess — the tool says so in the summary rather than pretending otherwise.

Style Guide Linter

Check your docs against the Microsoft and Google style guides, with a cited source for every finding.

Acronym & Abbreviation Auditor

Find acronyms that are never expanded, expanded late, or defined two conflicting ways, plus a glossary export.

Terminology Consistency Checker

Find spelling variants, US/UK dialect mixing, and your own house-style violations, with counts for each.

Learn: Heading Hierarchy in Documentation

Why skipping a heading level breaks more than it looks like it does, and what a generated table of contents actually depends on.