Documentation link map
Map how your Markdown documents link to each other and find broken links, missing heading anchors and pages nothing links to.
Up to 2,000 files, 2,000,000 characters and 100,000 links. Everything runs in your browser and nothing is uploaded. Downloads: JSON report, CSV link table and Graphviz DOT graph. Start each file with a line such as ==> docs/guide.md <== so links between files can be resolved. Up to 1,000,000 characters. Review the settings before running.
Your result
How to use Documentation link map
- Paste your Markdown files, starting each one with a header line such as ==> docs/guide.md <==.
- List the entry documents readers start from, such as README.md.
- Run the map and review broken files, broken anchors and orphan pages.
- Download the JSON report, the CSV link table or the Graphviz DOT graph.
Useful next steps
What it does
The map reads every Markdown file you paste, lists each link with its line, and decides whether it points to another document, a heading inside it, an outside website or a file that is missing. It also counts links into and out of each document and lists orphan pages that no other document links to. Entry documents are never orphans: a file name such as README.md counts in every folder, and a path such as docs/start.md or /README.md counts only for that file.
How links are resolved
Files are read with the marked Markdown lexer in GitHub Flavored Markdown mode. Relative links resolve against the linking file and links starting with / against the root of the pasted set. A link that does not match a pasted file exactly, such as setup or guide/, also tries setup.md, setup.mdx, and README.md or index.md inside that folder, unless you turn this off. A reference-style link such as [guide][setup] is listed once, at the line where it is used, and a definition that no link uses is listed at its own line. Anchors are checked against GitHub style heading slugs, including headings inside quotes and lists, and against HTML anchors such as <a id="setup">. HTML entities in headings are decoded before the slug is made: numeric ones such as & and the named ones &, <, >, ", ' and . Links that climb above the root are reported as outside the docset. Links inside code blocks are ignored.
Limits
Only the pasted files exist for the check, so a link to an image or other file that you did not paste is reported as broken. MkDocs, Docusaurus and other site generators can create slugs differently from GitHub, and other named HTML entities in headings, such as ©, stay as written in the slug. External websites are listed but never fetched. Files under node_modules, .git, dist, build and other build folders are skipped unless you turn that off, and you can add your own exclude patterns in gitignore syntax.