Tool guideWeb & SEO Utilities

Broken Link Checker – Complete Guide to Finding 404s, Dead Links and Broken Resources

How the NetTools.tech Broken Link Checker crawls a page or a small part of a site, how it classifies every link as OK, redirect, broken, error or blocked, and how to act on the results.

By NetTools.tech · · 9 min read

Pages get renamed, products are discontinued, partner sites change domains, and image paths break when a theme is replaced. Visitors hit 404 pages, crawlers waste their budget on dead ends, and nobody notices until a customer complains. Checking links by hand stops scaling after the first dozen.

The Broken Link Checker downloads a start page, extracts its links and — if you want — crawls further pages on the same host. Every link and, optionally, every image, script and stylesheet gets a request and a status, so 404s, server errors, timeouts and unnecessary redirects stand out in one table.

In simple terms

It is a small crawler: it reads a page like a search engine would, collects every link, and asks each target “are you there?”. Links that answer with “not found”, fail to connect or point at a domain that no longer exists are reported, together with the page where each link was found.

Technical background

A link is an href on an <a> element; resources are files the page embeds, such as <img src>, <script src> and stylesheet <link> elements. Checking a link means making an HTTP request and reading the status code: 2xx means success, 3xx a redirect (with a Location header), 4xx a client-side problem such as 404 Not Found or 410 Gone, and 5xx a server-side failure. Some failures happen before any status exists: DNS resolution fails, the TLS handshake breaks, or the server never answers.

Many servers treat automated requests differently from browsers. They answer 403 Forbidden or 429 Too Many Requests to bots, or a non-standard 999 (used by some large platforms), even when the page works fine for people. A good checker keeps those apart from genuinely broken links.

  • User experience. Dead links on landing pages and documentation frustrate visitors and generate support requests.
  • Site migrations. After moving to a new URL structure, internal links that still point at old paths show up as redirects or 404s.
  • Broken images and scripts. A missing stylesheet or script can break layout or functionality without any visible 404 page.
  • Crawl efficiency. Search engine crawlers follow links; long redirect chains and dead ends waste crawling on pages that do not exist.
  • Outbound link rot. External sites you link to disappear or move over time.

Who should use it?

  • Webmasters and site owners maintaining small and medium sites.
  • Technical writers keeping documentation links current.
  • SEO specialists running a quick audit before or after a migration.
  • Developers verifying that a new release did not break asset paths.

For very large sites, a dedicated crawler you run yourself is more suitable; this tool is deliberately capped.

All requests are made by the NetTools.tech server, through the same SSRF-protected fetcher as the other web tools: only public http/https addresses on ports 80, 443, 8080 and 8443, every redirect re-checked, and a clearly identified NetToolsBot user agent.

  1. robots.txt. The server first fetches /robots.txt on the start host. If it exists, internal pages disallowed for NetToolsBot are not crawled. The start page itself is always fetched.
  2. Crawling. The start page is downloaded (up to 5 redirects, 10-second timeout, first 2 MB). In Crawl the site mode, internal links — same host as the start URL, including the port — are queued up to the chosen depth and page limit. Only pages that answer with an HTML content type and a status below 400 are parsed for more links.
  3. Link extraction. The checker reads <a href> links with their link text (scripts and comments are ignored), and, if enabled, resources: stylesheets, icons and preloads from <link>, src of scripts, images, source, video, audio, iframes and embeds, srcset candidates, video posters, image inputs and url() references in inline CSS. mailto:, tel:, javascript:, data: and fragment-only links are skipped, and fragments are removed before checking.
  4. Checking. Each unique URL is tested once with a GET request that follows up to 5 redirects, reads at most 8 KB of the body and times out after 8 seconds. Six checks run in parallel. Per target host, the server sends at most about 120 check requests per minute across all users, to stay polite.
  5. Limits. At most 100 pages, depth 3, 400 tested links and a time budget of 150 seconds per run. Links beyond these limits are listed as Not checked, and the report says the crawl was truncated.

Results are returned to your browser and are not stored on the server.

  1. Open the Broken Link Checker.
  2. Enter the Website URL, for example https://www.example.com/. A missing scheme is completed with https://.
  3. Choose the Crawl scope: This page only checks the links and resources on the start page; Crawl the site follows internal links.
  4. For a site crawl, set Maximum pages (10, 25, 50 or 100) and Link depth (1 = the start page and the pages it links to, up to 3).
  5. Under Also check, keep or clear External links and Images, scripts, styles.
  6. Press Check links. A site crawl can take a minute or two. Preview with sample data shows what a report looks like without making any request.
  7. Use the filter buttons and the Filter by URL or text box to narrow the table, and Export CSV to save the full list.

Understanding the results

The summary shows Pages crawled, Links checked, and the counts of Broken, Errors, Blocked and Redirects. The table lists every link with its result, status, URL (plus link text and final URL when it redirected), type and the page it was found on.

ResultMeaningWhat to look for
Broken404, 410 or another 4xx (except 401/403/429), or “Domain not found”Fix or remove the link; for internal pages, consider a redirect to the replacement
Error5xx server error, “Timed out”, “TLS/certificate error” or “Connection failed”Often temporary; re-run later before acting, and check the target in a browser
Blocked401, 403, 429 or 999 — the server refused the automated requestVerify manually; usually the page works for people
RedirectsThe link works but via one or more redirects; the final URL is shown with an arrowUpdate the link to the final URL, especially for internal links
Not checkedOutside the crawl limits, or the target is a private address (“Private address, not checked”)Narrow the scope or run a second check from another start page
OK2xx answer without redirectsNothing to do
Typeinternal, external or resource, plus the element such as <img> or <script>Broken resources often mean a broken layout or feature
Found onThe first page on which the link was foundThe same link may appear on other pages too; fix it in the template if so

If the report says the crawl stopped at the page limit, some pages or links were not reached — this hint also appears when the time budget ran out.

Example: a small site crawl

The sample report (from Preview with sample data) crawls https://www.example.com/ with Crawl the site, 25 pages, depth 2, external links and resources enabled. Abbreviated from the report table, it shows, among others:

text
Broken     404  https://www.example.com/contact.html      internal  found on https://www.example.com/
Broken     404  https://www.example.com/assets/hero-old.jpg  resource · <img>
Broken     410  https://www.example.com/blog/2023/old-post/  internal  found on https://www.example.com/blog/
Broken     —    https://old-domain.example/  Domain not found  external
Error      503  https://shop.example.net/api/status         external
Error      —    https://slow.example.org/report.pdf  Timed out  external
Blocked    403  https://partner.example.net/                external
Redirects  200  https://www.example.com/pricing → https://www.example.com/pricing/

Reading it: the contact page and the old hero image are genuinely gone and need fixing in the template; the 410 post was removed on purpose, so the link to it should be removed too. The external 503 and the timeout should be re-checked later. The 403 from the partner site is probably bot protection — open it in a browser. The pricing link just needs its trailing slash.

Common use cases

  • Post-migration check: crawl the new site and look for internal Redirects and Broken results that point at the old structure; combine with the Redirect Checker for individual chains.
  • Documentation hygiene: run This page only on a long reference page with many external links.
  • Asset check after a deploy: enable Images, scripts, styles and look for broken resources.
  • Sitemap follow-up: take URLs from the Sitemap Checker and run single-page checks on important ones.
  • Investigating a single failure: inspect one problematic URL in HTTP Status to see its headers.

Troubleshooting

The start page fails immediately

The server could not fetch the start URL: the domain does not resolve, it points to a private address, the port is not allowed, TLS failed or it timed out. The error message says which. Check the URL in HTTP Status or Is It Down.

“Pages crawled” is 1 in site mode

The start page linked to no internal pages on the same host (for example all links go to www.example.com while you started at example.com), the internal pages are disallowed in robots.txt for NetToolsBot, or the links are created by JavaScript. Start from the host your links actually use.

The target site protects itself against bots. These are not confirmed failures. Spot-check a few in a browser.

Many “Timed out” errors on one site

The target is slow or rate-limiting. Because checks to one host are capped per minute, very link-heavy pages to a single external host can also end up as Not checked. Re-run later or disable external links.

“Target rate limited” message

The same website has been checked many times in the last minute (by you or others). Wait a minute and try again.

Common mistakes

  • Treating Blocked and Error as broken and deleting links that work.
  • Starting a crawl on the non-canonical host, so internal links count as another host and are not crawled.
  • Expecting JavaScript-generated navigation to be crawled.
  • Fixing a link only on the “Found on” page when it comes from a shared template.
  • Leaving internal links pointing at redirecting URLs after a migration.
  • Running a full crawl when only one page changed — a single-page check is faster and lighter on your server.

Limitations

  • Only the start URL’s exact host is crawled; subdomains and the www/non-www variant count as other hosts.
  • Hard caps: 100 pages, depth 3, 400 tested links and about 150 seconds per run. It is not a full-site audit for large sites.
  • JavaScript is not executed; links created by scripts are not found.
  • Only HTML pages below 2 MB are fully parsed; links after that point are missed.
  • Each URL is recorded with the first page it was found on, not every page.
  • Results reflect what the NetTools.tech server sees from its network and with its user agent; sites that geo-block, require cookies or treat bots differently may answer differently for your visitors.
  • Fragment anchors (#section) are not verified.
  • Private and internal addresses are never contacted.

Security & privacy

The start URL and the crawl options are sent to the NetTools.tech server, which fetches pages and checks links on your behalf; the results are returned to your browser and not stored. Target websites see requests from the NetTools.tech server with the NetToolsBot user agent, not from your IP address. Only crawl sites you are responsible for or that you are comfortable sending a modest number of requests to; the tool limits load, but the requests are real.

Do not enter URLs that contain session tokens, password-reset links or other secrets — they would be requested like any other URL.

Summary

The Broken Link Checker tests every link and, optionally, every resource on a page or a capped crawl of one host, and sorts them into OK, redirects, broken, errors, blocked and not checked. Fix Broken first, re-check Errors, verify Blocked by hand and update internal Redirects. It reads server-delivered HTML only and stops at fixed limits, so it complements rather than replaces a full site audit.

Frequently asked questions

What counts as a broken link?

A link whose target answers with 404, 410 or another 4xx status (except 401, 403 and 429), or whose domain does not resolve at all. Server errors, timeouts and TLS failures are reported separately as errors, because they are often temporary.

Why is a link reported as “Blocked” instead of broken?

The server answered 401, 403, 429 or 999, which usually means it refused an automated request rather than that the page is missing. Many large sites do this to bots. Open those links in a browser before changing anything.

How many pages can it crawl?

Up to 100 pages on the start URL’s host, up to 3 link levels deep, in one check. Across all pages, at most 400 unique links are tested and the whole run has a time budget of about two and a half minutes; anything beyond that is listed as “Not checked”.

Does it find links added by JavaScript?

No. Links are read from the HTML as the server delivers it. Menus, buttons or content created by scripts after the page loads are not seen.

Does the checker respect robots.txt?

Yes, for crawling. It reads the start host’s robots.txt and does not crawl internal pages that are disallowed for NetToolsBot. Links that point to such pages are still tested once, like any other link.

Why are some links reported as redirects?

The link works, but only after one or more HTTP redirects, and the final URL is shown next to it. Updating the link to point straight at the final URL saves a round trip for visitors and crawlers.

Can I export the results?

Yes. Export CSV downloads every checked link with its result, status, type, element, link text, the page it was found on, the final URL and any error.