A Link Audit Found 17 Broken Links Across the Portfolio That Every Status Check Had Missed

Site-level status checks can pass completely while the links inside those pages are dead.

Evidence

On 2026-08-22 a script was written to extract every literal internal link from each site's templates and resolve it against that site's own domain. Across the portfolio it checked 870 links and found 17 broken.

The failures were not obscure. They included an entire admin area returning HTTP 500 on one site, and two pages on another that were completely unreachable because a redirect rule sent them to themselves in an infinite loop.

Every one of those sites was returning HTTP 200 on its homepage and on the pages containing the broken links.

Methodology

The audit reads each site's templates/ directory, extracts fully literal href="/..." values, discards anything built at runtime by PHP or JavaScript, then requests each remaining URL against that site's own domain and records the status code.

Results are classified. Auth-gated responses on admin paths are reported but not counted as failures. Transient timeouts are retried once before being recorded, because a burst of sequential requests against one host produces failures indistinguishable from dead links.

The reason this class of bug survives normal checking is that it is invisible from the outside. A crawler sees pages returning 200. A human spot-checking sees pages loading. The dead links are inside those working pages, and on one site they only rendered on listing pages using one particular schema type.

This is a good example of why measurement has to be specific to what you are actually worried about. A general uptime check would never have found any of it.