Markdown Linter: Catch Broken Markdown in Your Browser
Paste Markdown and get a list of issues with line numbers and fixes: headings, alt text, bare URLs, list markers, tables, code fences, trailing whitespace.
A pragmatic Markdown linter that catches the handful of issues that actually break documents in the real world. Paste your Markdown and it scans for skipped heading levels, images with no alt text, bare URLs that should be linked, mixed bullet markers in the same list, tables with rows that have too few or too many columns, fenced code blocks that never close, trailing whitespace, tabs inside indentation, and empty links. Each issue shows the line number and a one-line fix suggestion. This is not a full CommonMark parser; it is ten regex-backed rules that catch maybe 95 percent of what you would ship by accident. Nothing you paste leaves your browser.
A common use: a developer relations engineer finishing a 40-page employee handbook export bound for a ChatGPT knowledge base. The Notion export came out with mixed dash-and-asterisk bullets, six images missing alt text, and two tables where one row lost a pipe during copy-paste. Pasting the whole thing into the linter surfaces all of it at once. Useful as a last pass before you open a PR on a README, publish a blog post, or export a set of notes to a static site generator.
Issues
Paste Markdown on the left to see issues here.
Using the Markdown Linter in practice
The linter is most useful as a final pass before you commit or publish. Most people write Markdown fast and catch syntax errors only when the rendered page looks wrong, by which point someone has already seen it. Pasting a draft here for thirty seconds catches the half-dozen issues you accidentally introduced and would have to fix later anyway.
Concrete example one: a README. You wrote headings while you were thinking, and somewhere along the way you went from H2 to H4 without an H3 in between. GitHub renders it fine. Screen readers and the accessibility report in your CI pipeline flag it. The linter shows the exact line, you demote or promote as needed, done. Same story with images: it is easy to paste a screenshot into a Markdown file and end up with . The linter flags every empty alt attribute so you can add descriptions before merging.
Concrete example two: a blog post with tables. Markdown tables are a common cause of silently broken renders. If one row has three columns and another has four, some renderers drop the extra cell, some add a phantom column, some just fail to render the table at all. The linter counts pipes in each row and tells you which line is off. A 30-second fix instead of a broken production page.
Concrete example three: exports from Notion, Obsidian, or Google Docs. These often produce Markdown with mixed list markers (dashes and asterisks in the same document), bare URLs pasted as-is, and trailing whitespace on every line. The linter surfaces all three in one pass so you can clean up a whole document in a single editing session. For a deeper dive on where Markdown fits in a modern writing stack, see 10 things you can do with Markdown. If you need to convert an HTML export into clean Markdown before linting, the HTML to Markdown converter gets you most of the way there in one step.
How to use this tool
- 1
Paste Markdown into the editor on the left (or click "Load sample" to see the linter in action).
- 2
Issues appear on the right with a line number, a short label, and a fix suggestion.
- 3
Click an issue to jump the editor cursor to that line.
- 4
Fix, re-check, ship. The lint runs continuously as you edit.
Frequently asked questions
Is this a full CommonMark linter?+
No. It is a quick, pattern-based linter for the issues that most commonly break Markdown in the real world: skipped heading levels, missing image alt text, bare URLs, mixed list markers, inconsistent table columns, unclosed code fences, and trailing whitespace. If you need full spec compliance, look at markdownlint or remark-lint; those run in Node. This tool is for a fast paste-and-scan review in the browser.
Why does skipping heading levels matter?+
Screen readers use headings as the document outline. If you jump from H2 to H4, assistive tech users lose the page structure, and SEO tools flag it as a problem. It also suggests sloppy editing. The fix is usually to promote the deeper heading one level, or to add the missing intermediate heading.
Why are bare URLs a problem?+
Some Markdown renderers auto-link bare URLs, some do not. That inconsistency means the same document can render with clickable links in one tool and plain text in another. Wrapping the URL in angle brackets (<https://example.com>) or turning it into a proper [text](url) link is the safe fix.
How do I fix mixed list markers?+
Stick to one marker style throughout a document: all dashes, all asterisks, or all plus signs. Pandoc, GitHub, and most renderers handle all three, but mixing them looks messy in source view and confuses diffs. The fix is one find-and-replace away.
Does the linter handle front matter and code blocks correctly?+
Yes. Lines inside fenced code blocks are skipped for most rules, so you will not get warnings about "headings" that are really just comments in a code sample. YAML/TOML front matter at the top of the document is also skipped.
Is my content sent anywhere?+
No. The linter runs entirely in your browser. We never see your Markdown.
Related tools
Related learning
Need to convert real files to Markdown?
This tool is a free helper. For full PDF, Word, Excel, PowerPoint, EPUB, and image conversion with AI-ready output, create a free account.