Jono Catliff ยท Automatable
Claude Code SEO Masterclass
Condensed action guide โ every technical step, click path, filter, and prompt. Fluff, anecdotes, and sales pitches removed.
Install as an agent skill:
npx skills add liyakhar/claude-code-seo-guide -y ยท Star on GitHubOverview & 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
- Install VS Code (Antigravity no longer supports Claude Code extension โ use VS Code instead).
- Install the Claude Code extension in VS Code.
- Create a project folder (e.g.
SEO_brief). Every Claude Code project lives in one folder. - 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.
- Clone official repo:
git clone https://GitHub.com/jonocatliff/SEO_brief.git
Build the Website (v1)
- Open your project folder in VS Code โ open Claude Code.
- Attach a Dribbble screenshot as design reference (search e.g. "plumbing website" on Dribbble.com โ screenshot a landing page).
- In Claude, click + โ upload screenshot from computer.
- Run prompt (see prompts.md v1): homepage + blog index + service index.
- 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.
| Type | What happens | SEO |
|---|---|---|
| SSG | Page pre-built at build time โ Google gets HTML immediately | โ Required |
| Server-side rendering | Page built on each request โ slower crawl | โ ๏ธ Suboptimal |
| Client-side rendering | Google 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)
- Open SEMrush โ SEO โ Keyword Magic Tool.
- Enter a root keyword (e.g. "plumber") โ returns all variations containing that word.
- 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)
- Exclude bad keywords: competitor business names, branded terms, "how to become a [job]" (job-seekers not customers).
- Questions tab: great blog ideas (e.g. "how much does a plumber cost?" = buyer intent).
- Adjacent topics: top-of-funnel content before they're ready to hire (e.g. "signs you need a new water heater").
- Competitor spy: enter competitor domain in SEMrush โ see their ranking keywords โ steal relevant ones.
- Select winners โ Apply โ add to keyword list (e.g. "plumbing keywords").
- Export as CSV โ save as keywords.csv in project folder.
- 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
- Drag keywords.csv into your Claude Code project.
- Run prompt v2 (see prompts.md): pick one primary keyword + 4โ5 secondary keywords for a keyword clusters.
- After using a primary keyword, add it to used-keywords.md โ never reuse.
- Pexels API setup:
- Go to Pexels.com/api โ create account โ request API key
- Add to .env:
PEXEL_API=your_key_here
- 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:
- Search Google for the primary keyword
- Find top 3 ranking blog posts (exclude Reddit/UGC)
- 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)
- Rewrite using humour.md + voice.md + opinions.md + stats.md + stories.md
- 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:
- Keyword Magic Tool โ root keyword โ sort by Cost Per Click (money keywords; typically $3โ$20 CPC)
- Look for pattern: service + city or city + service
- 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:
- sitemap.xml โ tells Google every page that exists (submit to Search Console later)
- robots.txt โ tells Google what to crawl. Allow all public pages; disallow /admin, /dashboard
- 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:
- Grab unused keyword from keywords.csv (check used-keywords.md)
- Create keyword clusters
- SERP research (top 3 competitors)
- Write with voice/humor references
- Pull Pexels images
- Apply every item from on-page-seo.md
- 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):
- Broken backlink swapping: SEMrush โ site audit competitor โ find their broken external links โ offer your page as replacement
- Guest posting: Google search
"plumbing" "write for us"โ write for them, link back to your site - HARO / journalist queries: Answer expert questions โ get backlink when published
- 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
- GitHub: Create new private repo โ copy the git commands GitHub shows โ in Claude Code: "Please upload my whole project here" + paste repo URL
- Vercel: Create free account โ connect GitHub โ Import project โ Preset: Next.js โ Deploy (~60 seconds)
- 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
- Google Business Profile (Google Business Profile) โ free local listing; shows in map pack for "Toronto plumber" type searches
- 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.xmlin 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)
- Google Analytics โ track visitor behavior
- 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.