Broken links are one of the more straightforward technical SEO problems to find and fix, yet they tend to accumulate on sites that have been live for several years without a regular crawl cadence. A 404 on an internal link means Googlebot followed a path that led nowhere, and a user who clicks the same link gets a dead end. Neither outcome helps you.

What a Broken Link Audit Actually Covers

I distinguish between a few different failure types before calling anything a broken link. A true 404 means the destination page does not exist. A soft 404 is a page that returns a 200 status code but renders a not-found message — common on e-commerce sites that display a category page when a product URL is hit after the product is deleted. There are also redirect chains and loops, which are not 404s but create similar crawling inefficiency.

  • Internal 404s: links on your own site pointing to pages that no longer exist
  • External 404s: outbound links to third-party pages that have since been deleted or moved
  • Soft 404s: pages serving a 200 response with effectively no content
  • Redirect chains: sequences of three or more hops before reaching the final URL

Tools and Process

Screaming Frog is my baseline tool for broken link audits on sites under roughly 100,000 pages. It follows every internal link, logs the HTTP status code, and reports the source URL for each error. For large enterprise sites I supplement with Sitebulb or a custom Python script using the requests library. Google Search Console's Coverage report and the Pages report both surface 404s that Google has already encountered in crawling — I always cross-reference these against the crawl tool output, since the tool may not discover every URL Google has seen if the site has thin internal linking.

  • Set the crawl to follow redirects but also flag them separately so you can identify chains
  • Export the full list of 404s with their source pages before starting any remediation
  • Check the XML sitemap for 404 URLs — submitting a sitemap with dead URLs wastes crawl budget and sends a confusing signal
  • Filter the list by inbound internal links; 404s with many links pointing to them get fixed first

Verifying Status Codes Manually

For quick spot-checking without loading a full crawl tool, you can verify a URL's response code directly with curl. This is useful when you want to confirm a specific fix is live or check a handful of suspect URLs before committing to a full crawl run:

curl -I -L https://example.com/old-page/

The -I flag returns only headers, and -L follows redirects so you can see the final status code after the chain resolves. A well-fixed URL shows a 301 leading to a 200. A broken redirect chain shows multiple 301 or 302 hops. A 404 at the end of a chain means the redirect target itself does not exist — a common mistake when someone updates the redirect without verifying the destination is live.

For checking a list of URLs in batch, a short Python script using the requests library with a custom user-agent header is more efficient than running curl in a loop.

Fixing Strategy

The fix depends on why the page is missing. If the page moved, a 301 redirect from the old URL to the new one is the right call. If the content no longer exists and has no good equivalent, I either update the linking page to remove the link or link to a relevant parent page instead. I avoid redirecting every 404 to the homepage — Google has explicitly said they treat those as soft 404s and will not pass link equity through them.

  • Fix broken links at the source first: update the anchor href on the linking page
  • Implement 301 redirects for pages with inbound links from external sites
  • Remove rather than redirect internal links that point to permanently deleted content with no equivalent
  • Audit your sitemap.xml after fixing to ensure it no longer lists the removed URLs

External 404s and Link Equity Recovery

When an external site links to a URL on your site that no longer exists, that link equity is going nowhere. These are worth finding because they represent a relatively easy win: implement a 301 redirect from the dead URL to the most relevant live page, and you recover the link signal that was previously being discarded. I pull this list from Google Search Console under the Links report — it shows which external URLs are linking to your site, including to pages that may now be returning 404s. Cross-referencing that list with your crawl tool's 404 report is the fastest way to find recoverable link equity.

One concrete example: a site I audited had accumulated roughly 200 inbound links pointing to a URL that had been changed during a platform migration two years earlier. No redirect was ever implemented. Setting up a single 301 redirect from the old URL to the new equivalent page produced a noticeable ranking improvement for that page within about six weeks — not dramatic, but real and measurable.

How Often to Run This

On most sites, I recommend running a broken link audit quarterly at minimum, or after any significant content migration or redesign. Sites that publish frequently or have large catalogs of products or services should run one monthly. The longer 404s sit unfixed, the more crawl budget gets wasted on dead ends.

Where Broken Link Audits Fit in a Full Technical Review

A broken link audit is one piece of a larger technical picture. The same crawl run that surfaces 404s also reveals redirect chains, soft 404s, pages with thin content, and URLs that are crawled but not indexed. Running all of these analyses together is more efficient than addressing them in isolation, and it often reveals patterns — for example, a pattern of 404s that all trace back to a single site section where content was reorganized without a redirect plan.

Broken Links and Internal Link Equity

Every internal link is a signal that passes equity from one page to another. When an internal link points to a 404, that equity transfer stops. On a well-linked site, this means the target URL — which may have been receiving meaningful ranking support from other pages — suddenly loses that signal. The impact is proportional to how many internal links were pointing to the dead URL and how much equity those source pages were able to pass.

This is why I prioritize fixing broken internal links by link count, not just by finding them. A 404 with 50 internal links pointing to it is far more damaging to ranking performance than 50 separate 404s each with one link. Screaming Frog's inlinks report makes it straightforward to sort 404 URLs by the number of referring internal links, which gives you a prioritized fix list immediately. Pages with many incoming internal links that are currently resolving to 404s are the ones most likely to show a ranking improvement after the redirect or link update is applied.

Broken links often point to a larger structural problem worth investigating. The same crawl that surfaces 404s will also reveal patterns around indexation issues. If you want a structured look at both alongside the rest of your technical signals, a full website audit is the right starting point.