How to collect inline links into a reference block
- Step 1Open the tool — Visit /markdown-tools/md-footnote-linker. Processing happens in your browser; the draft is not uploaded.
- Step 2Load the draft — Paste the Markdown or drop a single
.mdfile (one document per run — acceptsMultiple is false). - Step 3Run — Click Run. There is nothing to configure — the collection pass is fully deterministic.
- Step 4Scan the body markers — Confirm every inline
[text](https://url)became[text][n]and that nothing in code fences changed. - Step 5QA the reference block — Read the appended
[n]: urlblock bottom-up: each unique URL once, duplicates already merged. Flag any source that looks wrong. - Step 6Export — Copy or download the
.md. Keep the reference block as your QA record, or paste the cleaned draft back to the author.
QA matrix: what gets collected vs. preserved
The collector matches only inline http(s) links in prose. Everything else is a deliberate no-op — useful to know when auditing the output.
| Construct in the draft | Action | QA implication |
|---|---|---|
[text](https://host/path) | Collected → [text][n] | Counts as one external citation in the reference block. |
[text](http://host) | Collected → [text][n] | Plain http is treated identically to https. |
[text](https://host "title") | Collected; title dropped | Hover titles are lost — flag if the title carried meaning. |
[text](#anchor) | Preserved | Internal cross-references are NOT collected or counted. |
[text](../file.md) | Preserved | Relative links stay inline — audit those separately. |
[^3] / [^3]: note | Preserved | Real footnotes are untouched — this tool does not lint them. |
| URL inside a ``` fence | Preserved | Example code is never altered or counted. |
Plan limits for QA runs
The character limit is enforced separately from file size — relevant when QA-ing book-length manuscripts.
| Plan | Max file size | Max characters | Files per run |
|---|---|---|---|
| Free | 1 MB | 500,000 | 1 |
| Pro | 10 MB | 5,000,000 | 10 |
| Pro-media | 50 MB | 20,000,000 | 50 |
| Developer | 500 MB | Unlimited | Unlimited |
Cookbook
Before/after pairs framed for editorial QA — each highlights what the reference block tells a reviewer. URLs are illustrative.
Over-citation made visible
An author cited the same press release three times. After collection, all three point to [1], so the reference block shows one entry — the duplication is now obvious.
Before: [Reuters](https://r.com/a) ... [the report](https://r.com/a) ... [as noted](https://r.com/a). After: [Reuters][1] ... [the report][1] ... [as noted][1]. [1]: https://r.com/a
A clean source inventory
The appended block is the QA deliverable: every external URL, once, in citation order.
Before: See [A](https://a.org), [B](https://b.org), and [C](https://c.org). After: See [A][1], [B][2], and [C][3]. [1]: https://a.org [2]: https://b.org [3]: https://c.org
Internal links are excluded from the count
Anchors and relative links are intentionally not collected, so the reference block reflects only external sources.
Before: Jump to [methods](#methods); cite [source](https://s.org); see [data](./data.md). After: Jump to [methods](#methods); cite [source][1]; see [data](./data.md). [1]: https://s.org
Existing footnotes are not part of QA here
If the draft already uses [^id] footnotes, they pass through untouched — this tool will not catch an orphaned one.
Before: Claim with a footnote.[^1] And a link [source](https://s.org). [^1]: Footnote definition. After: Claim with a footnote.[^1] And a link [source][1]. [^1]: Footnote definition. [1]: https://s.org
Title text is silently dropped
QA tip: if your house style relies on link titles, this transform removes them — verify before shipping.
Before: Read [the memo](https://m.org/x "Internal memo, 2025"). After: Read [the memo][1]. [1]: https://m.org/x
Edge cases and what actually happens
It does not find orphaned footnotes
Not supportedDespite the slug, this tool does not detect footnote references without definitions, definitions without references, or duplicate [^id] IDs. It collects inline [text](url) links into reference-style notation. For footnote linting you would need a different tool or a manual pass.
Output is reference-style, not footnote, syntax
By designThe result is [text][n] with a [n]: url block — CommonMark reference links that render as ordinary hyperlinks, not [^n] superscript footnotes.
Duplicate URLs collapse to one number
DeduplicatedUseful for QA: repeated citations of the same URL all share a number, so the reference block lists each source once and over-citation is visible.
Link titles are removed
DroppedAn optional "title" after the URL is matched and discarded. If your QA checklist includes title text, note that it will not survive the pass.
Anchors and relative links are not collected
PreservedOnly http(s) URLs are matched. In-page anchors (#...) and relative paths (./..., ../...) stay inline and are not counted in the reference block.
Bracket inside link text breaks the match
Not matchedAnchor text containing a ] (e.g. [see [1]](https://x.org)) fails the pattern and is left inline. Remove or escape inner brackets first.
Code fences are excluded
PreservedAny link inside a ``` fenced block is skipped, so documentation examples are not pulled into the reference block or counted as citations.
No links found
UnchangedIf the draft has no http(s) inline links, the output equals the input — no reference block is appended.
Manuscript over the character cap
RejectedBook-length QA targets can exceed the Free 500,000-character cap even under 1 MB. The cap is independent of file size; use a higher tier or split with /markdown-tools/md-splitter.
Frequently asked questions
Will this catch a footnote reference with no definition?
No. The tool does not validate footnotes or report orphans, missing definitions, or duplicate IDs. It collects inline [text](url) links into a reference-style block. Footnote linting is out of scope.
Does it report over-defined footnotes (definitions with no reference)?
No. It does not analyze [^id] footnotes at all — they are passed through verbatim. Duplicate detection here applies only to repeated URLs in inline links.
Can I run it on Pandoc-style footnotes?
Pandoc footnotes ([^id] and inline ^[text]) are not links, so they are ignored and left unchanged. This tool only transforms inline [text](url) links.
What does the reference block contain?
One [n]: url line per unique http(s) URL, in first-appearance order, appended after a blank line. Titles are not included.
How does deduplication help QA?
Repeated citations of the same URL collapse to one number, so the reference block lists each external source exactly once — making over-citation and inconsistent anchor text easy to spot.
Are internal links counted?
No. In-page anchors and relative paths are not collected and do not appear in the reference block — it reflects external http(s) sources only.
Does it change anything inside code blocks?
No. Fenced ``` blocks are excluded from the pass, so example links inside them are untouched.
Are there any options?
No. It is a single deterministic transform with no UI controls. For a simpler reference-link output that keeps titles, see /markdown-tools/md-ref-link-converter.
Is the draft uploaded?
No. Everything runs in your browser; the document never leaves your machine.
Can I validate the collected URLs after?
Yes — pipe the output into /markdown-tools/md-link-validator to flag malformed syntax, relative paths, and DNS failures (note: it cannot check HTTP 404s from the browser).
What if I want to re-tidy the whole document?
After link collection, /markdown-tools/md-prettifier can normalize spacing and list markers across the file for a consistent final pass.
How many files can I process at once?
One per run on every tier (acceptsMultiple is false). To process several files in sequence, run them one at a time; merge first with /markdown-tools/md-merger if you want a single reference block.
Privacy first
All Markdown processing runs locally in your browser using JavaScript. No file is ever uploaded to JAD Apps servers — only metadata counters are saved for signed-in dashboard stats.