When an audit surfaces 40 broken internal links on a client site, the instinct is to fix the links. That's the right move, but the wrong diagnosis. Forty broken internal links on a 200-page site means roughly 20% of the internal linking structure is pointing at nothing — which means the crawl that built that site's rankings was working with a damaged map. The pages linked from those 40 dead endpoints have weaker authority than they should. The fix isn't just patching URLs; it's reconstructing the link equity the site was supposed to have.
Understanding why broken links matter in each dimension — crawl budget, link equity, and UX — determines the priority order of the fix. Not all 404s deserve equal attention.
An internal broken link is a link from one of your pages to another of your pages that returns a 4xx or 5xx. The costs:
Googlebot follows the link, encounters the 404, logs it, and moves on. The crawl slot is spent on a dead end. For large sites (5,000+ pages), this meaningfully depresses crawl efficiency.
Link equity loss: PageRank flows through links. An internal link pointing at a 404 contributes zero equity to any page. If that 404 was supposed to be the /services/commercial-painting/ page that 12 other pages link to, those 12 pages are leaking equity into nothing.
User experience: Visitors who click internal broken links bounce. The session ends. For sites with thin traffic, even 5 broken links in the navigation can measurably increase overall bounce rate.
An external broken link is a link from your site to another site that 404s or has gone offline. The SEO cost is lower than internal broken links — no link equity is lost from your pages — but the user experience cost is real, and the credibility cost is real for AI search engines that evaluate content quality. A resource page with 8 broken external citations reads as stale and untrustworthy to Perplexity and Gemini citation algorithms.
Fix external broken links by: removing the link, replacing with a working equivalent, or linking to the Wayback Machine archive if the content itself was valuable and the page has an archived version.
A soft 404 is the worst kind: a page that returns a 200 OK HTTP status but displays a "this page doesn't exist" or "no results found" message. Googlebot treats it as a valid page, crawls it repeatedly, and may index it. Common sources:
Search results pages with no results (/search?q=xyz returning "0 results")
CMS pages with deleted content but no redirect configured
Dynamic product pages where the product was removed but the URL still resolves
Empty category pages
Google Search Console > Coverage > Excluded > "Soft 404" is the definitive list. These need either a proper 301 redirect to a valid page or a server-level 404 response.
Run a full crawl with JavaScript rendering enabled. Filter on "Response Code" = 404. Export. This is the most complete view of internal broken links. For sites under 500 pages, the free tier handles it. For larger sites, invest in the license.
The crawl also catches soft 404s if you configure custom extraction to look for "no results" text in the response body.
2. Google Search Console
GSC > Pages > Not indexed > Not found (404). This is Google's actual discovered-but-returning-404 list — not what a crawler found, but what Googlebot encountered while crawling the live site. The two lists will differ. GSC's list is prioritized for fixing because it reflects real crawl activity, not simulated crawl behavior.
3. Server logs
Log analysis is the most honest source of 404 data. It shows every 404 that any crawler, bot, or real user hit in the time window — including URLs that no longer appear on any page (so a crawler wouldn't find them) but are still being hit from old external backlinks, email campaigns, or saved bookmarks. Use tools like GoAccess (open source) or Cloudflare Analytics for log access.
Check: how many other pages link to the 404 URL? How many external backlinks does it have? A 404 at /services/commercial-roofing/ that 15 internal pages link to and that has 8 external backlinks from local directories is a critical fix. Restore the page or 301 it to the closest equivalent.
Find the 10–20 pages driving the most organic traffic to the site. Check every internal link on those pages. Broken links on your highest-traffic pages lose real users immediately.
Check backlinks to the 404 URL in Ahrefs or Google Search Console. If a 404 URL has 5+ referring domains, a 301 to the closest equivalent page recovers that link equity immediately. This is the broken-link-building concept reversed: instead of finding competitor 404s, find your own.
Internal broken links on low-traffic pages with no external backlinks are a housekeeping fix. Do them in batches, but don't block higher-priority work.
The redirect itself is straightforward; the mistakes are in the targeting.
# Nginx redirect example — specific broken URL to closest equivalentrewrite ^/services/commercial-painting-old/?$ /services/commercial-painting/ permanent;# Catch-all redirect for a removed URL pattern — less desirablerewrite ^/blog/2018/(.*)$ /blog/ permanent;
# Apache .htaccess — specific redirectRedirect 301 /services/old-service-name /services/new-service-name# Wildcard redirect for removed blog yearRedirectMatch 301 ^/blog/2018/(.*)$ /blog/
Rules for targeting:
Redirect to the most topically relevant surviving page. A redirect from /services/interior-painting-denver/ → /services/painting/ loses relevance signal. /services/interior-painting/ is the right target if the city page was removed but the service page still exists.
Don't redirect to the homepage. Homepage redirects for non-homepage 404s are a Google quality signal against the site — it reads as a catch-all cover-up rather than a genuine content match.
Limit redirect chains. A → B → C is a chain. Google follows chains but loses some PageRank at each hop. Audit your redirects for chains (Screaming Frog will flag them) and collapse them to A → C.
Pages that actually 404 — where no redirect is appropriate because the content genuinely doesn't exist — need a custom 404 that doesn't dead-end the user:
Acknowledge the error briefly (one sentence)
Offer the navigation menu
Surface the site's most popular pages or the main service categories
Include the site search bar
Add a direct contact CTA ("Can't find what you need? Call us or send a quick message")
The Page Speed Grader should be run on the 404 template itself — a slow 404 page is an embarrassing signal for any site that's selling performance as a service.
One legitimate link acquisition tactic worth noting for clients: find broken external links pointing to competitors' dead pages using Ahrefs Site Explorer > Broken Backlinks. If those pages covered topics your client has content for, reach out to the linking site, flag the dead link, and suggest your client's page as a replacement. This works best for editorial sites that genuinely care about their link quality — it's a service, not a pitch.
Disavowing 404 pages in GSC. You can't disavow pages, only linking domains. If you're seeing 404 spam in Search Console, the fix is ensuring those URLs return a clean 404 status — not disavowal.
Wildcard homepage redirects as a "fix." Technically clears the GSC error but destroys the relevance signal. Don't do it.
Auditing broken links manually at scale. Any site over 100 pages needs a crawler. Manual checking is not a process.
Treating 301 and 302 as interchangeable. A 302 (temporary redirect) does not reliably pass PageRank. Use 301 (permanent) for all SEO-relevant redirects unless the old URL is genuinely returning in less than 30 days.
Crawl with Screaming Frog and cross-reference GSC's Not Found list; 301 every 404 with external backlinks or 5+ internal links pointing to it toward the closest topically relevant page; eliminate redirect chains; deploy a custom 404 that offers navigation, search, and a contact CTA — then rerun the audit to confirm clean.