// SEO
How to Find and Fix Broken Links on Your Website (Complete Guide)
Broken links hurt your SEO, damage user trust, and waste crawl budget. This guide explains how to find every broken link and 404 error on your site, and exactly how to fix each type — with redirects, updates, and prevention strategies.
How broken links damage your SEO and user experience
A broken link — any link that points to a URL returning a 4xx or 5xx error — costs you in three ways simultaneously. First, it disrupts user experience: a visitor who clicks a link and lands on a 404 page is 75% likely to leave the site entirely rather than try to find the content another way. Second, it wastes crawl budget: Googlebot has a finite number of pages it will crawl per site per day, and spending that budget on broken pages means your real content gets crawled less frequently. Third, it leaks PageRank: internal links pass authority between pages, and a link to a 404 page passes that authority nowhere.
Broken links accumulate naturally over time. Blog posts reference external sources that later move or disappear. Site redesigns change URL structures and create 404s for old URLs. Pages get deleted without setting up redirects. Third-party services you linked to shut down. After three years of normal site operation, most sites have dozens to hundreds of broken links they don't know about.
The SEO impact is real but often delayed — you don't see rankings drop the day a link breaks. The damage builds as Googlebot repeatedly finds 404s, updates its index accordingly, and gradually reduces the crawl frequency of sections it associates with poor link health.
How to find every broken link on your site
There are three levels of broken link detection, each catching different problems. Use all three for a complete picture.
Automated site crawl: a crawler visits every page on your site, follows every link (internal and external), and logs any that return errors. WebEnture's Broken Links Agent does this automatically and categorizes results by error type (404, 410, 500, redirect chains), source page, and whether the broken link is internal or external. This is the fastest way to get a complete inventory.
Google Search Console: the Coverage report shows URLs that returned errors when Googlebot tried to crawl them. The advantage here is you're seeing what Google actually experienced, including errors that only happen intermittently or for specific user agents. Check Search Console → Indexing → Pages → 'Not found (404)' and 'Server error (5xx)' for a list of URLs Google found to be broken.
Log file analysis: your server logs record every request and its response code. Filtering for 404 and 500 responses in your logs gives you a real-world view of broken links that actual visitors are hitting — including broken links on external sites that point to pages you've removed. This requires access to raw server logs or a log analysis tool like AWStats or GoAccess.
- Run WebEnture's Broken Links Agent for a full site crawl with categorized results
- Check Google Search Console → Indexing → Pages for Google-reported errors
- Review server logs for 404s from real visitor traffic, including external referrers
- Schedule monthly automated crawls so new broken links don't accumulate undetected
Fixing broken links: the right solution for each situation
Not all broken links get the same fix. The right solution depends on why the link is broken and what the source of truth should be. Working through your broken link inventory without a clear decision framework results in inconsistent fixes and new problems introduced by hasty redirects.
Situation 1 — Page moved to a new URL: set up a 301 (permanent) redirect from the old URL to the new one. This preserves link equity (approximately 99% of PageRank passes through a 301), fixes the user experience, and tells Googlebot to update its index. Never use a 302 (temporary) redirect for a permanent move — it doesn't pass full link equity.
Situation 2 — Page was deleted and no equivalent exists: if the page had inbound links from other sites (check your backlink profile), consider restoring it or creating a topically relevant replacement. If the page had no external backlinks and no significant traffic, a 410 (Gone) response is cleaner than a 404 — it explicitly tells Googlebot to remove the URL from the index faster. Update any internal links pointing to it to point to the most relevant existing page instead.
Situation 3 — External link to a broken third-party page: update the link to point to the current URL of the resource (use the Wayback Machine to find where it moved), find a better alternative resource to link to, or remove the link if the reference is no longer relevant. Keeping outbound broken links damages your page's trust signals.
- Moved pages: 301 redirect old URL → new URL (preserves ~99% of PageRank)
- Deleted pages with backlinks: restore or create a relevant replacement
- Deleted pages without backlinks: return 410 and update internal links to the best alternative
- Broken external links: update to current URL, replace with better resource, or remove
- Redirect chains (A→B→C): collapse them to direct redirects (A→C) to avoid PageRank dilution
Setting up 301 redirects: platform-specific instructions
The mechanics of setting up redirects vary by platform, but the principle is the same: when a user or crawler requests URL A, the server immediately responds with a 301 status and a Location header pointing to URL B. The browser and Googlebot then follow the redirect to URL B.
WordPress: use the Redirection plugin (free, by John Godley) for a UI-based redirect manager, or add redirects to your .htaccess file if on Apache hosting. For large-scale URL changes after a redesign, import redirect rules from a CSV. For Nginx-hosted WordPress, add rewrite rules to your nginx.conf or include file.
Next.js and modern frameworks: add redirects to next.config.js using the redirects() configuration. These are handled at the framework level before hitting your application code, making them extremely fast. For Vercel deployments, you can also add redirects to vercel.json for edge-level redirect handling.
Shopify: use the URL Redirects section in Online Store → Navigation → URL Redirects. Shopify handles the redirect at the platform level. For bulk imports, use the CSV import feature. Note: Shopify automatically creates redirects when you change a product or collection URL through the admin interface — only breaks if you change URLs outside the admin.
Related reading:
Preventing broken links from accumulating
The most efficient broken link strategy is prevention. Most broken links are created by avoidable decisions: deleting pages without setting up redirects, changing URL slugs after pages are live, or removing products without redirecting their URLs to category pages.
Establish a 'URL is permanent' rule in your team: once a page is live and indexed, its URL does not change without a corresponding redirect. This sounds obvious but breaks down constantly in practice — a developer renames a blog post slug for cleanliness, or a content manager restructures a category without realizing the old URLs will 404.
Schedule automated broken link scans on a monthly basis. WebEnture's Broken Links Agent can be configured to run on a schedule, emailing you when new broken links are detected. Catching a broken link one month after it's created is far less costly than discovering it two years later after it's accumulated in hundreds of backlinks from external sites.
Before launching any site migration, URL restructure, or CMS change, run a complete crawl of the current site to capture every live URL. Map each old URL to its new destination before making any changes. Then run a post-launch crawl within 24 hours to verify every redirect is working correctly. This workflow eliminates the vast majority of migration-related broken link incidents.