Find broken Markdown links
Internal anchor links break silently when you rename a heading. Relative paths drift after a folder rearrange. CI tools mostly miss both because they don’t read the Markdown source. This catches them at paste time, before the build does.
What this checks
- In-post anchors —
[text](#section-id)resolves to a heading in the same post. Hugo’s slugify rules: lowercase, dashes, strip punctuation. If the anchor target doesn’t match a heading, it’s broken. - Relative paths —
[other](../some-post)is flagged informationally. Resolving them properly requires the whole folder, which the Mac app does. v1 of this tool stays single-post. - External URLs —
https://...orhttp://...are listed but not HEAD-checked. CORS makes browser-side external checks unreliable; your SSG’s lychee or htmltest does this better at build time. - Empty hrefs —
[text]()is just broken. - Missing protocol —
[bad](example.com)looks like an external link withouthttps://. Probably an authoring slip. - Image-as-link mismatch —
where the path looks like a Markdown file (.mdextension). Common copy-paste error from converting a link to an image.
Want this on every save, scoped to your folder?
Textorium’s broken-link checker (Cmd+Shift+L on the Mac app) scans every post in your site for internal links and images that point to files that don’t exist. SSG-aware path resolution — it understands how Hugo, Jekyll, Eleventy, and Astro resolve content paths, so it catches what your build would catch, before you build.
Get Textorium on the Mac App Store — $4.99, one-time purchase, no analytics in the app.
See the Hugo workflow features →
FAQ
Does this upload my post? No. Link classification runs entirely in your browser. The post never leaves your Mac. Network tab in your browser shows one request for the JavaScript that runs this page and nothing else.
Why don’t you check external URLs? CORS blocks most cross-origin HEAD requests from a browser, so we’d be reporting false-positives. External checking is a build-time job, not a paste-time one. Lychee and htmltest do it well from CI; the Mac app does it on demand.
What about folder-wide checking?
Coming as a follow-up. v1 keeps the input scope to a single post — paste, classify, fix. For whole-folder analysis, the Mac app’s Cmd+Shift+L scans every post against the actual files on disk.
Why are anchor links checked? Internal anchors break silently when you rename a heading and forget to update the link. CI tools usually miss them because they don’t track heading-to-anchor relationships in source. This is one of the few link-health checks better done at the source than at the build.
Does it understand Hugo shortcodes?
Not in v1. {{< ref "post" >}} cross-refs are treated as opaque text — not resolved. The Mac app handles SSG-aware refs natively.
My image link is yellow. Is that a problem?
Probably. Image-as-link mismatch fires when you have  — image syntax pointing at a Markdown file. The common cause is copy-pasting a link and forgetting to remove the leading !. Worth checking each one; sometimes it’s intentional.