Skip to content

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.

5 ok2 warn2 error
LineKindStatusTextURLNote
L3anchor okintroduction#introduction
L3relative okAPI guideapi.md
L5external okour sitehttps://trymarkdownviewer.com
L5mailto okusmailto:hi@example.com
L7image okLogo/logo.png
L8image warn(empty)missing-alt.pngImage is missing alt text.
L9anchor errorBroken anchor#does-not-existAnchor #does-not-exist does not match any heading in this document.
L10empty errorEmpty(empty)Link target is empty.
L11mailto warnBad mailtomailto:not-an-emailmailto: 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.

  1. Paste Markdown, or click Open .md to load a file.
  2. 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.
  3. 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.
  4. Fix issues in your editor and re-paste — re-running takes a second.

What gets flagged

IssueSeverity
Empty link target ([]())error
#anchor not matching any heading slugerror
Empty link labelwarning
Image without alt textwarning
Malformed mailtowarning

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

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

What does a Markdown link checker do?
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.
Can it actually check that external URLs are alive?
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.
How does it know an anchor is broken?
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.
Will it catch images without alt text?
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.
Is anything uploaded?
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.
How is this different from markdown-link-check (npm)?
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.