Broken link checker
Crawl your whole site for broken internal and external links, links to redirects and dead #anchors, with every page that links to each one.
Want to see the output first? See a sample report.
A broken link checker crawls your site, follows the links it finds and reports the ones that lead nowhere. They rarely break on the homepage. They pile up on old blog posts, in footer menus and on the product page from three redesigns ago.
squirrelscan checks the links on every page it crawls. Each broken link comes with its status code and every page that links to it, so you fix the source once instead of chasing the 404.
What the link checker catches
Broken internal links
Links between your own pages that answer 404, 410 or another error, with every page that links there. A sign-in wall or a rate limit is listed apart, not as broken. Targets the crawl did not fetch get a status-only check, up to 200 per audit, so a 404 that only a link points at is still found.
Broken external links
Outbound links that answer 4xx or 5xx or fail to load. A link behind a bot wall, a sign-in or a rate limit is listed as unverifiable, not broken.
Links to redirects
Internal links that point at a URL that redirects, with the redirect chain and every page that carries the link.
Dead anchors
#fragment links whose target id is gone from the page. Matching is case-sensitive, like the browser's, and a broken skip link is labelled as one.
Scripts, stylesheets and images
Scripts, stylesheets and fonts that answer an error, and img tags with an empty or placeholder src. An image URL that looks right but returns 404 is not caught.
Other link problems
Links from HTTPS pages to http:// URLs, hrefs that do not parse, pages with too few inbound links, and pages with no onward links at all.
How to use it
- 1
Enter your site
Type your address above. It opens a cloud audit in the squirrelscan dashboard, and signing up is free if you have no account yet.
- 2
Let it crawl
The audit crawls your pages and checks the internal and external links on them, starting with the ones on the most pages.
- 3
Open the Links section
Each broken link is listed with its status and the pages that link to it. Fix them by hand, or hand the report to your coding agent.
Why site-wide beats a single page
Most link checkers test one URL at a time. Fine for a spot check, not much use for finding the 404 on page 34 of your blog archive.
squirrelscan follows your internal links the way a search crawler does, records where each link came from, and reports every broken one with its source pages.
How to fix what it finds
An internal link returns 404
Change the link to the page's current URL. If the old URL also has links from other sites, redirect it permanently to the new one as well. Fix the link even then: a redirect costs a hop on every click.
nginx
location = /old-page {
return 301 /new-page;
}_redirects (Netlify, Cloudflare Pages)
/old-page /new-page 301Reported by links/broken-links
An external link is dead
Replace it with the page's new address, point it at an archived copy, or remove it. Check the unverifiable list by hand before you touch it: those links usually work in a browser.
Reported by links/broken-external-links
A link points at a redirect
Point the link at the final URL from the chain in the report. A missing trailing slash is the usual cause. Leave the redirect in place for links you do not control.
HTML
<!-- before: /docs redirects to /docs/ -->
<a href="/docs">Docs</a>
<!-- after -->
<a href="/docs/">Docs</a>Reported by links/redirect-chains
An anchor link points at a missing id
Change the fragment to the id that exists now, or add the id to the element. Prefer fixing the link: an id added only to satisfy a link tends to break again at the next redesign.
HTML
<a href="/pricing#teams">Team pricing</a>
<!-- on /pricing, same id, same case -->
<h2 id="teams">Teams</h2>Reported by links/broken-anchors
Why some links show as unverifiable
Some sites turn automated requests away. A 401 or 403 from a firewall, LinkedIn's 999 or a challenge page means the check was refused, not that the page is gone, so squirrelscan lists those links as unverifiable instead of broken. A 429 is throttling and gets its own list.
In a cloud audit, or a signed-in CLI audit at Surface or Full level, external links go through the cloud link checker. It retries a refused request with a browser-like client and waits for a second 404 before it calls a link broken, so a link seen failing once shows as awaiting confirmation.
Keep going
Hand the broken-link report to your coding agent and let it patch the links.
See a sample reportA real audit, including the broken-link section.
Full website auditBroken links are one of 300+ checks in a full audit.
How link checking worksLimits, switches, and how a broken link is told apart from a blocked one.
Frequently asked questions
- Does it check external links too?
- Yes. Internal and external links are both checked, and each broken one is reported with the pages that link to it. With --offline, external links are not checked, and the report marks them as not checked rather than passing.
- How many pages will it crawl?
- A cloud audit's page ceiling is 500 on the Free plan, 2,000 on Pro and 10,000 on Team, and your credits set the practical limit: Free's 500 monthly credits cover one audit of about 225 pages. One audit checks up to its page budget or 200 external links, whichever is more, starting with the links on the most pages.
- Do external link checks cost credits?
- In a cloud audit, or a signed-in CLI audit at Surface or Full level, each distinct external link the cloud verifies costs 1 credit, at most one per page of the audit's page limit. A link it cannot verify costs nothing, internal links are always free, and links the CLI checks on your own machine are free.
- Will it tell me when a link breaks later?
- On Pro and Team, yes. When a scheduled audit finds links that the previous scheduled audit found working and that are now dead, squirrelscan sends one email naming up to 10 of them. Alerts start from a website's second scheduled audit, and unverifiable links never count. Each website has its own switch to turn the alerts off.
- Is it free?
- The llms.txt validator, the AI crawler checker, the robots.txt generator and the instant security headers check are free and need no account. The other checks run inside a squirrelscan audit. The squirrel CLI runs audits on your machine for free when you are signed out or pass --offline, with no cap on how many. Signed in, CLI and cloud audits spend credits: every account gets 500 free credits a month. An audit costs 50 credits plus 2 per audited page, and 1 per external link the cloud verifies when link checks are on.
Run the full audit
This check is one of 300+ rules in a squirrelscan audit. Run it in the cloud or on your own machine.
In the cloud
squirrelscan crawls the site for you and keeps each report in your dashboard. Every account gets 500 free credits a month. An audit costs 50 credits plus 2 per audited page, and 1 per external link the cloud verifies.
On your machine
The squirrel CLI runs the same rules locally, free while you are signed out or with --offline. Install it, then run:
squirrel audit https://example.com