Fix broken links on website: a tool-led triage workflow

Fabio Embaló

Co-founder & CEO, Viaduct Generation

Published

August 17, 2026

Run an automated crawl, cross-check it against your server logs, and triage what you find by business impact, not alphabetical order. That combination catches what a single scan misses: broken links your crawler can see, plus the dead URLs Googlebot is still hitting that no internal link points to anymore.

Do this in the next hour, in this order:

  • Run a fast domain-level scan with a free checker or Screaming Frog to get an immediate list of failing links.
  • Export every failure and cross-reference it against your server access logs or Google Search Console’s coverage report.
  • Tag anything sitting in main navigation, the homepage, or a top-ten traffic page as urgent. Everything else waits.

Pro Tip: Fix by traffic and crawl frequency, not by URL order. A single broken link in your main menu does more damage than fifty dead links buried three folders deep in an archive nobody visits.

Key Takeaways

Fixing broken links well means combining automated discovery with server-log evidence, then remediating by business impact rather than by page count.

Point Details
Scan plus logs, always Crawler tools miss orphaned 404s that only show up in server logs or Search Console coverage reports.
Triage before you fix Score broken links by traffic, backlink profile, funnel role, and template location before touching code.
Match the fix to the case Use source updates, topical 301s, or 410s deliberately, never a blanket homepage redirect.
Scale needs edge redirects Pattern-based Regex rules pushed to the CDN edge handle enterprise volume without origin overhead.
Automate the monitoring CI/CD pre-deploy checks and scheduled crawls stop link rot before it reappears.
Viaductgen’s role Viaductgen folds this triage-and-fix workflow into technical SEO engagements, prioritising developer handoff by impact rather than page order.

Table of Contents

A broken link is any hyperlink that fails to load its intended destination, and it shows up in three distinct places: internal links (pointing to another page on your own site), outbound links (pointing to someone else’s site), and inbound backlinks (other sites linking to a page on yours that no longer exists or has moved). Each type causes a different kind of damage, so lumping them together as “broken links” hides the real problem.

The error codes behind them vary more than most site owners realise:

  • 404 Not Found, the classic dead page, usually caused by deletion, a typo in the URL, or a botched migration.
  • 410 Gone, a deliberate signal that a page has been permanently removed with no replacement coming.
  • 5xx server errors, meaning the server itself failed to respond, often a hosting or configuration issue rather than a missing page.
  • Soft 404s, where the server returns a 200 OK status but the page shown is empty, an error message, or a “not found” template dressed up to look functional.
  • Redirect loops, where a chain of redirects sends the crawler (and the visitor) back to where it started.
  • Broken assets, dead links to .js, .css, font files, or images that don’t return a 404 in the address bar but quietly wreck how the page renders.

Broken links don’t carry a direct Google ranking penalty, but the damage compounds indirectly. Crawlers waste budget hitting dead ends instead of your live pages, internal link equity stops flowing to the pages that need it, and visitors who hit a dead end pogo-stick straight back to the search results, a behavioural signal that search engines do track. Industry guidance suggests sites with more than 2% broken links start seeing measurable performance impact, and once you cross 5%, you’re typically looking at significant crawl waste alongside real user abandonment. Broken asset links are their own quiet menace too: a missing stylesheet or web font can shift layout mid-load, which is exactly the kind of instability that hurts Core Web Vitals scores.

Finding broken links well means matching the tool to the job, because a five-page brochure site and a fifty-thousand-page catalogue need entirely different approaches.

Start with the quickest checks. Dead Link Checker and BrokenLinkCheck both scan a page or full domain and return a list of failures within minutes, no installation required. The W3C Link Checker at Validator does something slightly different: it validates link health at the HTML level, useful for catching malformed markup alongside dead URLs. All three are genuinely free, but they’re surface tools. They won’t render JavaScript reliably, and they won’t tell you what’s happening beneath the page you’re checking.

For full-site coverage, you need a crawler. Screaming Frog SEO Spider remains the standard for desktop crawling, handling JavaScript rendering, exporting response codes in bulk, and mapping exactly where each broken link sits in your site structure. Semrush Site Audit does the same job as a hosted service, adding scheduled recurring crawls and integration with the rest of a Semrush account if you already use one for keyword or backlink tracking.

Neither a checker nor a crawler will show you what’s happening on the server, though. That’s where Google Search Console’s coverage report and your raw server access logs (Apache, Nginx, or CDN logs) come in. Logs reveal something crawlers alone can’t: URLs that Googlebot is still hammering even though no internal link on your site points to them any more. Combining crawler output with log-file analysis is how you catch these orphaned 404s before they quietly burn crawl budget for months. For backlink-side breakage, tools like Ahrefs, Semrush, or Majestic show you which external sites are linking to your dead URLs, which matters more than most site owners assume, because every one of those links represents lost equity you can often reclaim.

Pro Tip: If a URL shows heavy Googlebot activity in your logs but zero internal links pointing to it, that’s an orphaned page. Crawlers won’t flag it on their own, only log analysis will.

A step-by-step workflow, by site size

The right sequence depends almost entirely on scale. A ten-page site and a ten-thousand-page site are not solving the same problem, even when the symptom looks identical.

Small sites: fast and manual is fine

  1. Run a full domain scan with a free checker or a light Screaming Frog crawl.
  2. Fix the source link directly wherever you control the content, updating the anchor to point at the correct URL.
  3. Replace or remove any broken outbound links to third-party sites that no longer exist.
  4. Deploy individual 301 redirects for the handful of URLs that genuinely need one.
  5. Recheck the whole site to confirm every fix actually resolved.

Enterprise sites: pattern-based and automated

  1. Export historical 404s from server logs and Search Console rather than relying on a single crawl snapshot.
  2. Cross-reference that list against your backlink profile to see which dead URLs are still earning external links.
  3. Triage by impact (covered in detail below) before touching a single line of code.
  4. Implement pattern-based Regex redirects at the server or CDN edge, handling thousands of URL variants with one rule rather than one redirect per URL.
  5. Push fixes into templates and source code so the same error doesn’t reappear on the next content batch.

On the engineering side, WP-CLI’s search-replace command handles bulk link fixes across a WordPress database far faster than editing pages one by one. Regex-based redirect rules in Nginx or Apache config let one pattern catch an entire retired URL structure, which is exactly how enterprise teams handle mass URL changes without writing thousands of individual rules. At real scale, pushing those redirects to the CDN edge, through Cloudflare Workers, Fastly, or CloudFront functions, keeps the redirect logic off your origin server entirely, which matters when you’re handling volume.

Pro Tip: Never redirect every dead URL to your homepage. It’s the laziest fix and search engines notice: a topical-match redirect to the closest relevant category page preserves far more of the original link’s value.

Not every broken link needs the same remedy, and picking the wrong one wastes the fix.

  • Update the source link. Always the best option when you control the content: correct the anchor’s destination directly rather than layering a redirect on top of a mistake.
  • 301 redirect to a relevant equivalent. Use this when the original page is genuinely gone but a close topical match exists elsewhere on your site.
  • 410 Gone for permanent removals. When content is deleted for good with no replacement, a 410 tells search engines to drop the URL from the index faster than a 404 would, freeing crawl budget sooner.
  • Remove or replace broken outbound links. If a source you linked externally has vanished, either delete the link or swap in an active, relevant replacement.
  • Outreach to reclaim lost backlinks. When another site links to a page you’ve since moved or removed, a short email asking them to update the link recovers equity you’d otherwise lose outright.

Soft 404s deserve particular attention because they hide in plain sight: the page returns a 200 OK status while showing an empty result or a disguised “not found” message. Fixing these means auditing your back-end code to return an honest 404 or 410, or rebuilding the content properly when the page’s existing link equity justifies the effort. Whichever remediation you choose, always verify it. Re-crawl the affected URLs, confirm the response codes match what you intended, and watch Search Console for the indexing update to actually land.

Large sites don’t have a broken-link problem, they have a prioritisation problem. Finding four thousand dead URLs is the easy part; deciding which forty to fix this week is where most teams stall.

A weighted formula solves this cleanly. That scoring, used by enterprise SEO teams to prioritise remediation, turns a spreadsheet of thousands of rows into a ranked list your team can actually action.

Priority band Typical location Recommended action
P0 Main navigation, homepage, checkout flow Immediate code fix or deploy, same day
P1 Top-traffic landing pages, high-authority backlinks Edge redirect promptly
P2 Mid-tier category or blog pages Standard 301 redirect in next release cycle
P3 Long-tail archive or low-traffic pages Bulk update in a scheduled maintenance pass

Server logs earn their place here too. A URL with low direct traffic but high, sustained Googlebot request frequency deserves an escalation even if your traffic-weighted score would otherwise leave it in P2 or P3, because crawl attention itself is a signal worth respecting. And when it comes to backlink reclamation specifically, chasing every dead URL with a single referring domain is low return; focus outreach on URLs with multiple referring domains or demonstrable referral traffic, since that’s where most of the recoverable link equity actually sits.

How to triage thousands of broken links without drowning — overview diagram

Setting up monitoring so this doesn’t come back

Fixing today’s broken links matters far less if next month’s content update quietly creates fifty new ones. Monitoring cadence should match how often your site changes: a weekly scan suits a small, static site, daily scans suit an actively updated one, and enterprise sites usually need partitioned daily scans that cover different sections on a rolling basis rather than crawling the entire domain every night.

The strongest setups don’t wait for a scheduled scan to catch a problem, they block it before it ships:

  • CI/CD pre-deploy crawls that fail the build automatically if a developer’s change introduces a broken link.
  • Headless link crawlers running inside the deployment pipeline itself, not as a separate afterthought.
  • Daily polling against the Search Console API to catch sudden spikes in coverage errors.
  • Slack or JIRA integrations that turn a new broken-link alert straight into a ticket someone’s actually assigned to fix.

Good broken-link monitoring runs on a schedule with built-in alerting and triage, rather than someone remembering to run a manual check every so often. One caveat worth flagging: not every flagged link is genuinely broken. Auth-required pages and rate-limited third-party services often return error codes to an automated crawler that a real logged-in visitor would never see, so build exclusion rules for those before your alerts fill up with noise.

Pro Tip: Start monitoring with internal links and core templates first, since that’s where the highest-traffic damage lives, then expand coverage to outbound links and backlinks once the foundation is stable.

Which tool fits your site’s scale

Picking a tool without matching it to your site’s size and complexity is how teams end up either overpaying for enterprise software they don’t need, or under-tooled for a problem that’s already outgrown a free checker.

A five-page brochure site needs nothing more than a free online checker run every few weeks. A five-thousand-page CMS is Screaming Frog or Semrush Site Audit territory, where scheduled crawls and CSV exports make sense against a realistic budget. A multi-million-URL commerce cluster is a different problem entirely, one that needs log-file ingestion and CI/CD integration baked in, because manual triage simply can’t keep pace with catalogue-scale change. For readers running WordPress specifically, a practical CMS-level guide to checking for broken links covers plugin-based scanning options worth pairing with any of the above.

When Viaductgen runs a technical audit, the sequence follows the same logic laid out above, but with the operational muscle to act on it without waiting on a client’s internal developer queue. Discovery starts with a full crawl paired against server logs to surface orphaned 404s a crawl alone would miss. From there, every broken link gets triaged by business impact before a single fix ships, so engineering time goes to the P0 navigation and homepage issues first, not whatever’s easiest to fix.

Fixes happen at source wherever possible, correcting the actual link rather than layering a redirect on top of a mistake. At scale, that shifts to pattern-based edge redirects, keeping redirect logic off the origin server entirely. Patterns drawn from 50-plus client engagements inform how aggressively to triage, since recurring issues like faceted-navigation 404 bloat or migration-era redirect chains show up again and again across very different sites.

A typical sprint delivers:

  • A triaged list of every P0 to P2 broken link, ranked and ready for developer handoff.
  • CI/CD pre-deploy checks configured to block future regressions before they ship.
  • Edge redirect configuration covering the highest-volume URL patterns.
  • A monitoring playbook defining cadence, alert thresholds, and who owns the fix queue going forward.

There are DIY routes through all of this: a free checker, a Screaming Frog licence, a Saturday spent cross-referencing log files by hand. They work, especially for a smaller site. What they don’t solve is the bottleneck most site owners actually hit, which is developer time. Finding four thousand broken links is one afternoon’s work with the right crawler. Getting a development team to prioritise fixing them, correctly, without redirecting everything to the homepage out of expedience, is where most remediation plans stall for months.

Viaductgen’s technical SEO work folds broken-link remediation into a wider site health engagement, covering site migrations, crawl budget recovery, and the SEO, AEO, and GEO services that keep a site visible as search itself keeps changing. The typical outcome is straightforward: reduced crawl waste, reclaimed backlink equity, better UX signals, and indexation that stops fluctuating month to month. If your site’s broken-link count has crept past the point a weekend fixes, get in touch about a technical audit or a 90-day sprint scoped around exactly this.

Sources

FAQ

Run a crawl or free checker to find them, then fix the source link directly where possible, use a 301 redirect to a topically relevant page when the original is gone, or return a 410 for content that’s permanently removed.

Dead links are commonly called broken links, and the specific error behind them is usually a 404 Not Found, a 410 Gone, or a 5xx server error, depending on the cause.

Checking for malware isn’t the same task as checking for broken links. Broken-link tools like Dead Link Checker or Screaming Frog test whether a URL loads at all, not whether its destination is malicious, so use a dedicated security scanner for virus checks.

Identify the failing link with a crawler or checker, confirm the correct destination URL, then update the source code or CMS content directly rather than relying solely on redirects, which is the most durable fix.

Cadence depends on how often your site changes: weekly for a small, static site, daily for an actively updated one, and partitioned daily scans for enterprise sites with high content volume.

About the Author

Fabio Embaló

Co-founder & CEO, Viaduct Generation

Fabio co-founded Viaduct Generation in 2020 with a belief that the gap between agency output and business impact was structural, not incidental. He leads the agency's strategic direction, client partnerships, and the development of the Growth Engine methodology. With a background spanning organic search, content strategy, and digital transformation, he has spent his career building systems that connect digital activity to commercial outcomes.

AI Strategy Growth Architecture SEO & AEO Client Partnerships