Broken link checker

Find broken links on any page: 404 errors, server errors, and redirects

Free
No sign-up
Instant results

Check results

This check only covers for broken links. For a full picture of your page, run a page audit.

For issues across your whole site — duplicate titles, orphan pages, broken internal links — run a site audit.

Want us to fix what we found? Our team can help.

What are broken links and why they matter

A broken link is an <a href> whose target doesn't load correctly — the server returns a 4xx error (404 Not Found, 403 Forbidden, 410 Gone), a 5xx error (backend crash), or fails to respond at all (DNS failure, connection refused, timeout). Users who follow a broken link land on an error page and usually leave. Search crawlers that encounter a broken link waste crawl budget on a dead end and lose the link equity that would have flowed through to the target page. On large sites with frequent content changes, dozens of internal links silently break every month as pages are renamed, deleted, or moved — which is why "broken link audit" is a standard monthly maintenance task.

This tool checks only internal links on the audited page — links pointing to the same domain. External / outbound links aren't checked because their status depends on third-party servers that frequently rate-limit or block automated audits, and because external-link maintenance is usually handled differently (linkrot reports from services like Ahrefs, or manual review during content updates).

What this tool checks

  • Collects every internal <a href> on the page — same-origin links only; skips anchors (#), mailto:, tel:, and javascript: hrefs
  • Probes each link with HEAD — a lightweight request that asks for the response status without downloading the body. Falls back to GET on 405 (some servers don't implement HEAD)
  • 4xx responses — reported as broken (typically 404 or 403)
  • 5xx responses — reported as server errors (may be transient; re-check after a few minutes)
  • 3xx responses — reported as redirects (link works but adds a round-trip and loses some link equity per hop; ideally link directly to the final URL)
  • Connection failures — DNS resolution failures and refused connections reported as unreachable; timeouts reported separately as "did not respond in time" (may be transient)

How broken internal links affect SEO

  • Crawl budget waste — Googlebot spends a quota of requests on your site per crawl cycle; 404s burn slots that could have fetched real content, slowing new-page discovery
  • Lost link equity — every internal link is a vote for the target page; a link to a 404 is a vote wasted
  • User experience signals — bounce rate and dwell time on error pages are worse than real pages; Google observes these via SERP click behavior
  • Perceived site quality — John Mueller has said Google doesn't directly penalize sites for broken links, but large quantities of 404s can signal a neglected or low-quality site and indirectly affect rankings

Good vs bad examples

Good — link to a live page:

<a href="/pricing">Pricing</a>
→ 200 OK

Good — direct link to the final URL (no redirect):

<a href="https://example.com/blog/post-slug">Read more</a>
→ 200 OK (no redirects)

Attention — link goes through a redirect:

<a href="/blog/old-post-name">Read more</a>
→ 301 → /blog/new-post-name → 200 OK
Fix: update the href to /blog/new-post-name directly.

Bad — link to a 404:

<a href="/about-us">About</a>
→ 404 Not Found
Fix: update the href (it's /about, not /about-us), or add a 301 from /about-us.

Bad — link to a server error:

<a href="/search?q=...">Search</a>
→ 500 Internal Server Error
Fix: investigate the target page's backend error in application logs.

Common mistakes

  • Relying on a 301 to mask a broken link — yes, the user ends up at the right page, but every hop costs latency and a bit of link equity. Update the link at the source
  • Redirect chains (A → B → C) — compound the per-hop cost. After a migration, sweep internal links to point directly at the final URL, not at the first intermediate
  • Forgetting links after a page rename — a CMS usually sets up the 301 automatically but leaves internal <a href> pointing at the old path. Pair every rename with a find-and-replace in the content
  • Links to staging / dev environments — a href="https://staging.example.com/..." accidentally committed to production. Shows as unreachable from the public internet
  • Hard-coded port numbershref="https://example.com:8080/..." left over from local development; the port isn't open in production
  • Ignoring 5xx as "probably transient" — if the audit sees a 5xx on a link, so do users and crawlers right now. Investigate the target, don't just re-check and hope

Frequently asked questions

No — this tool checks only internal links (same-domain). External links aren't checked because third-party servers frequently rate-limit or outright block automated audits (every major SEO tool and content platform scraping for link validation hits the same wall), which would make results unreliable. For outbound link maintenance, use a tool built for that workflow — Ahrefs' Broken Links report, Screaming Frog's crawl mode, or W3C's Link Checker — each of which handles the 429 / 403 / timeout edge cases more carefully than a single-page audit can. The other consideration: Google's official guidance (John Mueller) is that broken outbound links don't directly hurt rankings, so the impact is primarily user-experience.
At least monthly for most sites. For large sites or sites with frequent content changes (news, e-commerce with inventory churn, regular blog publishing), weekly is more appropriate. The failure mode is slow — links break one at a time as pages are renamed, products are retired, or external resources are removed — so a long gap between audits lets issues accumulate. Automate the check (CI job, scheduled audit) and triage findings as part of routine content maintenance.
A single 301 is mostly fine — Google says modern PageRank flows through 301s without meaningful loss, and the user-visible cost is one extra round-trip (usually under 100ms). Problems arise with redirect chains (A → B → C → D): each hop adds latency, each hop has a chance of losing or mangling link attributes, and crawlers sometimes give up after 3-5 hops. After a site migration, do a crawl pass that updates every internal <a href> to point at the final destination rather than leaving the chain in place "because the redirect works."
Broken means the target server responded with a 4xx status code (usually 404 Not Found, sometimes 403 Forbidden) — the server is alive and explicitly telling us the target URL doesn't work. Unreachable means the connection failed before any HTTP response — DNS didn't resolve, the port is closed, the server refused the connection. For an internal link this usually means the subdomain or environment no longer exists (a leftover staging.example.com link, a removed API subdomain). Timed out is called out separately as attention rather than bad — it can be transient (slow network, backend garbage-collection pause), so recheck before treating it as broken.