Jono Catliff ยท Automatable

Claude Code SEO Masterclass

Condensed action guide โ€” every technical step, click path, filter, and prompt. Fluff, anecdotes, and sales pitches removed.

Condensed from ~12,800 words โ†’ ~2,400 words. Keeps all actionable SEO steps, SEMrush clicks, Lighthouse workflow, deployment, and prompt references. Links point to official blueprint files.

Install as an agent skill: npx skills add liyakhar/claude-code-seo-guide -y ยท Star on GitHub

Overview & Strategy

  • Goal: Rank on Google via two tactics โ€” blog posts at scale (informational keywords) + service pages (money keywords: service ร— city).
  • Click distribution: ~40% of clicks go to position 1, ~20% to position 2, then drops fast. Higher rank = more leads.
  • Four pillars: (1) winning keywords, (2) on-page SEO, (3) technical SEO, (4) off-page SEO.
  • on-page SEO = content, structure, meta tags. technical SEO = site build, speed, crawlability, sitemap, robots.txt.
  • AI SEO = regular SEO. ChatGPT/Perplexity/Claude search Google first โ€” rank on Google and you rank in AI answers.
  • Wrong strategy risk: You may not know for 2โ€“4 years. Use data (SEMrush), not Claude guesses, for keywords.

Setup: VS Code + Claude Code

  1. Install VS Code (Antigravity no longer supports Claude Code extension โ€” use VS Code instead).
  2. Install the Claude Code extension in VS Code.
  3. Create a project folder (e.g. SEO_brief). Every Claude Code project lives in one folder.
  4. Add CLAUDE.md to the folder root โ€” this is Claude's instruction manual (SSG rules, voice rules, SEO requirements). Copy from the Skool blueprint or clone the GitHub repo.
  5. Clone official repo: git clone https://GitHub.com/jonocatliff/SEO_brief.git

Build the Website (v1)

  1. Open your project folder in VS Code โ†’ open Claude Code.
  2. Attach a Dribbble screenshot as design reference (search e.g. "plumbing website" on Dribbble.com โ†’ screenshot a landing page).
  3. In Claude, click + โ†’ upload screenshot from computer.
  4. Run prompt (see prompts.md v1): homepage + blog index + service index.
  5. Preview at localhost (click the link Claude outputs after build).

Index pages: Blog index lists all posts; service index lists all service landing pages.

Static Site Generation (Required)

Google must receive fully rendered HTML instantly when crawling. Use static site generation (SSG) only.

TypeWhat happensSEO
SSGPage pre-built at build time โ€” Google gets HTML immediatelyโœ… Required
Server-side renderingPage built on each request โ€” slower crawlโš ๏ธ Suboptimal
Client-side renderingGoogle may get empty shell โ€” JS builds page in browserโŒ Won't rank

CLAUDE.md enforces Next.js output: 'export' (SSG). If Google can't crawl complete HTML, nothing else matters.

Keyword Research โ€” SEMrush (Blog Keywords)

  1. Open SEMrush โ†’ SEO โ†’ Keyword Magic Tool.
  2. Enter a root keyword (e.g. "plumber") โ€” returns all variations containing that word.
  3. Apply filters:
    • Keyword Difficulty โ‰ค 30 โ€” you can actually rank
    • Volume โ‰ฅ 100/month โ€” worth targeting
    • Intent: Informational โ€” for blog posts (not "buy Nike shoes" commercial intent)
  4. Exclude bad keywords: competitor business names, branded terms, "how to become a [job]" (job-seekers not customers).
  5. Questions tab: great blog ideas (e.g. "how much does a plumber cost?" = buyer intent).
  6. Adjacent topics: top-of-funnel content before they're ready to hire (e.g. "signs you need a new water heater").
  7. Competitor spy: enter competitor domain in SEMrush โ†’ see their ranking keywords โ†’ steal relevant ones.
  8. Select winners โ†’ Apply โ†’ add to keyword list (e.g. "plumbing keywords").
  9. Export as CSV โ†’ save as keywords.csv in project folder.
  10. Target: a few hundred to a couple thousand keywords.

Don't ask Claude for keywords โ€” it doesn't know difficulty or volume.

Create Blog Post (v2) + Pexels Images

  1. Drag keywords.csv into your Claude Code project.
  2. Run prompt v2 (see prompts.md): pick one primary keyword + 4โ€“5 secondary keywords for a keyword clusters.
  3. After using a primary keyword, add it to used-keywords.md โ€” never reuse.
  4. Pexels API setup:
    • Go to Pexels.com/api โ†’ create account โ†’ request API key
    • Add to .env: PEXEL_API=your_key_here
  5. Prompt asks Claude to pull images from Pexels via API key in .env.

keyword clusters: One page ranks for many related terms. Root: "how to unclog a drain" + secondaries: "unclog kitchen sink", "slow drain", "home remedy clogged drain", etc. One post can rank for 50โ€“100 keywords.

Fix AI Slop โ€” Voice Files (v3 prep)

First draft will read like generic AI. Fix with reference files in the references/ folder:

  • voice.md โ€” your writing style, sentence rhythm, anti-patterns
  • humour.md โ€” humor rules (first 50 words need a dad joke or self-aware wink; not a brochure)
  • stats.md โ€” real business numbers (jobs completed, years in business, pricing)
  • stories.md โ€” anecdotes from past jobs
  • opinions.md โ€” your takes on the industry

How to populate: Copy your LinkedIn posts, emails, call transcripts, or writing you admire โ†’ prompt Claude: "Please update all reference files from these passages."

Why it matters for SEO: Dwell time, bounce rate, and engagement signals. Boring content = people leave = you don't rank.

Rewrite Blog Post โ€” SERP Analysis (v3)

Before rewriting, Claude must research what already ranks:

  1. Search Google for the primary keyword
  2. Find top 3 ranking blog posts (exclude Reddit/UGC)
  3. Analyze and match:
    • Format (listicle, tutorial, guide, comparison)
    • Word count (within 20% of their average)
    • H2 count and image count
    • Every topic all three cover + 1โ€“2 extras they missed
    • Answer the main question in the first paragraph (featured snippet)
    • FAQ from "People Also Ask" (4โ€“8 questions)
  4. Rewrite using humour.md + voice.md + opinions.md + stats.md + stories.md
  5. Images above H2 headings via Pexels

Full prompt in prompts.md v3.

SEO Black Box โ€” How to Win

  • 200+ rumored ranking signals โ€” nobody knows exact weights (not even Google employees).
  • Known signals: dwell time, bounce rate, scroll depth, CTR, content depth, backlinks, technical health.
  • Simple rule: Google wants users to return โ†’ serves ads โ†’ makes money. Best content wins.
  • #1 lever: Create content people actually want to read (not AI slop).

Service Pages โ€” Zipper Model

Blog posts = topical authority (informational). Service pages = money keywords (commercial intent).

Zipper model: Cross-multiply services ร— cities:

Services: emergency plumber, drain cleaning, hot water repair
Cities: Vancouver, Toronto, Montreal
โ†’ emergency plumber Vancouver, drain cleaning Toronto, etc.

SEMrush for service keywords:

  1. Keyword Magic Tool โ†’ root keyword โ†’ sort by Cost Per Click (money keywords; typically $3โ€“$20 CPC)
  2. Look for pattern: service + city or city + service
  3. Export to list โ†’ Service-keywords.csv

Build (prompts.md v4): Landing page for city/service โ€” same layout as your tested homepage (Jono got 20% conversion via Google Ads A/B testing).

Limit: Don't create hundreds โ€” similar content across many pages can hurt. Be tasteful (not thousands).

Blog posts raise domain authority โ†’ service pages rank higher.

On-Page SEO (v5) โ€” 80+ Signals

Paste the full checklist from on-page-seo.md (or slideshow/onpage-seo-checklist.html) into Claude Code.

Prompt v5: Update blog post with every item from on-page-seo.md โ€” but keep voice and humor. Balance SEO markers with readable content.

Key items verified in demo:

  • 2โ€“3 external links to authoritative sources
  • 3โ€“5 internal links to your other pages (descriptive anchor text)
  • Primary keyword in first 100 words
  • Exactly one H1; proper H2 โ†’ H3 hierarchy
  • 4โ€“8 FAQ questions
  • Meta title (blue in Google results) + meta description (gray text)
  • 80+ total signals in full checklist (schema, OG tags, alt text, E-E-A-T, etc.)

Check meta tags: Chrome โ†’ three dots โ†’ More tools โ†’ Developer tools โ†’ Elements โ†’ search "og:"

Apply to every blog post and service page.

Technical SEO (v6) โ€” Lighthouse 100/100

Three requirements:

  1. sitemap.xml โ€” tells Google every page that exists (submit to Search Console later)
  2. robots.txt โ€” tells Google what to crawl. Allow all public pages; disallow /admin, /dashboard
  3. Google Lighthouse โ€” score 100 on Performance, Accessibility, Best Practices, SEO

Run Lighthouse: Chrome โ†’ three dots โ†’ More tools โ†’ Developer tools โ†’ click >> arrows โ†’ Lighthouse tab โ†’ Analyze page load.

Fix via Claude (prompts.md v6): Copy entire Lighthouse report โ†’ paste in Claude โ†’ ask to optimize to 100% on all four categories + generate robots.txt and sitemap.xml.

If not 100%, paste remaining issues back and iterate.

Example before fix: Performance 53, SEO 92. After: 100/100/100/96.

Automate with Claude Code Skills

Package the full workflow into reusable skills so you type one word and Claude runs everything.

blog skill (skills/claude-code-seo-blog/SKILL.md) should:

  1. Grab unused keyword from keywords.csv (check used-keywords.md)
  2. Create keyword clusters
  3. SERP research (top 3 competitors)
  4. Write with voice/humor references
  5. Pull Pexels images
  6. Apply every item from on-page-seo.md
  7. Reuse same optimized page template

Create similar service skill for service pages. Refresh chat after creating skill, then type blog or service.

Publishing cadence โ€” don't spike volume:

  • Day 1: 1 post ยท Day 2: 1 ยท Day 3: 2 ยท Day 5: 3 ยท Day 8: 4
  • Never dump 1,000 posts at once โ€” Google flags volume spikes

Off-Page SEO โ€” What to Avoid & 4 Legit Methods

Jono does not rely on off-page SEO. Cheap backlink services often destroy sites (PBNs = Private Blog Networks = link farms Google detects immediately).

4 legit methods (optional):

  1. Broken backlink swapping: SEMrush โ†’ site audit competitor โ†’ find their broken external links โ†’ offer your page as replacement
  2. Guest posting: Google search "plumbing" "write for us" โ†’ write for them, link back to your site
  3. HARO / journalist queries: Answer expert questions โ†’ get backlink when published
  4. Paid quality backlinks: Reputable domains only (expensive, pay-to-play on some publications)

Best strategy: Find winning keywords via SEMrush and rank with content โ€” off-page not required.

Deploy: GitHub + Vercel

  1. GitHub: Create new private repo โ†’ copy the git commands GitHub shows โ†’ in Claude Code: "Please upload my whole project here" + paste repo URL
  2. Vercel: Create free account โ†’ connect GitHub โ†’ Import project โ†’ Preset: Next.js โ†’ Deploy (~60 seconds)
  3. Optional: add custom domain via Vercel domain tab (or import from Namecheap)

Localhost = only you can see it. After deploy, site is public.

Post-Launch: Google Business + Search Console

  1. Google Business Profile (Google Business Profile) โ€” free local listing; shows in map pack for "Toronto plumber" type searches
  2. Google Search Console:
    • Add property โ†’ URL prefix โ†’ paste your Vercel URL (copy full link address)
    • Verify ownership: HTML meta tag method โ†’ copy tag โ†’ Claude: "Add this meta tag for Search Console verification and redeploy to GitHub + Vercel"
    • Submit sitemap: enter sitemap.xml in Sitemaps section
    • Request indexing: paste a new page URL in top search bar โ†’ request indexing (~10 requests/day; can index within 1 day vs weeks)
  3. Google Analytics โ€” track visitor behavior
  4. Landing page testing โ€” A/B test forms/layouts (Google Ads), apply winner to all service pages

Don't dump 1,000 pages on launch day.