A broken link is a link that leads nowhere useful. Usually that means a 404, sometimes a 410, a server error, or a site that doesn't answer at all. Visitors hit a dead end, and crawlers spend a request on a page that isn't there.
There are two different jobs hiding behind "404 checker," and they need different tools. One is "which links on this page are broken?" The other is "which of these 150 URLs are dead?" Scrawl has a tool for each: the Broken Link Checker for the first, and the Bulk Status Checker for the second. This guide covers when to use which, how to read the results, and the order to fix things in.
What counts as a broken link
The HTTP status code tells you what happened when the link was requested.
- 2xx (usually 200). The page loaded. Not broken.
- 3xx (301, 302, 307, 308). The URL redirects somewhere else. Not broken, but worth updating if it's your own link.
- 404 Not Found and 410 Gone. The page doesn't exist. This is the classic broken link.
- Other 4xx, like 401 or 403. Access is refused. Sometimes that's a real problem, sometimes the server is just blocking automated requests.
- 5xx. The server failed. Could be temporary, could be a dead site.
- No response. Timeouts, DNS failures, SSL errors. The link may as well be broken for anyone clicking it.
Google's page on how HTTP status codes affect its crawlers says it treats all 4xx errors except 429 the same way: the content doesn't exist, and URLs that were indexed get dropped over time. It also says a page that returns 200 but shows an error message can be flagged in Search Console as a soft 404. So "the server said 200" isn't the whole story.
Job one: find broken links on a page
Use the Broken Link Checker when you have a page and want to know whether its outgoing links still work. Here's what it does, step by step:
- It fetches the page's HTML and pulls out every
<a>link. It skipsmailto:,tel:,javascript:links and empty#links, since those can't be checked. - It checks the rest in batches and shows progress as it goes. Each link gets a HEAD request, with a GET fallback if the HEAD request fails, and an 8-second timeout.
- It follows redirects (up to five) and records the status of where the link ends up, plus the final URL.
- It marks a link as broken if it ends on a 4xx or 5xx status, or if there's no response at all (timeout, DNS, SSL, or connection error).
You can choose to check internal links, external links, or both. "Internal" means the same hostname as the page you entered, so www.example.com and example.com count as different hosts.
The results come with filters (broken, redirects, working, internal, external, timeouts), a search box, and sorting. Expanding a broken row shows a short hint for 404s, 403s, server errors, and timeouts. There's a Copy Fix List button that copies each broken link's anchor text, URL, status, and a suggested action, which is handy for pasting into a ticket. You can also export everything, or just the broken links, as CSV.
Some limits to know about:
- One page per run. It doesn't crawl your site. Run it on your important pages one at a time.
- Raw HTML only. Links that only appear after JavaScript runs won't be found.
- Every occurrence is checked. If the same link appears in the header and the footer, it shows up twice.
- Some servers refuse bots. A site that blocks automated requests or rejects HEAD requests can show a 403 or 405 even though it loads fine in a browser. Open those in a browser before you remove them.
Job two: check a list of URLs in bulk
Use the Bulk Status Checker when you already have the URLs and want each one's status. Typical lists are an export from Search Console, old URLs from before a migration, a sitemap, or a list of backlink targets.
Paste one URL per line, up to 200 per run. Include https://, since a URL without a protocol is tried as http://. For each URL it sends a HEAD request, retries with GET if the server answers 405 or 501, and waits up to 10 seconds.
The key difference from the Broken Link Checker: the bulk tool doesn't follow redirects. It reports the first response. A 301 shows up as a 301, with the redirect target next to it. That's what you want when you're auditing old URLs, because "does this old URL redirect, and where to?" is the whole question.
You get a summary (total, 2xx OK, redirects, errors and failures, average response time) and a row per URL with flags:
- 4xx and 5xx responses are flagged as errors. A 410 is shown as information instead, since "permanently removed" is often intentional.
- 301 and 308 are noted as permanent redirects, with a reminder to update source links.
- 302 and 307 get a warning to check that the temporary redirect is intentional.
- Slow responses get a warning over 3 seconds and an error over 5.
- Plain http URLs get a warning.
You can export the full report or just the rows with issues, as CSV or as a filterable Excel file.
A worked example
I ran the Broken Link Checker's extraction step on our own Google index checker guide. It found 53 links on the page, all of them checkable. Most were internal: the nav, the footer, related posts, and several repeats of the link to the Google Index Checker tool. Two were external links to Google's documentation.
That breakdown shapes how to read the results. The header and footer links are the same on every page, so if one of those were broken, the fix belongs in the site template, not in this article. The body links are specific to this page. The two Google doc links are the ones most likely to break over time, because Google moves its documentation around and we don't control it.
Now take a hypothetical. Say one of those Google links came back 404. The fix is to find where the doc moved, update the link, and re-run the check. If Google had retired the page with no replacement, I'd remove the link and reword the sentence instead of linking to something loosely related.
The bulk tool fits a different moment. Say Search Console's Page indexing report lists a few dozen URLs under "Not found (404)." Export them, paste them into the Bulk Status Checker, and sort by status:
- Still 404, and there's an obvious replacement page. Add a 301 to that page.
- Still 404, and the content is gone for good. Leave it as a 404, or return 410. That's the correct answer for a page that shouldn't exist.
- Now 301. Someone already fixed it. Check that the target is the right page.
- Now 200. The page is back. Find out why it was missing so it doesn't happen again.
How to read the results
404 or 410 on your own site. You control both ends, so fix it now. Update the link to the right URL, or remove it.
404 on an external site. Look for the page's new address. If you can't find one, remove the link or swap in a source that says the same thing.
403 or 405. Open it in a browser. If it loads, the server is blocking automated checks and the link is fine for people. If it doesn't, treat it as broken.
5xx. Run the check again later. A single 500 might be a hiccup. A link that fails for days is probably dead.
Timeout or DNS error. A DNS failure usually means the domain is gone. Timeouts can be a slow site. Re-check before you act.
Redirects on your own links. These aren't broken, but it's cleaner to point internal links straight at the final URL. If you want to see every hop in a chain, use the Redirect Chain Checker.
Fix in this order
- Broken internal links on important pages. Pages that get traffic or that you want to rank. You control these, and each fix takes minutes.
- Broken links in templates. A dead footer or nav link is broken on every page at once. One fix covers the whole site.
- Your own URLs that other sites still link to. If a removed page still gets links or traffic, a 301 to the closest relevant page keeps those visitors. Don't redirect everything to the homepage. Google can treat that as a soft 404.
- Broken external links in your content. Update or remove them, starting with your most visited pages.
- Everything else. Old, low-traffic pages can wait for a regular cleanup.
Mistakes that waste time
Redirecting every 404 to the homepage. It hides the problem from you without helping visitors.
Treating every 4xx as dead. Bot blocks produce 403s on perfectly good pages. Check by hand first.
Fixing the article when the template is broken. If the same dead link shows up on every page you scan, it's in the header, footer, or sidebar.
Checking once and forgetting. External sites change. Re-run the check on your important pages every few months.
WordPress sites
If your site runs WordPress, the WordPress Broken Link Checker can save you running pages one by one. It reads up to 50 published posts and pages through the WordPress REST API and checks the first 20 links in each.
FAQ
What is a broken link checker?
A tool that requests each link on a page and reports the ones that fail, usually with a 404, another 4xx or 5xx status, or no response at all.
How do I find 404 errors on my website?
For the links on one page, run the page through the Broken Link Checker. For a list of URLs, such as a Search Console export of "Not found (404)" pages, paste them into the Bulk Status Checker.
Can I check 404s in bulk?
Yes. The Bulk Status Checker takes up to 200 URLs per run, one per line, and returns each URL's status code and redirect target. You can export the results as CSV or Excel.
Does the Broken Link Checker crawl my whole site?
No. It checks the links on one page per run. Use it on your most important pages, or use the Bulk Status Checker for a list of URLs.
Why does a working link show as broken?
Some servers block automated requests or reject HEAD requests and return 403 or 405. Open the link in a browser. If it loads, it's fine for visitors.
Should I redirect all my 404 pages?
Only when there's a relevant replacement page. If the content is gone for good, a 404 or 410 is the right response. Redirecting everything to the homepage can be treated as a soft 404.
What's the difference between a 404 and a 410?
404 means not found, 410 means gone on purpose. Google's documentation says it treats all 4xx errors except 429 the same way.
Do broken links hurt SEO?
They waste visits and crawl requests, and a broken internal link means Google can't follow it to the page you meant. Fixing them on important pages is quick work that's worth doing.
Is the Broken Link Checker free?
Yes. Paste a URL and run it.