This morning I had my agent check every link on my site. That’s 395 published posts, 142 outbound URLs and 379 internal ones.
The first pass looked bad: 18 of the 142 outbound links came back with something other than a clean 200. Once I sorted them, exactly one was actually dead. The links that were really costing me money weren’t outbound at all. They pointed at my own site.
Here’s the 10-minute broken link check I’m adding to my Sunday routine, and the three buckets that make it quick.
The receipt
- Outbound: 142 unique URLs, 124 clean. 15 returned 403, one timed out and one failed its SSL handshake.
- The 15 403s were bot walls, not dead pages. Medium, Gartner, Canva, Lovable and Reddit all turn scripts away. A 403 means the door is closed to bots, not that the page is gone. A checker that counts every 403 as broken will scare you for no reason.
- One real 404: a GitHub file in Anthropic’s Claude Code repo that I linked from my Claude agent templates audit on October 9. The whole
plugins/folder is now just a README. Less than a month later, it’s gone. - Internal: 379 URLs, 4 dead, used 18 times across 17 posts. The worst is
/services/, which 8 posts link to with “check out our consulting services.” That page doesn’t exist. The one sentence meant to turn a reader into a client sends them to a 404.
Nobody noticed, me included, because nothing errors when a link breaks. The post still loads and the agent still reports success. The reader just quietly leaves.
The three buckets
Every non-200 link goes into one of three buckets. Each one needs a different action.

⚡ GET THE AI EDGE
Weekly AI tips that actually save you time and money. No fluff, no hype — just what works.
- Dead (404, 410). The page is gone. Swap in the new location or delete the link. This is the only bucket where the checker’s answer is the final one.
- Walled (403, 429, timeouts). The site blocks scripts. Open these in a browser before you touch anything. 16 of my 18 scary results landed here.
- Moved (200, but on a different domain). This is the sneaky one, because the checker calls it healthy. Of 18 redirects, 4 changed domain. My link to windsurf.com now lands on devin.ai, and an old link to adaptiveinsights.com lands on Workday. The one that failed SSL, gutcheckit.com, turned out to redirect to a different company entirely. The link works, but the reader ends up somewhere I never chose.
The 10-minute check
- Pull every link. Have your agent fetch all published posts through the WordPress REST API and collect every
href, split into internal and external. It runs in about a minute. (It’s the same pull as my orphan post check, so run both together.) - Check internal links first. They’re your pages, so they’re always fixable and never bot-walled. Add a cache-buster to each URL so you’re testing the live site, not a cached copy.
- Check outbound links with a real browser user-agent, try HEAD and then GET, and record where each redirect ends up.
- Sort into the three buckets. Fix the dead ones, eyeball the walled ones, and read every cross-domain redirect.
- Fix money links first. A dead CTA costs more than a dead citation. One redirect from
/services/to the booking page fixes 8 posts at once.
Who fixes it
My agent found all of this but didn’t edit a single live post. Changing old published content, and deciding where /services/ should point, are my calls. So the list went to my review queue with a proposed fix for each link. The agent finds it, the human decides.
Links go stale the same way content does. It’s the link-level version of content decay. The post didn’t change. The web around it did.
The takeaway: a broken link checker that only counts errors will overreact to bot walls and miss the redirects that send readers somewhere new. Sort the results into dead, walled and moved, and check your own CTAs first. They’re the links you’d least want broken.
Want to know what’s quietly broken in your own setup? Book a strategy session.

📥 FREE: THE AI PLAYBOOK
The exact tools and workflows I use to run a one-person agency. 25 years of marketing experience distilled into an actionable guide. Yours free.
