Senior Technical SEO Consultant

Find what's keeping your site invisible to Google.

I work the technical layer of search: crawl, index, render path, schema, ranking. My clients run B2B SaaS, e-commerce, and content sites, the kind of business where a drop in rankings shows up in the revenue line.

South Africa · working worldwide 10+ yrs senior technical SEO Lighthouse 98 on this site
10+
years of senior technical SEO
40
audits + sprints shipped
1.2s
LCP on this site (down from 3.9s)
98
Lighthouse score, sustained
Methodology

Where rankings actually come from.

Six layers, in order. Most SEO advice only works the last two, which is why it rarely moves the first four. The other four are where I spend most of my time.

01
Crawl

Googlebot has to find you first.

Think of the site as a graph: URLs are the nodes, internal links the edges between them. A page with no incoming link, or one buried under three layers of session-ID noise, never enters Google's queue at all. The first file Googlebot reads on every visit is /robots.txt. Those few lines decide which URLs it crawls and which it skips.

# robots.txt for apparelclient.com
User-agent: Googlebot
Disallow: /cart
Disallow: /*?sort=
Disallow: /*?filter.size=
Allow:    /collections/

Sitemap: https://apparelclient.com/sitemap.xml

One wrong line here can delist a whole site in minutes, so it's where I start every audit.

02
Render

Your JavaScript sits in a queue, sometimes for weeks.

The cheap pass is HTML. It gets fetched, parsed, and indexed in seconds. The expensive pass renders your app in a headless Chromium called the Web Rendering Service. That queue usually clears within a day. I've watched it run eleven. If your title and body only appear after JS executes, you wait, and Google doesn't publish how long the wait is.

// abridged WRS timing on a real client
06:14:02  /pricing             [HTML crawled]
06:14:02  /pricing             [render queued]
14:32:17  /pricing             [WRS render]
14:32:17  /pricing             [indexed — 8h 18m]

That log is one page on one client. Search Console never surfaces this queue, so JS-heavy sites can sit un-indexed for days before anyone notices.

03
Index

A search is an intersection, not a scan.

When you search, Google doesn't read the web. It reads an inverted index it built ahead of time. Each word maps to a postings list, just the documents that contain it. A query then resolves by intersecting a handful of those short lists instead of scanning trillions of pages. Pandu Nayak described exactly this under oath in the 2023 DOJ trial.

TermPostings (doc:tf)
flatD3:2
feetD3:1
shoesD1:1, D2:1, D3:2
stabilityD3:1
runningD1:2, D2:1, D3:1

Query flat feet shoes → intersect the three postings → only D3 contains all three, so D3 is the candidate set ranking starts from.

04
Match

The candidate set gets scored, then reranked.

BM25 ranks the candidate set by how strongly each query term matches each document. Then the neural systems take over. RankBrain, BERT, and RankEmbed project the query into vector space and pull in documents that are semantically close even when they share zero keywords. That's why "apex predator" can rank for "consumer at the top of a food chain".

// classical BM25 — still load-bearing in 2026
score = idf · tf(k₁+1) / (tf + k₁(1 − b + b·|d|/avgdl))

idf("flat")    = 1.58
tf in D3       = 2
|d| (D3 length) = 8
avgdl          = 7.3

score(D3) = 3.24

Numbers are illustrative, but the BM25 math is real and hasn't changed since 1995.

05
Rerank

Real users re-rank you, live.

Confirmed in the 2023 DOJ trial: NavBoost uses 13 months of click data to reorder results. A long dwell after the click lifts you. Pogo-stick straight back to the SERP and try the next result, and that counts against you. Your CTR is a live input the ranking system actually reads.

// NavBoost click signal aggregation, 13mo window
month 01 · R1  user → R1 → ← back in 3s          badClick
month 02 · R3  user → R3 → dwell 4m12s          goodClick
month 03 · R3  user → R3 → converted             signal++
month 05 · R2  user → R2 → pogo-stick            badClick
month 13     aggregate · R3 dominates         → rerank

A weak snippet gets demoted no matter how clean the rest of the stack is.

06
Serve

Twiddlers do the final reordering.

Internally, Google calls them twiddlers, lightweight rerankers that fire after the core ranking is done. Freshness nudges one way, diversity caps you at one result per host, spam demotions pull the rest down. By the time a result lands on page one, a stack of these has already adjusted its position.

PositionTwiddlerΔ
8core ranking exit
7Freshness−1
5SpamBrain (clean, authored)−2
2Diversity (one per host)−3
1NavBoost (13mo goodClicks)−1

Four twiddlers, each nudging the same result after core ranking is supposedly done.

Most SEO work lives in layers 5 and 6. I audit all six and find what's actually broken. See engagements →
Engagements

Three ways to work together.

Almost everyone starts with the two-week audit. The prices below are floors. Real scope and the real number get set on the call. I work mostly with B2B SaaS, programmatic content sites, e-commerce stores doing $5M+, and digital publishers.

Audit
from $7,500

Two-week technical pass

Deep crawl, indexing, render path, schema, intent. You get a prioritized fix list with effort estimates and a 60-minute walk-through.

  • Up to 50 pages crawled in detail
  • Written report with prioritized fixes
Start with an audit
Retainer
from $7,500 /month

Ongoing technical SEO partner

Monthly engagement for sites where search is a core acquisition channel. Continuous monitoring, quarterly deep-dives, ad-hoc fires, and a direct line to your growth team.

  • Month-to-month, no annual lock-in
  • Most engagements run 3-6 months
  • Direct line of access
Talk about a retainer
Recent work

What ships.

Client work is anonymised under NDA. My own sites and tools are named, so go click them.

B2B publisher · International International SEO

Cut about 27,000 locale pages without losing the clicks that paid the bills

I once deleted 40% of a site's organic clicks on purpose. About 27,000 machine-translated locale and hreflang pages were pulling that traffic at near-zero revenue, on top of enormous crawl waste. I segmented every URL by index state, clicks, and backlinks, then hard-410'd only the dead intersection and kept the equity and AI-citation pages on noindex. Traffic that doesn't convert isn't worth the crawl budget it burns. The revenue-driving English organic stayed intact.

Pages consolidated~27,000 Clicks protected~40%
Pet content · Core Web Vitals 2-week technical

Found the one file behind a "slow" site, not the page builder

Mobile LCP sat at ~6.0s and everyone blamed the page builder. I profiled the render path instead. The real culprit was a single render-blocking theme CSS file that was about 88% unused. I shipped Cloudflare cache rules, Early Hints, and image compression, each one behind a rollback. LCP came down to ~3.7s with no rebuild. Most "slow site" jobs end with the client being told to rebuild, and they rarely need to. The rebuild is usually the expensive way to avoid reading the waterfall.

LCP~6.0s → ~3.7s Root causea CSS file
Gaming media · Indexing Content ops

Recovered 21 pages that had dropped out of Google's index

Pages were bleeding out of the index. The hubs were starved of internal links and the templates were competing with each other. I separated link-starvation from crawl-demand, rebuilt 52 internal links across 14 hubs, wired up IndexNow, consolidated 34 near-duplicate pages, and removed a fabricated AggregateRating that was a penalty risk. The starved pages finally had a real route back into the index.

Pages recovered21 Links rebuilt52 / 14 hubs
Owned & operated GamingNation.in

Peak ~60K organic visits/month, on a site I built from zero

GamingNation started as a blank domain in a crowded niche and I ran the whole thing solo: content, technical SEO, Core Web Vitals, indexation, and monetisation through display and affiliate. It peaked at around 60K organic visits a month.

Peak traffic~60K/mo
Chrome extension · Built Manifest V3

SEO Audit Pro: 80+ checks plus an AI Search Readiness audit

Page-level SEO issues are scattered and hard to action. So I built a Manifest-V3 side-panel extension that runs 80+ on-page checks plus a GEO/AEO AI Search Readiness audit, and hands you the exact fix step for each issue. I designed, coded, and packaged the whole thing end to end.

Checks80+ AI Search Readinessbuilt in
Chrome extension · Built Manifest V3

Hreflang Checker: catches what Search Console won't tell you

Most hreflang errors are silent. Google just ignores the broken tags and serves the wrong page, and Search Console rarely tells you. So most multi-region setups I'm handed are already broken, and nobody knows, because every dashboard looks green. This extension audits a whole cluster in seconds: reciprocal return links, ISO locale validation, live URL status (404/301/noindex), canonical/noindex conflicts, sitemap hreflang. It's my international-SEO specialty, shipped as a working tool.

Auditsfull hreflang cluster Catchessilent return-link breaks
The stack

Tools I run in and out, not just installed.

Every one of these is in my day-to-day. I know where each lies to you, where it's the fastest read, and when to ignore it and go check the logs myself.

Ahrefsbacklinks · keywords
Screaming Frogcrawl audits · logs
competitive · keyword
indexation · queries
GA4 · attribution
dashboards
edge · cache · CWV
Core Web Vitals
CMS · builds
e-commerce · Admin API
Rank MathWordPress SEO
IndexNowinstant indexing
A taste of the work

Paste any URL. See the first pass I run.

The first pass I run on any site: status and redirects, title and meta, canonical, indexability, headings, mobile, social tags, schema.

The same surface checks I open every audit with.

These are just the surface signals. On the free call I go past them and tell you the one thing holding your rankings back. Book the verdict call →
Questions

Questions I get on every project.

What size sites do you work with?
B2B SaaS from Series A through pre-IPO. E-commerce from $5M revenue up. Content sites with at least 50,000 monthly sessions. If you're earlier than that, the audit will help, but a retainer is overkill.
How fast can I see results?
Technical fixes (LCP, indexing, schema) usually show in 2-6 weeks. Crawl-budget reclamation in 4-8. Ranking lifts depend on the size of the change and the competitive set. For sites with existing authority, you typically see signal in 6-12 weeks.
Do you work directly with our engineers?
Always. The Sprint and Retainer engagements both include direct working sessions with your engineering team. I hand them spec-level tickets they can pull straight into a sprint.
What's your timezone situation?
Based in South Africa (UTC+2). I cover almost the full UK and EU working day live, plus solid US-afternoon overlap. Async handoffs with US teams stay clean, and I work with US and UK founders weekly.
Can you do content SEO too, or only technical?
Technical is the deepest specialty. I'll absolutely advise on content architecture, internal linking, intent matching, and topic clustering, but if your only need is editorial calendar planning, you want a content strategist, not me.
Do you sign NDAs?
Standard practice. Send your template; I'll review and counter-sign in 24 hours.
The free audit call

In 30 minutes I'll tell you whether your SEO is moving revenue or just filling a monthly report nobody reads.

Send your URL first. I'll have worked the technical layer before we talk, so the call is the verdict, not discovery. You leave knowing the one bottleneck that matters, even if you never hire me. The paid work starts from there.