A website does not need hundreds of 404 pages to have a serious internal linking problem. One dead URL sitting in a navigation menu or region switcher can put a broken link on every page of the site. Fixing the 404 page is only half the job. The other half is finding every source page that still links to it.
This guide walks through how to find and fix broken internal links with SiteAuditLint, using a real audit of acquire.ai run on September 25, 2026. The crawl analyzed 479 URLs and found 8 broken URLs. It also found 215 URLs that link to those broken pages. Those two numbers describe two different problems, and the gap between them is the whole point of this guide.
Every dark panel in this guide is an excerpt from that SiteAuditLint report, labelled with the section it came from, so you can find the same view in your own audit.
Together they produce more than 400 individual broken link references in the acquire.ai crawl.
What is a broken internal link?
A broken internal link is a hyperlink from one page on your site (the source page) to another URL on the same domain (the target URL) that does not return a successful 200 response. Most of the time the target returns a 404 Not Found or 410 Gone, both part of the 4xx client error range of HTTP status codes.
Here is a real example from the audit:
| Source page | Target URL | Status |
|---|---|---|
/au/about/ | /au/global-outsourcing/acquire-home/ | 404 |
Broken internal links usually appear after one of these events:
- A page was deleted, unpublished, or renamed without updating the links pointing to it.
- A site migration or redesign changed the URL structure, such as moving pages into regional folders.
- A URL was typed incorrectly in a menu, button, or piece of content.
- A temporary, test, or "old" version of a page was removed while links to it stayed live.
- A CMS menu item or reusable block still points to a page that no longer exists.
Why broken internal links matter
A 404 on its own is normal. Every site has them, and search engines do not penalize a site simply for returning 404 for pages that are gone. The damage comes from linking to those dead ends:
- User experience. A visitor who clicks a menu item and lands on an error page is likely to leave, especially on a lead generation site.
- Link equity. Internal links pass authority between pages. A link to a 404 sends that value nowhere instead of to a page you want to rank.
- Crawl efficiency. Googlebot follows internal links to discover content. Every dead end is a request that tells the crawler nothing useful. On a site of 479 URLs this is a minor cost, but on large ecommerce or publishing sites wasted crawl budget adds up.
- Trust signals. Hundreds of broken links in shared navigation suggest a site that is not maintained, both to people and to quality reviewers.
Destinations vs. sources: why the audit shows two numbers
The most common mistake in a broken link audit is treating a list of 404 URLs as the finished to-do list. It is not. A 404 list tells you what is broken. A list of source pages tells you where to fix it.
| SiteAuditLint issue | What it counts | acquire.ai |
|---|---|---|
| Client error (4xx) | Broken destination URLs | 8 |
| Links to broken internal pages | Source pages containing at least one link to a broken destination | 215 |
These numbers are not contradictory. They measure different sides of the same link. Restoring or redirecting the 8 destinations without touching the 215 sources leaves hundreds of links pointing at a page that either no longer exists or now bounces through a redirect.
The broken internal link workflow in SiteAuditLint
- Crawl the siteRun a full SiteAuditLint auditacquire.ai: 479 URLs, health score 83
- List broken destinationsPages, then Response Codes, then 4xx Client error8 URLs returning 404
- Find the source pagesIssues, then Links to broken internal pages215 source pages with evidence
- Trace the shared componentGroup repeated targets, then check menus, footers and templatesOne template fix can clear many pages
- Choose the fix per targetDecide based on what the old URL was forUpdate linkRemove linkRestore page301 redirect
- Re-crawl and compareComparisons, then check the issue countGoal: 0 URLs on the issue
How to find and fix broken internal links with SiteAuditLint
Step 1: Start with the Overview
Open the report and begin at the Overview. The acquire.ai audit scored 83 out of 100 for site health, with 223 critical issues, 327 warnings, 1,817 opportunities, and 37 information items. The URL Health panel splits the 479 crawled URLs like this:
Site Health
URL Health
| ● Healthy | 196 | +5 |
| ● Needs attention | 249 | -5 |
| ● Redirected | 26 | |
| ● Broken | 8 | |
| ● Blocked | 0 |
Eight broken URLs out of 479 looks small. Do not stop here. The broken count only tells you how many destinations fail, not how widely they are linked.
Step 2: List every URL returning a 4xx error
Go to Pages and open Response Codes. For acquire.ai the breakdown was:
| View | URLs | Filters |
|---|---|---|
| Response Codes | 479 | 2xx Success 4453xx Redirect 264xx Client error 8Rate limited (429) 05xx Server error 0No response 0Blocked by robots.txt 0 |
The zero counts matter too. No 5xx server errors and no 429 rate limiting means the 404s are genuine missing pages, not a server that buckled under the crawl. Every one of the 8 broken URLs returned HTTP 404:
| URL | Evidence |
|---|---|
| https://acquire.ai/au/global-outsourcing/acquire-home/ | HTTP 404 |
| https://acquire.ai/au/global-outsourcing/back-office-old/ | HTTP 404 |
| https://acquire.ai/au/insights/videos/ | HTTP 404 |
| https://acquire.ai/ph/global-outsourcing/acquire-home/ | HTTP 404 |
| https://acquire.ai/ph/global-outsourcing/contact-centre/ | HTTP 404 |
| https://acquire.ai/uk/global-outsourcing/acquire-home/ | HTTP 404 |
| https://acquire.ai/us/global-outsourcing/acquire-home/ | HTTP 404 |
| https://acquire.ai/us/global-outsourcing/contact-centre/ | HTTP 404 |
A 404 does not automatically mean the page should come back. Before you decide anything, work out what happened to each URL: was it moved, retired on purpose, deleted by mistake, or never meant to exist?
Step 3: Find every page linking to a broken URL
This is where the audit becomes actionable. Go to Issues and open Links to broken internal pages. In the acquire.ai report it is a Critical issue under Internal Linking, affecting 215 URLs, with High impact and Low effort.
Why it matters
This page links to internal URLs that return errors, wasting link equity and frustrating users.
How to fix
Update or remove the broken links listed in the detail column.
High impact and low effort is the combination you want to fix first. Each fix is usually a single link edit, and the payoff reaches hundreds of pages.
Step 4: Read the source page and target URL together
The issue view pairs every affected source URL with the broken targets it links to, and the status code each returned. That turns a vague "we have 404s" into a precise instruction: source page, broken target, status code.
| URL | Evidence |
|---|---|
| https://acquire.ai/ | https://acquire.ai/au/global-outsourcing/acquire-home/ [404] |
| https://acquire.ai/?country=AU | https://acquire.ai/au/global-outsourcing/acquire-home/ [404] |
| https://acquire.ai/acquire-intelligence-expands-into-executive-ai-advisory-with-the-acquisition-of-applied-ai-australia/ | https://acquire.ai/au/global-outsourcing/acquire-home/ [404], https://acquire.ai/us/global-outsourcing/acquire-home/ [404], https://acquire.ai/uk/global-outsourcing/acquire-home/ [404], https://acquire.ai/ph/global-outsourcing/acquire-home/ [404], https://acquire.ai/us/global-outsourcing/contact-centre/ [404] (+1 more) |
| https://acquire.ai/au/about/ | https://acquire.ai/au/global-outsourcing/acquire-home/ [404] |
| https://acquire.ai/au/about/awards-recognition/ | https://acquire.ai/au/global-outsourcing/acquire-home/ [404] |
| https://acquire.ai/au/about/brand-guidelines/ | https://acquire.ai/au/global-outsourcing/acquire-home/ [404] |
Read one row as an instruction: /au/about/ links to /au/global-outsourcing/acquire-home/, which returns 404, so that link needs to change. Now notice the third row. Blog posts such as the Applied AI Australia acquisition announcement link to the acquire-home page in every region at once. Individual authors do not write links like that. A shared component does.
Step 5: Look for repeated broken destinations
Counting how often each broken target appears in the evidence column shows where the problem really lives. Here is the acquire.ai breakdown:
/global-outsourcing.Six targets account for well over 90% of the broken references, and they follow a clear naming pattern. Mapping the 8 URLs from the Client error (4xx) list by region folder makes the pattern obvious:
| Region folder | acquire-home | contact-centre | Other broken URLs |
|---|---|---|---|
/au/ | 404 | not flagged | back-office-old, insights/videos |
/us/ | 404 | 404 | none |
/uk/ | 404 | not flagged | none |
/ph/ | 404 | not flagged | none |
Every regional folder has a dead acquire-home link. That is almost certainly one component, such as a country or region switcher, a logo link inside a regional header, or a shared "Home" item in a global menu, repeated across four regional templates. The two contact-centre targets follow the same logic in the US and Philippines menus only, which suggests those two regions had their service pages renamed while AU and UK did not.
The two AU outliers behave differently. back-office-old (7 references) looks like a leftover from a page rebuild, and /au/insights/videos/ (3 references) looks like a removed section. Those are true one-off content fixes.
The practical takeaway: before editing 215 pages, find where these six links are defined. On most CMS platforms, fixing a single menu, header, footer, or reusable block clears the broken link from every page that uses it.
Step 6: Check navigation and templates before individual pages
When a broken target repeats across many source pages, check the shared parts of the site first:
- Header navigation, mega menus, and regional or country selectors
- Footer navigation and legal links
- Breadcrumbs and logo links
- CMS menus (for example, WordPress Appearance, then Menus)
- Reusable blocks, global widgets, and page builder sections
- Related content modules and blog post templates
- Hard-coded links inside theme files
Only after the shared components are clean should you work through the remaining one-off links page by page.
Step 7: Decide how each broken link should be fixed
The right fix depends on what the old URL was supposed to do. Use this decision table for each broken target:
| Situation | Fix | Watch out for |
|---|---|---|
| The page moved to a new URL | Update the link to the new URL | Link straight to the final URL, not to a redirect |
| The page was retired and has no replacement | Remove the link | Reread the sentence or menu so it still makes sense |
| The page was deleted by mistake and is still needed | Restore the page at the same URL | Confirm it returns 200 and is indexable |
| The old URL has external backlinks or bookmarks and a clear equivalent | Add a 301 redirect, and still update internal links | Avoid redirect chains and redirects to unrelated pages |
Two rules apply to every option.
Do not rely on redirects to fix internal links. A 301 rescues external backlinks and old bookmarks, but your own links should point directly at the live URL. Internal links to redirects add an extra hop for every visitor and crawler, and they turn into new broken links if the redirect is ever removed. The acquire.ai crawl already has 26 redirected URLs, so adding more is not the goal.
Do not redirect everything to the homepage. Google tends to treat irrelevant redirects, especially mass redirects to the homepage, as soft 404s. Only redirect when the new page genuinely serves the same purpose as the old one.
For acquire.ai, a sensible plan would be: point each regional acquire-home link at that region's live home or outsourcing hub, point the US and PH contact-centre links at whichever contact centre service page replaced them, repoint back-office-old links to the live /au/global-outsourcing/back-office/ page, and remove or replace the three links to /au/insights/videos/.
Step 8: Use the Priority Fixes list to sequence the work
SiteAuditLint ranks "Links to broken internal pages" first in the acquire.ai Priority Fixes panel:
Priority Fixes
The first two items are the same problem seen from both ends, so fix them together in this order:
- Fix broken links in global navigation and templates.
- Fix any remaining targets that repeat across several pages.
- Fix broken links on high-value landing and service pages.
- Decide whether each broken destination should be restored, redirected, or left as a 404.
- Clean up the remaining one-off links.
- Run another crawl.
Step 9: Fix related link issues in the same pass
While you are editing menus and templates, the same report flags a few closely related issues worth clearing at the same time:
- Non-200 URLs in the XML sitemap (3 URLs). The sitemap lists one 301 and two 302 thank-you pages. Sitemaps should list only live, indexable, canonical URLs.
- Links to broken external pages (20 pages). Many of the flagged links point to LinkedIn profiles returning status 999. That is LinkedIn's anti-bot response to crawlers, not a real dead page, so check those manually before removing them. Genuine dead news links should be updated or removed.
- Links to
localhost. Some blog share buttons still point tohttp://localhost/acquirearchive/, a leftover from a staging or archive import. Those links work for nobody outside the developer's machine and should be rewritten site-wide with a search and replace. - Orphan pages found only in the sitemap (77 URLs). The inverse of a broken link: live pages with no internal links pointing to them. If some of the 404 targets were renamed, their replacements may be sitting in this list waiting for the links you are about to fix.
| URL | Evidence |
|---|---|
| https://acquire.ai/ai-skills-gap-finance-australia/ | HTTP 301 |
| https://acquire.ai/au/thank-you-page/ | HTTP 302 |
| https://acquire.ai/us/thank-you-page/ | HTTP 302 |
| URL | Evidence |
|---|---|
| https://acquire.ai/au/about/ | https://www.linkedin.com/in/scottstavretis/ [999], https://www.linkedin.com/in/kathrynamarshall/ [999] (+3 more) |
| https://acquire.ai/au/insights-ai-newsroom/ | https://abcnews.go.com/US/wireStory/california-announces-new-deal-tech-fund-journalism-ai-113041061 [404] |
| https://acquire.ai/blog/ypo-members-visit-acquire-bpo-headquarters-in-the-philippines/ | http://localhost/acquirearchive/acquire-blog/a-team-showcase-artistry-in-poster-making-contest-organised-by-hrbp-team/ [404] |
Step 10: Re-crawl and compare against the baseline
Do not assume the fixes worked. Run another SiteAuditLint crawl and recheck Pages, Response Codes; Issues, Links to broken internal pages; Pages, Links; Pages, External Links; and Overview, Priority Fixes.
The acquire.ai report already shows why comparing individual issue counts matters more than watching the headline score:
Since Last Audit
| Site health | 83 | → | 83 | |
| Issues | 2,440 | → | 2,367 | -73 |
| Critical | 223 | → | 223 | |
| Broken URLs | 8 | → | 8 | |
| Slow response (over 1 second) | 145 | → | 72 | -73 |
Previous audit #28 on 2026-09-25
Slow responses halved, yet the site health score did not move and the critical count stayed at 223. The critical count will not drop until the broken internal links are fixed, because broken links make up all of it: 215 pages linking to broken URLs plus the 8 broken URLs themselves equals exactly 223.
Step 11: Confirm the issue is actually resolved
After the second crawl, open "Links to broken internal pages" again. If the fixes landed, the affected URL count should fall sharply, ideally to zero. If it has not, check whether:
- The link also exists in a second template, such as a separate blog or landing page layout.
- Some pages hard-code the old URL in body content rather than using the menu.
- The replacement URL itself returns an error or redirects.
- A page cache or CDN is still serving the old navigation.
- Landing page variants (for example, the
-lpand-lp2pages in this audit) use their own copy of the header.
A simple checklist for broken internal links
- Crawl the website with SiteAuditLint.
- Open Pages, then Response Codes, and review the 4xx URLs.
- Open Issues, then Links to broken internal pages.
- Review each source page and broken target together.
- Group repeated targets and look for naming patterns across folders.
- Fix global navigation, headers, footers, and templates first.
- Update, remove, restore, or redirect each remaining broken link.
- Clean up related sitemap and external link issues.
- Re-crawl the site.
- Compare the new report with the previous audit.
A list of 404 URLs tells you what is broken. A list of source pages tells you where to fix it. Connecting the two is the difference between reporting broken links and actually fixing your internal linking.
Frequently asked questions
What is the difference between a 404 page and a broken internal link?
A 404 is a URL that returns "Not Found." A broken internal link is a link on one of your own pages that points to that URL. One 404 can create hundreds of broken internal links if it sits in shared navigation, which is exactly what happened in the acquire.ai audit: 8 404 URLs, 215 affected source pages.
Should I fix every broken internal link with a 301 redirect?
No. Update internal links to point directly at the correct live URL. Use a 301 redirect in addition when the old URL has external backlinks, traffic, or bookmarks and a clearly equivalent replacement exists. Redirecting unrelated URLs to the homepage is often treated as a soft 404.
Do broken internal links hurt SEO?
Search engines do not penalize a site for having 404 pages. The cost comes from linking to them: link equity is wasted on dead ends, crawlers spend requests on URLs that return nothing useful, and visitors leave. Broken links in main navigation have the largest effect because they appear on every page.
How often should I check for broken internal links?
Run a crawl after every site migration, redesign, URL restructure, or menu change, and on a regular schedule (monthly works for most sites). Compare each crawl with the previous audit so new broken links are caught before they spread across templates.
Why do LinkedIn links show up as broken with status 999?
LinkedIn returns status 999 to automated crawlers as an anti-scraping measure. The profile is usually live for real visitors. Open the link in a browser before removing it, and treat it as a verification task rather than a confirmed broken link.