Broken links rarely announce themselves. A page you linked to two years ago gets moved, a product URL changes during a redesign, or a partner's domain expires. Your page still loads, so nobody notices until a reader clicks and lands on an error.
The good news is that checking a site for broken links costs nothing. Here are five free methods, from the quickest to the most thorough, and what each one is good at.
What counts as a broken link?
Before you start, agree on what you are looking for. A link is worth fixing when it:
- returns 404 Not Found or 410 Gone
- returns a 5xx server error repeatedly, not just once
- can't be reached at all (DNS failure, connection refused, timeout)
- redirects in a loop, or through a long chain that ends on an error page
- points to an image that no longer exists
Some responses look like errors but usually aren't. A 403 or 429 often means the other site blocks automated checks, and LinkedIn answers bots with a made-up 999 status. Treat those as "couldn't verify", not "broken".
Method 1: Google Search Console
If your site is verified in Search Console, open Indexing > Pages and look for the reason Not found (404). Click it to see example URLs Google tried to crawl.
Good for: internal URLs that Google knows about, including old URLs that other sites still link to.
Limits: it only shows what Googlebot crawled, it updates slowly, and it says nothing about your outbound links to other sites. Treat it as a second opinion, not your main check.
Method 2: Check one page in your browser
For a single page, the browser console is enough. Open the page, press F12, go to the Console tab and paste this:
const urls = [...new Set(
[...document.querySelectorAll('a[href]')]
.map(a => a.href.split('#')[0])
.filter(u => u.startsWith(location.origin))
)];
for (const url of urls) {
try {
const res = await fetch(url, { method: 'HEAD', redirect: 'follow' });
if (!res.ok) console.warn(res.status, url);
} catch (e) {
console.error('failed', url);
}
}
console.log(`checked ${urls.length} internal links`);
It checks only same-origin links, because the browser blocks most cross-origin requests from reading the status. That makes it a fast way to test your own navigation, footer and in-content links after a change.
Good for: one page, right now, with no install.
Method 3: A free online broken link checker
Online checkers crawl your pages from their own servers and test every link, including links to other sites. The free tiers differ mainly in how many pages they crawl and whether you need an account.
For example, linkbruno.com runs a free scan of up to 25 pages with no signup and checks every link and image on them. It also reports redirect loops, long redirect chains, soft 404s ("200 OK" pages that actually say "not found") and links to domains that expired and turned into parked pages, which simple status checks miss.
Good for: a quick audit of a small site or the most important pages of a large one.
Method 4: A desktop crawler
Desktop SEO crawlers such as Screaming Frog have a free mode capped at 500 URLs. You enter your homepage, let it crawl, then filter the results by status code. Most of them can also show the inlinks for each broken URL, which tells you which page to edit.
Good for: one-off audits of medium-sized sites when you are comfortable with a spreadsheet-style interface.
Limits: it runs on your machine, so a big crawl ties up your laptop, and you have to remember to run it again.
Method 5: The W3C Link Checker
The W3C's free link checker (search for "W3C Link Checker") takes a URL and checks the links on that page, optionally following links a few levels deep. It is old-fashioned but honest, and it explains each problem in plain words.
Good for: a second opinion on a specific page, or checking static documentation.
How to read the results
Whatever tool you use, the raw list needs a quick triage:
- Re-check failures once. Servers hiccup. A link that fails once and works a minute later is not broken.
- Separate "blocked" from "broken". 401, 403, 429 and 999 responses usually come from bot protection. Open them in a browser before you touch anything.
- Group by target URL. One dead URL in your footer shows up on every page. Fix the template once instead of editing 200 posts.
- Find where the link lives. You need the page that contains the link, not just the dead URL. Most crawlers call this "source" or "inlinks".
How to fix what you find
- Internal 404: update the link to the page's current URL. If the old URL was popular or has backlinks, also add a 301 redirect from it.
- External 404: look for the page's new address on the same site. If it's gone, link to a different source or remove the link.
- Redirect chains: point the link straight at the final destination.
- Broken images: re-upload the file or fix the path. Remember that paths are case-sensitive on most servers.
Make it a habit, not a project
A single audit tells you what's broken today. Links keep breaking after that, a few at a time. A sensible routine for most sites:
- Run a full check after every redesign, migration or URL change.
- Re-check your highest-traffic pages monthly.
- Look at Search Console's 404 report whenever you log in.
Even 15 minutes a month keeps the list short, and short lists actually get fixed.
Top comments (0)