Skip to main content

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. 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. 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. 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  301

Reported 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

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:

Install
$
squirrel audit https://example.com

Audit your site in one command

SEO, performance, security, accessibility and agent experience issues, with exact fixes for your coding agent.

Install
$

No account needed for the CLI. Cloud audits include free monthly credits.