Case studies
Each case describes the problem, my role, what I did, who else did what, how the work was checked, and where it stands now. Clients are described by industry; I name clients only with their permission.
Content the crawler never sees
- Magento store: product content Googlebot never saw. Alpine.js sections that mounted only on scroll, and a backlink spike kept on its own track.
- WordPress media site: a consent banner hiding every article. Consent blocking kept the article tabs empty for Googlebot.
- React event platform: 2,000 pages Google couldn't reach. A 13-page developer spec, ranked P0 to P3.
Migrations, rescues, and modern stacks
- Clinical practice: WordPress to Netlify, with search intact. Redirect decisions for every URL and an AI-assisted repository analysis.
- Local service business on Sanity and Vercel. Metadata changes merged through GitHub, and the developer's prerendering verified.
- Specialty retailer: cleaning up after Squarespace to Shopify. 3,400 404s, duplicate URLs, and theme schema.
- Consumer brand: taking over a stalled React application. An inventory, then fixes on the server over SSH.
Indexing at scale and recovery
- Programmatic site: crawling and indexing at scale. Segmented sitemaps and parameter rules for 20,000+ pages.
- Health-testing store: recovering after an SEO plugin outage. Recovery checks in Google and Bing, explained in plain English.
Entities, locations, and planning
- Multi-location brand: untangling the parent from its first location. Entity structure and developer-ready JSON-LD.
- Seasonal retailer: a staged plan around the peak. Multi-site audit and timing around the busiest weeks.
- Therapy practice: a suspended Google Business Profile reinstated. A documented appeal.
Content operations and AI search
- Two B2B companies on Umbraco. 54 landing pages, steady publishing, and cache and template fixes.
- AI company: search visibility for recruiting engineers. How AI answers represent an employer.
- A founder's public record: tracing AI errors to their sources. A wrong founding year, an invented rename, and a doubted award the archive proved.
Data
- Contact data: three cleanups and an AI audit. 88,900 contacts, two merged exports, and a tracker that invented its data.
My own builds
- Built with Codex and Claude Code. Blackbox, my command-line assistant with 140 tests; Hill Mole's move off Movable Type; and this site.
- Four static sites: a speed and AI crawler pass. Every page measured moved to 89 or better on mobile, most to 97 and above.
Updated
