What I can take on in your stack, layer by layer
Search problems rarely stay in one layer. A ranking loss turns out to be a template, the template turns out to be a build setting, and the fix needs someone on the server. I work in every one of those layers myself. Here they are from the bottom up, each with the engagement or the working system that shows it.
Servers and hosting
- My first root password opened a Solaris SPARCstation pizza box in the image lab at PNI, Picture Network International, my first job out of college.
- Before LAMP had a name, I was already living in it: Linux boxes, Apache, MySQL, and Perl and PHP scripts, all the way to 2002, when search became my full time work.
- I took over a consumer brand's stalled React application after an outage: inventoried the code, hosting, DNS, and credentials, then got onto the DigitalOcean server over SSH, read the logs, corrected the configuration, ran the Node process under PM2, and found the port conflict keeping it offline. The app takeover.
- I provision and harden Linux servers for my own systems: key only SSH, root login off, firewalls, and automatic security updates.
DNS, CDN, and email
- I moved this domain's DNS to Cloudflare with every Google Workspace mail record intact, and it runs SPF, DKIM, and a DMARC quarantine policy.
- I configure Cloudflare caching, redirects, and bot settings so speed improvements never lock out search or AI crawlers. See Cloudflare settings for SEO and email authentication and DNS.
Mail servers and Google Workspace
- I administer Google Workspace for my own business: users, aliases, groups, Gmail routing, Calendar, and Drive, plus a Google Cloud OAuth project my assistant uses to read and write my calendar.
- I learned mail on Linux servers running Sendmail, so IMAP, POP3, SMTP ports, aliases, and mail routing are old friends. When mail misbehaves, I read the headers and the bounce codes first. The blocklist recovery guide shows the method.
Repositories and pull requests
- I wrote and patched Perl and PHP for years, on Movable Type, PHP-Nuke, PostNuke, and scripts of my own, so a client's codebase is familiar ground long before an AI assistant opens it.
- I merged metadata changes into a local business's Sanity and Vercel codebase through GitHub, under the developer's review, and confirmed the prerendered output. Sanity and Vercel.
- I work in a 20,000 page programmatic site's GitHub repository to see how URLs get generated and specify crawl controls precisely. Programmatic indexing.
- I read entire codebases with Claude Code and Codex to find the component behind a crawl finding, and I check each answer on the live site.
Build pipelines and automation
- This site is generated by a Python script that refuses to publish a bad title, a duplicate description, a broken internal link, a page under its word minimum, or two pages that share too much wording. The method is written up in SEO regression tests in the build.
- A GitHub Actions workflow pings IndexNow after every deploy, once the new sitemap is confirmed live.
- I moved a 309 entry serialized novel off a broken Movable Type install to Jekyll on GitHub Pages, keeping every original URL and adding schema, llms.txt, and IndexNow. Built with Claude Code.
- I built my own operations assistant, about 12,000 lines of Python with 140 end to end tests, by directing Claude Code like a development team.
Rendering and front end
- I traced a Magento and Hyvä store's decline to Alpine.js sections that never rendered for Googlebot, and kept a second, unrelated problem on its own track. Ecommerce rendering.
- I specified the fixes for a Create React App platform with 2,000 undiscovered pages in a 13 page spec ranked P0 to P3, then verified them. React event platform.
- I found the consent setup that left a review site's article tabs empty for Google. Consent blocking.
- I sweep sites for React hydration errors with scripted headless Chrome. See hydration errors and SEO.
Content systems
- On Umbraco I built and published 54 city landing pages for one B2B company, and for another found the cache problem that kept saved social metadata off the live page. Umbraco operations.
- I audited a Squarespace to Shopify move with 3,400 404s and duplicate URLs, and did the theme schema work. Shopify migration.
- I've worked in WordPress for twenty years, and in Shopify, Magento 2, Drupal, Squarespace, Webflow, Plone and the Zope server under it, Jekyll, and Next.js.
Crawl data and archives
- For this domain, which has run on Drupal, Squarespace, and now static pages since 2012, I pulled every URL the Wayback Machine ever captured, tested all 848 against the live site, and redirected each one that had ever served a page: more than 640 redirects in all.
- Full site crawls with JavaScript rendering, custom extraction, near duplicate detection, and before and after comparisons are routine.
Structured data and entities
- I separated a multi state closets brand from its first location in schema and on the page. Multi-location entity.
- Every page here carries a connected JSON-LD graph, a Markdown twin, and full text feeds for AI crawlers.
Data
- My Python pipelines produced an 88,900 contact master list, merged two 28,800 record exports to 94% email coverage, and exposed an AI made tracker that had invented its records. Data cleanup.
What comes with me into every layer
- Separate problems stay separate. A template change and a spam link spike that arrive in the same month get two investigations until the data joins them. The Magento case is the example.
- False alarms get caught. When an AI visibility dashboard showed a sharp drop for a B2B client, I traced it to the vendor changing its methodology; the client's actual visibility had held steady. Umbraco operations.
- Evidence gets assembled like a legal brief. Debate training shows in my Google appeals: the strongest verifiable document leads, private documents stay out, and every date has paper behind it. The reinstatement.
- Sources get vetted. At Edelman I screened online influencers for a genuine multi year history before any client engaged them. That is open source intelligence work, and the same instinct checks every report a vendor or an AI hands me.
- One finding, two documents. Engineers get ranked tickets with acceptance criteria; owners get a plain summary they can act on. Developer specs and QA.
- Speed with guardrails. This site reached 92 pages and more than 62,000 words eight days after its first commit, built with Claude Code under my direction, and every page clears the automated checks before it publishes.
- Mail that can't be spoofed. This domain runs SPF, DKIM, and DMARC, and a sister domain that never sends mail is locked down with a reject policy, strict alignment, and a null MX.
Regulated work
I've worked under HIPAA and nondisclosure agreements on a healthcare site, and I keep credentials out of repositories and AI tools on every engagement.
For the person behind all this, see About, and for the full career record, my CV on chrisabraham.com. To put any of it to work, tell me where your problem lives.
Updated October 13, 2026
