PureDevTools

Markdown Link Checker

Extract and validate all links in Markdown — format checks, anchor references, duplicate detection

All processing happens in your browser. No data is sent to any server.
32 lines · 843 chars
12
Total links
5
Valid
5
Warnings
2
Errors

Statistics

Total links12
Unique URLs11
Unique domains4

Protocol distribution:

https × 6relative × 2anchor × 2http × 1(empty) × 1

Unique domains (4):

docs.example.comexample.comgithub.comnpmjs.com
Filter:
https://docs.example.com/guide
linkL3

Text: official documentation

http://npmjs.com/package/my-tool
linkL7

Text: npm

https://example.com
linkL14

Text: homepage

./contact
linkL14

Text: contact page

https://example.com/images/hero.png
imageL16

Text: Hero image

#installation
linkL20

Text: configuration section

example.com/api-reference
linkL22

Text: API reference

https://github.com/example/my-tool
linkL26

Text: GitHub repository

https://docs.example.com/guide
linkL27

Text: Official documentation

(empty)
linkL28

Text: Empty link

#nonexistent-heading
linkL29

Text: Broken anchor

https://docs.example.com
refL31

Text: docs

Your README has 40 links — documentation pages, API references, badge URLs, anchor links to sections. After a refactor, three of those links point to renamed files, one has a typo in the protocol (htps://), and two anchor links reference headings that no longer exist. You need to scan all links at once and find the broken ones before pushing.

The markdown-link-check npm package makes HTTP requests to verify each URL — slow, rate-limited, and requires Node.js. This tool does format validation only — it extracts all links, detects missing protocols, empty hrefs, broken anchor references, duplicate links, and relative vs absolute URL issues. No HTTP requests are made, so it’s instant and works offline. Everything runs in your browser.

A Markdown link checker scans Markdown source text for hyperlinks and validates their format. This tool extracts every link — inline links, image links, reference definitions, and bare URLs — then flags common issues such as missing protocols, empty hrefs, broken anchor references, and duplicate URLs.

Unlike server-side link checkers that send HTTP requests to verify each URL, this tool performs format-only validation entirely in your browser. No requests are made, no data leaves your device, and you can safely check internal documentation, drafts, or private content.


How to Use This Tool

  1. Paste Markdown — paste any Markdown content into the input area, or click Load sample to see a pre-filled example.
  2. Review the summary — the four stat cards show how many links are valid, have warnings, or have errors.
  3. Check statistics — see unique URL count, unique domain count, and protocol distribution.
  4. Filter results — use the filter buttons (All / Valid / Warnings / Errors) to focus on specific link categories.
  5. Expand issues — click the ”▼ N issues” button on any link row to see the specific issue codes and explanations.
  6. Fix and re-paste — correct issues in your source document and paste again to re-check.

All processing runs in your browser. Nothing is sent to a server.


Source typeSyntaxExample
link (inline)[text](url)[GitHub](https://github.com)
image![alt](url)![Logo](https://example.com/logo.png)
ref (reference definition)[label]: url[docs]: https://docs.example.com
bareRaw https:// in texthttps://example.com

Not extracted (intentional):


Issue Codes

Errors (must fix)

CodeMeaningExample
EMPTY_URLThe link URL is blank[Click here]()
MISSING_PROTOCOLLooks like a URL but has no http:// or https://example.com/page
MALFORMED_URLCannot be parsed as a valid URLhttps://exa mple.com
CodeMeaningWhen to fix
HTTP_PROTOCOLUses http:// instead of https://Always — upgrade to HTTPS
RELATIVE_URLURL is relative, e.g. ./page or ../docsCheck if the rendering context supports relative links
BROKEN_ANCHOR#fragment doesn’t match any heading in the documentFix the anchor or add the missing heading
EMPTY_ANCHORURL is just # with no fragmentAdd a target heading or remove the link
DUPLICATE_URLThe same URL appears more than onceConsolidate or confirm intentional repetition

Anchor Reference Validation

When a link uses a fragment-only URL such as [see usage](#usage), this tool checks whether the document contains a heading that matches the anchor.

How headings are slugified (following GitHub Flavored Markdown rules):

  1. Convert to lowercase
  2. Replace spaces with hyphens (-)
  3. Remove characters that are not alphanumeric or hyphens
  4. Collapse multiple consecutive hyphens

Examples:

HeadingAnchor slug
## Getting Started#getting-started
### API Reference#api-reference
## What's New?#whats-new
## C++ Setup#c-setup

If #getting-started appears as a link target but the document has ## Getting Started Guide, the anchor won’t match and you’ll see a BROKEN_ANCHOR warning.


After checking, the Statistics panel shows:


Missing protocol

A frequent mistake is writing a URL without its scheme:

<!-- Wrong — will be treated as a relative path -->
[Visit us](www.example.com)

<!-- Correct -->
[Visit us](https://www.example.com)

Anchor mismatch after heading change

When you rename a heading, existing anchor links break silently:

## Old Heading Name

<!-- This still works -->
[see above](#old-heading-name)

After renaming to ## New Section:

## New Section

<!-- Now broken — slug changed to #new-section -->
[see above](#old-heading-name)

Use this tool to catch such regressions after heading edits.

Reference definition typos

Reference-style links are easy to mis-define:

[Visit docs][docs-link]

<!-- Typo: "doc-link" won't match "docs-link" -->
[doc-link]: https://docs.example.com

The tool extracts reference definitions (the [label]: url lines) as separate link entries so you can audit the URLs they point to.

See the [installation guide](https://docs.example.com/install).
...
For setup, follow the [installation guide](https://docs.example.com/install).

Duplicate links are flagged with a DUPLICATE_URL warning. This is not always an error — sometimes repetition is intentional — but it’s worth reviewing.


What This Tool Does Not Check


Frequently Asked Questions

Q: Does this tool make HTTP requests? A: No. All validation is purely based on URL format and document structure. No requests are sent to any URL. This means you can safely check drafts, internal documentation, or confidential content.

Q: Why is my relative link showing a warning? A: Relative URLs (like ./page or ../docs) are valid in many contexts but can break when Markdown is rendered on a platform with a different base path (e.g., GitHub, npm README, or a docs site with path prefixes). The warning is advisory — if you know your rendering environment handles relative links correctly, you can ignore it.

Q: My link has a title in parentheses — is that supported? A: Yes. The tool correctly strips optional titles from URLs: [text](https://example.com "My title") extracts https://example.com as the URL and ignores the title string.

Q: Why aren’t links in my code blocks extracted? A: Links inside fenced code blocks ( ``` ```) and inline code spans ( `` `` “) are intentionally ignored. Code examples often contain placeholder or example URLs that are not meant to be real links.

Q: Can I check a large Markdown file? A: Yes. The tool has no size limit. Processing happens in your browser using JavaScript, so performance depends on your device. Documents up to several hundred kilobytes will process near-instantly.

Q: Is my Markdown content stored anywhere? A: No. The content is only held in memory in your browser tab and is never sent to a server. Closing the tab clears it entirely.

Related Tools

More HTML & Markdown Tools