If you look after one website, broken links are a chore. If you look after twenty, they're a process problem.
Agencies and freelancers who maintain client sites tend to discover broken links the worst possible way: the client finds them first. A "Book a consultation" button that has pointed to a deleted page for three weeks. A product range removed by the client's own team, still linked from the homepage banner. A PDF menu replaced with a new file name. The client emails, slightly annoyed, and asks why they're paying for maintenance.
The fix isn't working harder. It's having a system where every client site is checked on a schedule, problems are triaged by impact, and the client hears about issues from you, along with the fix, before they find them.
This guide sets out that system using free or low-cost tools. It's written for small agencies, freelancers and in-house teams who manage several sites.
Why agency sites break more than you'd expect
Client sites have several features that make link rot more likely than on sites you fully control:
- Many editors. The client's staff, their marketing contractor and your team all edit content. Nobody sees the whole picture.
- Third-party dependencies. Booking widgets, payment pages, embedded forms, affiliate links and partner sites change without telling anyone.
- Seasonal and campaign content. Promotions end, landing pages get unpublished, and the links pointing to them stay.
- Platform churn. Plugin updates, theme switches and migrations between hosts or platforms.
- The web itself decays. Pew Research Center found that 38% of webpages that existed in 2013 were no longer accessible a decade later, and that 23% of news webpages contained at least one broken link (Pew Research Center, 2024). Any client site that links out will lose some of those links over time.
None of this is your fault, but under a maintenance agreement it's your problem.
Step 1: Build a client site inventory
Before you can check sites consistently you need one list that everyone on the team can see. For each client:
| Field | Why |
|---|---|
| Primary domain and any alternate domains | So you check the right one and catch redirect issues |
| Platform (WordPress, Shopify, Webflow, custom…) | Determines how fixes are made |
| Critical paths | The 3–10 URLs that make money or generate leads: booking, checkout, contact, pricing, key landing pages |
| Who edits content | So you know who to ask when something changes |
| Your access level | CMS, hosting, DNS, Search Console |
| Maintenance scope | What you're contracted to fix, and what you only report |
| Reporting contact | Who receives reports and approves changes |
The critical paths column matters most. It's what turns "your site has 47 broken links" into "your booking button is broken, and here are 46 minor issues".
Step 2: Get the right access, without sharing passwords
- Google Search Console: ask the client to add you as a user rather than sharing their Google login. Search Console supports Owner, Full and Restricted users (Managing owners, users, and permissions). Full access is usually enough for monitoring and URL inspection.
- CMS: your own named account with the minimum role you need, not a shared "admin" login. This also gives you an audit trail of who changed what.
- Platform redirect tools: make sure your role can create redirects (Shopify URL redirects, a WordPress redirect plugin, server or CDN rules). Otherwise every fix needs a ticket.
When a client relationship ends, removing your named accounts is clean. Rotating a shared password is not.
Step 3: Schedule the checks
Daily: automated crawl of each site
Every site should be crawled automatically, ideally daily, and the results should reach you without anyone remembering to start a scan. Look for a tool or setup that:
- Runs on a schedule without someone pressing a button
- Reports where each broken link is (source page and the HTML element) as well as which URL failed. Without that, fixing takes far longer
- Uses read-only requests, so it's safe on live stores and never submits forms or creates orders
- Groups results per site, so each client's issues stay separate
Options range from desktop crawlers you schedule yourself to hosted services. Screaming Frog SEO Spider is the standard desktop crawler and is free up to 500 URLs per crawl (limits); scheduling and some integrations need the paid licence. WordPress-only teams sometimes use a plugin such as Broken Link Checker on each site, though plugins add load to the client's server and differ in how they handle external links.
Weekly: critical-path check by a person
Automated crawls catch broken links; they don't confirm a contact form actually delivers email or that a booking widget completes. Once a week, someone should run each client's critical paths by hand, or with a test mode the platform provides, especially after updates.
Monthly: Search Console review
For each client, look at Indexing → Pages for growing "Not found (404)" or "Server error (5xx)" counts, and Performance for sudden drops on key pages. Google's 404 guidance is a useful framing for clients: a URL that doesn't exist and returns 404 is normal, and "redirecting users to another page, such as the homepage, instead of returning a 404" creates soft 404s that confuse users and search engines (Search Console Help: 404 errors).
Step 4: Triage by impact, not by count
A raw report with hundreds of rows will overwhelm a client and waste your time. Sort every issue into one of four buckets:
| Priority | What | Response |
|---|---|---|
| P1: Revenue/lead blocker | Broken link or image on a critical path (checkout, booking, contact, pricing, main nav) | Fix same day; tell the client it's fixed |
| P2: Important page broken | A ranking page, high-traffic post or page with backlinks now returns 404/5xx | Restore or 301 to the correct replacement within the week |
| P3: Internal hygiene | Internal links through redirect chains, broken links in old posts, missing images on low-traffic pages | Batch-fix monthly |
| P4: External rot | Outbound links to third-party pages that died | Batch-fix monthly or quarterly; replace or remove |
Redirect chains belong in P3 rather than being ignored: each hop is an extra request, and Lighthouse notes a redirect can delay loading "by hundreds of milliseconds" (Lighthouse: Avoid multiple page redirects).
Agree these definitions with clients up front, ideally in the maintenance agreement, so "we fix P1 same day" is a promise you can keep and report on.
Step 5: Fix at the source, and redirect only when it makes sense
- Internal link broken: edit the link where it appears (page, menu, widget, template). Don't paper over it with a redirect.
- Page moved or renamed: add a single-hop 301 from the old URL to the new one, so external links and bookmarks still work, and update internal links too.
- Page deliberately removed: let it return 404 or 410 and remove internal links to it. Google treats 410 the same as 404 (Search Console Help).
- Never redirect everything to the homepage. It's the soft 404 pattern Google warns against.
I covered the platform-specific mechanics for one common case in How to Find and Fix Broken Links on a Shopify Store.
Step 6: Handle the breakages clients cause
A large share of breakage on client sites comes from the client's own edits. That's fine; it's their site. But it needs handling diplomatically:
- Report without blame: "On Tuesday the 'Spring offers' page was unpublished. Three pages still link to it, including the homepage banner. We've pointed them to the current offers page." That's a service, not an accusation.
- Teach the pattern once: a short note for client editors: "before you delete or rename a page, tell us or add a redirect".
- Offer a pre-change check: for planned redesigns or product range changes, crawl before and after.
Step 7: Report in the client's language
Clients don't care about status codes. A monthly report that works:
- Headline: "All critical paths working" or "1 critical issue found and fixed on [date]".
- What was fixed: counts by priority, plus examples of the P1/P2 fixes.
- What needs a decision: e.g., "the supplier's catalogue page we link to is gone; should we remove the link or link to their homepage?"
- Trend: issues found vs fixed over time. A falling line is the best evidence your maintenance is working.
For smaller clients, The Website Maintenance Checklist for Small Business Websites is a plain-English summary you can share so they understand what you're doing and why.
Common mistakes
- Checking only when something feels wrong. Problems sit unnoticed for weeks.
- Sending raw crawler exports to clients. Triage first.
- Treating every 404 as urgent. Old, unlinked URLs returning 404 are normal.
- Fixing with redirects instead of updating links. Chains build up over time.
- Forgetting images. A missing hero image on a landing page is as visible as a broken link.
- Relying on a plugin on every site without checking its load and update status across your portfolio.
Where automation fits
The daily crawl is the part that's most worth automating across a portfolio, because it's the part people skip when they're busy with client work.
Disclosure: I build Uchik, which handles that daily layer. Uchik crawls a site every day with read-only GET requests (it never submits forms or places orders) and emails a report where each broken link, missing image, redirect chain or mixed-content warning is tied to the page and HTML element that caused it, which makes P1 triage fast. How it works describes the crawl, the features page lists the checks, and the sample report shows what a client-ready report looks like. Limits worth knowing: it reads server-delivered HTML, so links added only by JavaScript may be missed, and it doesn't test that forms deliver. The free plan covers one website, so you can try it on one client before deciding. You can sign up for free.
Agency checklist
- [ ] Client inventory with critical paths, editors, access and scope
- [ ] Named accounts (CMS, Search Console) instead of shared logins
- [ ] Daily automated crawl per site, with source-page detail
- [ ] Weekly human check of critical paths and forms
- [ ] Monthly Search Console review per client
- [ ] P1–P4 triage rules agreed in the maintenance agreement
- [ ] Fix-at-source policy; single-hop redirects; no homepage catch-alls
- [ ] Monthly client report in plain language
- [ ] Pre/post crawl around client-led changes
A broken link the client finds is a complaint. A broken link you found, fixed and reported is the reason they renew.
Top comments (0)