Broken links and 404 pages: how to find and fix them
Broken links accumulate on every site that stays alive long enough. Pages get renamed, products go out of stock, an external site restructures, and nobody notices until a customer mentions it. The good news is that finding them is a twenty minute job with free tools, and most of the fixes take seconds.
What a 404 actually costs you
Start with the honest version, because this subject attracts exaggeration. A handful of 404 errors will not damage your rankings. Google has stated repeatedly that 404 responses are a normal part of the web and that returning one is the correct answer for a page that no longer exists.
The real cost is the visitor. Someone clicked a link expecting something specific, got an error, and in most cases left rather than searched again.
The second real cost is lost link value. When an external site links to a page of yours that now returns 404, the authority that link carried goes nowhere. That is a genuine loss, because those links were the hardest thing to earn.
The third is crawl efficiency. On a large site, thousands of broken internal links waste the crawler's time on dead addresses instead of your real pages. On a fifty page site this is irrelevant.
And the fourth is the one owners feel most: internal broken links signal neglect. A visitor who hits two dead links stops trusting the rest of what the site says, including the prices.
Finding them: four free sources
Search Console is the first place. Its page indexing report lists addresses returning 404, and crucially it shows the ones Google found through links, including from other sites.
A crawler is the second. The free tier of Screaming Frog handles up to five hundred URLs, which covers most small business sites, and it shows both the broken address and every page linking to it. That second column is what makes fixing quick.
Analytics is the third and the most overlooked. Set up a report filtered to your 404 page title, and you get a live list of the errors real visitors are actually hitting, which is a different and more urgent list than the theoretical one.
Your server logs are the fourth, and worth checking if you have access, because they catch requests from sources no crawler simulates.
Do not forget outbound links. External sites reorganise constantly, and a five year old blog post commonly links to three sites that have since restructured. A crawler flags these in the same run.
Run this once a quarter on a stable site, and after every migration, redesign or bulk content change, which is when almost all breakage is created.
Redirect, restore or leave alone
Not every 404 needs fixing, and treating them all the same is how sites end up with a thousand pointless redirect rules.
- Redirect when the content moved or was replaced. Send it to the new equivalent page with a permanent 301, which passes the accumulated link value on.
- Redirect when an external site links to a dead address of yours. This is the highest value fix available, because you are recovering earned authority for the cost of one line.
- Restore when the page was deleted by mistake, or when it still gets meaningful traffic and no replacement exists.
- Leave the 404 when the page genuinely no longer exists and has no successor, for example a discontinued one off service. A clean 404 is the honest answer and Google handles it fine.
- Use 410 Gone when you deliberately removed something permanently and want it dropped from the index faster. It is a stronger signal than 404 but the practical difference is small.
For an out of stock product the right answer depends on duration. Temporarily unavailable means keep the page and say so. Discontinued for good means redirect to the category or to the closest alternative, never to the homepage.
Redirect mistakes that make things worse
The most common one is redirecting everything to the homepage. Google treats these as soft 404s and ignores them, and the visitor is more annoyed than by an honest error page, because they now have to work out what happened.
The second is chains. Page A redirects to B, B redirects to C. Every hop adds latency and loses a little value, and chains grow quietly across years of small changes. Point the original directly at the final destination.
The third is loops, where two rules point at each other and the page becomes unreachable entirely. Any crawler catches these immediately.
The fourth is using a temporary 302 where you meant permanent. A 302 tells search engines to keep the old address indexed, so the new page never fully inherits the old one's standing.
The fifth is fixing the redirect but leaving the broken internal link in place. If your own navigation or article text points at a dead address, edit the link. A redirect is a safety net for external traffic, not a substitute for correcting your own pages.
And keep the rules in one place, documented. A site with redirect rules spread across a plugin, the server config and the CMS becomes impossible to debug when something loops.
A 404 page that keeps the visitor
The default error page of most systems is a dead end. A useful one takes an hour to build and quietly recovers a meaningful share of the traffic that would otherwise bounce.
Say plainly what happened, in ordinary language and without blaming the visitor. One sentence is enough.
Include a search box. This is the single most effective element, because the visitor knows what they were looking for and can simply ask again.
Add links to your three or four most important pages: main services, contact, and the blog or shop index. Keep the full site navigation visible too.
Keep your normal design, header and footer. An error page stripped of branding reads as if the whole site is broken.
Two technical points that are easy to get wrong. The page must return an actual 404 status code, not 200 with an error message printed on it, because the second kind is a soft 404 and search engines will index the error. And exclude the 404 page from your sitemap while making sure it is not blocked in robots.txt, since Google needs to be able to see the status.
Finally, track it. Send a Analytics event when the 404 page loads, recording the requested address and the referring page. Within a month you will know exactly which broken links real people hit, and that list is short enough to fix in an afternoon.
FAQ
Do broken links hurt my Google rankings?+
Not directly in the way most articles imply, because Google treats 404 responses as a normal part of how the web works and expects any site of reasonable age to have some. The genuine damage is indirect and comes in three forms: visitors who leave rather than search again, external links pointing at dead pages so their earned authority is wasted, and on large sites a crawl budget spent on addresses that no longer exist. So the priority is not to reach zero errors but to fix the ones that matter, which means broken links inside your own navigation and content, and any dead page that another site still links to.
Should I redirect a deleted page to my homepage?+
Almost never, because Google recognises the pattern and commonly treats such redirects as soft 404s, meaning the link value you hoped to preserve is discarded anyway. It is also worse for the visitor, who arrived expecting something specific and now has to work out for themselves what happened and where to look. Redirect to the closest genuine equivalent when one exists, such as the replacement page or the parent category, and when nothing equivalent exists let the address return an honest 404 with a helpful error page instead.
How often should I check for broken links?+
For a small stable site once a quarter is enough, and the check itself takes about twenty minutes using Search Console together with a free crawler run. The far more important trigger is event based: check immediately after any migration, redesign, URL structure change or bulk deletion of content, because that is when the overwhelming majority of breakage is created in a single afternoon. Sites with an active blog or a changing product catalogue benefit from a monthly pass, and setting up an Analytics report on your 404 page makes the whole thing continuous, since real visitor errors then surface on their own.
