Markdown Link Checker
Find broken links and dead anchors in any Markdown document
Audit your README, docs, or blog draft for broken internal anchors, empty link targets, malformed mailto addresses, missing image alt text, and unreachable external URLs. Runs entirely in your browser.
| Line | Kind | Status | Text | URL | Note |
|---|---|---|---|---|---|
| L3 | anchor | ok | introduction | #introduction | |
| L3 | relative | ok | API guide | api.md | |
| L5 | external | ok | our site | https://trymarkdownviewer.com | |
| L5 | mailto | ok | us | mailto:hi@example.com | |
| L7 | image | ok | Logo | /logo.png | |
| L8 | image | warn | (empty) | missing-alt.png | Image is missing alt text. |
| L9 | anchor | error | Broken anchor | #does-not-exist | Anchor #does-not-exist does not match any heading in this document. |
| L10 | empty | error | Empty | (empty) | Link target is empty. |
| L11 | mailto | warn | Bad mailto | mailto:not-an-email | mailto: does not look like a valid email address. |
External pings use HEAD requests in no-cors mode — the browser hides the exact status code, but reachability errors (DNS, timeout, refused) are surfaced. Authoritative status codes require a server-side checker.
How to use the Markdown link checker
- Paste Markdown, or click Open .md to load a file.
- The table lists every link / image reference with its line number, kind, and status. Use the filter pills to narrow by kind or hide passing links.
- Click Ping external URLs to attempt HEAD checks for reachable hosts. Browser security limits keep status codes hidden in most cases, but DNS / timeout / refused errors are reported.
- Fix issues in your editor and re-paste — re-running takes a second.
What gets flagged
| Issue | Severity |
|---|---|
Empty link target ([]()) | error |
#anchor not matching any heading slug | error |
| Empty link label | warning |
| Image without alt text | warning |
| Malformed mailto | warning |
Why a Markdown link checker is worth the minute
A broken link in a README, blog post, or doc page is the cheapest possible defect to ship and the most embarrassing to leave. It costs nothing to introduce and costs reader trust to leave in place. Running a quick check before a publish saves that.
Common ways links break:
- Reordering headings changes anchors implicitly when you've adjusted the title text.
- Renaming files in a docs folder leaves stale relative paths.
- Copy-paste from another doc drags in mailto and external URLs that no longer work.
- AI-assisted writing confidently fabricates URLs that point to nothing.
The link checker catches all four classes.
Companion tools
- Markdown Image Audit — deeper image-only view with duplicates.
- Markdown Slug Generator — preview slugs as you rename headings.
- README Health Score — combine link integrity with other audits.
Privacy & data
Document parsing runs entirely in your browser. Optional external pings are sent directly from your browser to each destination — never through our servers.
Frequently asked questions
- It scans every link and image reference in a Markdown document, classifies them (anchor, external, relative, mailto, image, empty), and flags issues such as broken internal anchors, missing alt text, malformed email addresses, and empty link targets. Optionally it pings external URLs to detect unreachable hosts.
- It can attempt a HEAD request from your browser, but browsers block cross-origin responses by default. We surface connection-level failures (DNS, timeout, refused) reliably; exact 200/404 status codes are not always available client-side. For authoritative external checks, use a server-side crawler or CI job.
- It extracts every heading from your document, computes GitHub-style slug IDs, and verifies each `#anchor` link in the body resolves to one of those IDs. If the slug doesn't exist, the link is flagged as an error with the line number.
- Yes. Images appear in the table as their own row with an empty `text` (alt) value, and the status is a warning. Pair this with the [Markdown Image Audit](/tools/markdown-image-audit) for a deeper image-only view.
- No. The scan runs in your browser; only optional external pings leave the page, and those go directly from your browser to the destination, not through our servers.
- The npm tool is great for CI: it can read actual HTTP status codes server-side and respects robots / retry policies. This page targets quick, one-off audits — no install, no Node.js — and offers an interactive table view with line numbers.