Link Audit

"That link goes nowhere"
A reader emails to say the link in an old article goes to a 404. A supplier moves their website and every product page is still pointing at the old one. An editor pasted a link three years ago and the page it went to is long gone. Craft stores the link you give it. It doesn't go back later to see whether the address still answers.
Link Audit does. It reads the links out of your stored content, checks each unique address once, and lists every entry, field and site carrying the broken ones. Each broken link has an Edit link that opens the entry scrolled to the field holding it, and a panel on the edit screen lists that page's broken links, so an editor can fix them where they work. On a site with thousands of them, the Overview suggests where to start, beginning with the few addresses whose one fix clears the most places.

A report you can believe
Most link checkers go page by page: load a page, check its links, move on. On a site of any size that means asking the same supplier about the same footer link thousands of times in one run, until they block you. Then everything they host shows as broken and nobody trusts the report again.
Link Audit keeps one record for each unique address and notes every place it appears, so the footer link on 3,000 pages is checked once. It keeps its requests down to a couple at a time per host, and backs off when a host asks for room.
It also knows a broken link from a site that won't talk to robots. LinkedIn, Cloudflare and their kind refuse automated requests however healthy the link is, so those go on their own Unverifiable list and never count as broken. A link that doesn't answer at all is only called broken after it has failed several times in a row, because a server that's down for an afternoon usually comes back. Every address sits on one of eight verdicts rather than two, so the Broken list only holds links that really are broken.
Free, and what it doesn't do
It's free, under the MIT licence.
It reads stored field values, not rendered pages, so it sees links on entries with no public URL and can tell you which field each one came from. Links hard-coded into templates aren't in your content, so they're only found by the optional crawl of rendered pages, which is off by default because fetching every page is slow.
Safe to point at your content
Every URL it checks came from something somebody typed into a field, so it's careful about where it sends requests.
- A guard refuses any address on a private or reserved network, and checks again on every redirect hop
- Usernames and passwords pasted into a link are stripped off before it's stored
- Three permissions: viewing reports, running scans, and ignoring or restoring links
- Reports only show the sites a user can edit, and a page they can't view appears without its title or field
- TLS certificates are verified, and the checker identifies itself so a host can allow-list it
What's in it
| Feature | What it does |
|---|---|
| One check per address | However many entries use it |
| Where it's used | Every entry, field and site an address appears in |
| Eight verdicts | Working, Redirect, Broken, No Answer, Unverifiable, Ignored, Not safe to request, and Not checked yet |
| Rechecks | Working links trusted for 30 days and broken ones rechecked the next day, so after the first scan only stale links are revisited |
| Internal links | Checked against your own elements and routes rather than over HTTP, so a Retour redirect counts as a redirect |
| Entry panel | A panel on the entry edit screen listing that page's broken links |
| Ignores | Park the links you've decided not to chase, and bring them back later |
| Excluded fields | Leave out fields full of links nobody will fix, like a legacy body kept after a migration |
| Alerts | Email or Slack when new broken links turn up |
| Console commands | Full scans, incremental scans on a cron, single rechecks and CSV exports |
| CSV download | Whatever list you're looking at, filters and all, a row per place |
What it reads
- Rich text (CKEditor and Redactor), including links inside nested entries
- Native Link fields and URL fields
- Hyper fields
- Matrix and content blocks, however deeply nested
- Commerce variants, along with their product
- Navigation nodes, if you have verbb/navigation installed
- Image and iframe sources in rich text, if you turn them on
It needs Craft CMS 5.6 and PHP 8.2 or later.
Accessibility
What's been checked, and anything that still needs work, is in the accessibility statement.
To install this plugin, copy the command above to your terminal.
This plugin doesn't have any reviews.





