The 80/20 SEO Playbook for Builders - Complete Knowledge Base
A full, agent-ready extraction of the "Ship or Die - SEO" video course by Ilias Ism (founder of MagicSpace SEO, il.ly, headshot-generator.ai). Built from every video's transcript and on-screen frames (Google Search Console, Ahrefs, Keywords Everywhere, Cursor, live SERPs, competitor pages). It is written so an AI agent can execute the entire SEO workflow on a real website end-to-end.
Running example throughout the course: an AI headshot generator SaaS at headshot-generator.ai (a Next.js/Turborepo monorepo, deployed via Cursor). Wherever concrete numbers/URLs appear, they are that real product's data and are kept as worked examples.
0. How to use this file
This document is both a reference (metrics, thresholds, tool click-paths, prompt library) and a procedure (a repeatable loop you run per keyword). When applying it to a site:
Read Part 1 (mental model) and Part 2 (the loop) to understand the strategy.
Do the technical foundation once (Part 3).
Then run the per-keyword loop (Parts 4–9) for each of 1–4 chosen keywords.
Use Part 10 (AI SEO) and Part 11 (moat) as ongoing/long-term layers.
Parts 12–15 are appendices: tool glossary, metrics glossary, full prompt library, checklists, and the worked keyword-value dataset.
Core operating principle of the whole course:SEO is reverse-engineering the SERP. Don't guess. For every keyword, look at what Google is already rewarding and either build something better or get included in what already ranks.
1. Mental model & course philosophy
1.1 The 80/20 thesis
The course teaches the 20% of SEO actions that produce 80% of results, aimed at builders/founders who can ship (technical people, not marketers). Primarily demonstrated on Next.js, but explicitly applicable to any stack/product/language.
You do not need scale. You do not need hundreds of pages or thousands of keywords. You need 1–2 keywords that bring buyers, mapped to 1–few pages, plus a few links/mentions, plus a way to track whether Google and AI engines see the page.
Quote: "You don't need hundreds of different pages or thousands of different keywords. What really matters is that you have at least one or two keywords... connected to one or a few pages."
1.2 The three questions SEO repeatedly answers
What are people already searching? (keyword research)
What is Google already rewarding? (SERP analysis)
Can I build something better, or get included in what already ranks? (build + outreach)
1.3 Course promise (what "done" looks like)
By the end you have: a site that is indexable, a page matched to a specific keyword, a basic backlink/outreach plan, and a way to think about AI search without chasing fake hacks.
1.4 Ranking doesn't only happen on your own domain
Three shifts widen where "ranking" can occur:
AI SEO - getting cited/mentioned inside AI answers (AI Overviews, ChatGPT, Perplexity, Gemini, Claude, Grok).
Parasite/social SEO - publishing on high-authority third-party platforms (Reddit, Quora, Medium, Dev.to, LinkedIn, YouTube) that already have domain authority.
Google prioritizing UGC/social content - Reddit/forum threads and social posts frequently outrank owned pages.
1.5 The course's actual curriculum structure (from the on-screen syllabus)
Step 1 - Make Google See Your Site: what SEO is, set up Search Console, sitemap + robots.txt, confirm crawlability.
Step 2 - Find Keywords Worth Targeting.
Step 3+ - SERP analysis, on-page, build pages, content quality, backlinks/outreach, AI SEO, long-term moat.
2. The repeatable per-keyword loop (the whole workflow at a glance)
Judge value with Volume × CPC and intent questions → Part 5.
Validate & cluster in Ahrefs (Top Pages) → Part 6.
Reverse-engineer the SERP - what page type ranks, titles, modifiers, DR of rankers, Reddit/YouTube presence, gaps → Part 7.
Decide the page type the SERP wants (tool/landing page vs. blog post vs. listicle) - let the SERP decide, don't reuse one playbook → Part 7.
Audit on-page SEO of the top 10 (title/H1/H2/canonical/etc.) → Part 8.
Build the page in Cursor to match the SERP → Part 9.
Make the content genuinely good (2-minute voice note + screenshots + opinions) → Part 9.4.
Ship, set canonical, add to sitemap/footer, request indexing in GSC → Part 9.
Get backlinks/mentions (mine competitor backlinks, SERP outreach, parasite posts) → Part 10.
Make it AI-citable (clear UVP + get mentioned in the cited sources) → Part 11.
Track in GSC (Performance) and revisit in weeks → Part 3.
Choose 3–4 distinct keywords total, one page/plan each. Don't sprawl.
3. Technical foundation (do this once)
3.1 Connect the site to Google Search Console (GSC)
Nothing works until Google can see the site. GSC is the central measurement tool.
Steps:
Google "search console" → search.google.com/search-console/about → Start now.
Add property → choose Domain property type (not URL prefix) when you control DNS. Domain type covers all subdomains + http/https and uses DNS (TXT-record) verification.
Enter the bare domain (e.g. headshot-generator.ai).
Verify ownership. If DNS is on Cloudflare: click Start Verification → Cloudflare's Domain Connect flow opens → click Authorize → Cloudflare auto-adds the required TXT record. GSC shows "Verifying… (this may take a minute)" then verified.
Confirm the property opens and you added the exact domain you want to rank publicly. Be consistent about which domain version you use.
3.2 Read Clicks, Impressions, CTR, Position (GSC Performance report)
~80% of the useful work in GSC happens in the Performance tab. The four numbers:
Impressions - how often your page appeared in results for a query.
Clicks - how many people clicked through.
CTR - Clicks ÷ Impressions. That's the entire formula. Tells you if the title/result earns attention.
Average position - your average rank for that query.
How to use it:
Performance → pick a date range: 24 hours / 7 days / 28 days / 3 months / More (custom, up to 16 months).
Focus on two tabs only: QUERIES (what people typed) and PAGES (which URLs get impressions). Countries/Devices/Search Appearance/Days are secondary.
Click a Page row → it filters the whole report to that URL → switch back to Queries to see exactly which searches feed that page (page→query drill-down).
Use + Add filter to isolate sections, e.g. Page "URLs containing" /blog.
For trend tracking: More → Compare tab → "Compare last 28 days to previous period" (or 7-day for fast iteration) → Apply. Then sort the Queries table by the Difference column (clicks or impressions) to find rising/falling terms.
Diagnostic patterns:
High impressions + ~0 clicks + position in the 30s/40s = you rank far beyond page 1; it's a ranking problem (needs on-page + links), not necessarily a title problem. (Real example: /christmas page - 1,103 impressions, 0 clicks, avg position 36.)
High impressions + low CTR but decent position = improve title/meta or page intent.
Page 2/3 rankings = prime candidates for on-page improvements + links.
Queries showing up for the wrong page = build/improve a more focused page.
Brand-new sites have little data - this is normal; wait.
3.3 Check if Google indexed your pages (GSC → Indexing → Pages)
Shows Indexed vs Not indexed counts + reasons. It is normal for "not indexed" to far exceed "indexed" on a newer site (real example: 27 not indexed vs 6 indexed). Reasons and their meaning:
Crawled – currently not indexed - Google saw it but didn't think it worth adding (often auto-generated image/CDN URLs). Fine.
Alternate page with proper canonical tag - Google deduped a variant (e.g. UTM/?ref= tracked homepage URLs) against the canonical. Fine.
Not found (404) / Page with redirect / Soft 404 - usually old/redirected URLs. Usually fine.
Duplicate / canonical issue - Google thinks another URL is the main version.
Rule: only spend time on indexing problems for pages meant to rank. Ignore thin duplicates, image pages, tracking-parameter URLs, private/auth pages.
For a page that matters: copy its URL → paste into the "Inspect any URL" bar (URL Inspection) → check "URL is on Google" / "Page is indexed" / crawl date. That's "good enough" verification.
If not indexed or you updated it: Request Indexing (button becomes "Request again" once submitted). Forces a recrawl.
If you suspect a technical/render problem: Test Live URL (runs a live mobile-Googlebot render) → View Tested Page → HTML and Screenshot tabs. Look for: images clear, text visible = success. Common failure: nav bar missing on mobile but present on desktop (Google mostly renders mobile). This is a rare, last-resort troubleshooting tool.
For confusing GSC issues, paste them into ChatGPT and ask for fix tips.
3.4 Generate a clean sitemap in Next.js (app/sitemap.ts)
A sitemap = a list of all public URLs, served as XML at /sitemap.xml, generated programmatically, then registered in GSC.
Cursor prompt (verbatim):
Add a sitemap.ts file for this Next.js app.
Include all public static routes and any public dynamic routes.
Only include canonical public URLs.
Do not include private, auth-only, test, duplicate, or admin URLs.
Keep it simple: URL only unless lastModified is already meaningful.
The instructor's actual refinement prompt after the AI added extra metadata:
just keep the url, no changeFrequency, priority or lastmod (except if set)
Rules & checklist:
Include: homepage (once), important static pages (legal, returns, campaign pages), the hub pages, and all programmatic/dynamic pages (drag the app folder into Cursor so the agent finds DB-driven routes - e.g. /styles/{slug}-{id}, /u/{username}).
Trailing-slash consistency is a real SEO rule - pick with-or-without once and be consistent everywhere, or Google sees duplicate pages. (Instructor prefers no trailing slash.)
Avoid priority, changeFrequency, lastModified unless you have real values (e.g. a genuine DB updatedAt). They add ambiguity/error surface. "Less is usually safer."
Use a fast/cheap model for this (it's simple) - e.g. Cursor "Composer 2.5 Fast." Next.js auto-serves app/sitemap.ts at /sitemap.xml. Use export const revalidate = 3600 (regenerate hourly) for DB-driven sitemaps.
After deploy: visit /sitemap.xml to confirm XML renders, then GSC → Indexing → Sitemaps → add the sitemap URL. You don't need to publicly link the sitemap on the site.
Place it as a static file in public/ (e.g. apps/web/public/robots.txt) - less processing than a dynamic route.
Don't block _next, images, CSS, JS, API routes, admin panels, or public assets "to optimize." Don't use robots.txt for security.
The only worthwhile addition beyond blanket allow is the Sitemap: line (helps bots discover the sitemap). Google auto-detects robots.txt; no submission needed.
Only block pages that are genuinely private/low-value and not meant to rank.
3.6 Fix technical SEO issues with Ahrefs Site Audit + Cursor
Ahrefs Site Audit is the single most useful (and can be free) technical-SEO tool. It catches ~80% of what can go wrong.
Setup:
Use Ahrefs Webmaster Tools / "Ahrefs Free" (ahrefs.com/webmaster-tools) if not paying - gives 3 tools free: Web Analytics, Site Audit (170+ issue checks), Site Explorer.
Add your site to GSC first, then link GSC to Ahrefs.
Site Audit → Crawl settings: enable "Execute JavaScript" unless your site is fully server-side rendered (SSR). Leave "Follow links on non-canonical pages" and "Follow nofollow links" ON.
Schedule the crawl weekly (or monthly). Non-verified sites are capped at 30 URLs/min scheduled, 1 URL/min always-on.
The fix workflow (the core method - repeat per issue):
Open an issue in Site Audit → read the "Why and how to fix" panel.
Screenshot the issue + explanation, and/or Export the affected-URLs list as CSV.
Drag/drop the screenshot(s) and/or CSV into a new Cursor Agent chat.
Let the agent explore the codebase and patch it. Review the diff, Keep, deploy.
Re-crawl (weekly auto, or trigger "New crawl") to confirm resolution.
Issues worth fixing: non-canonical URLs in sitemap, redirects in sitemap, broken internal links, important pages blocked/missing, duplicate/missing titles, obvious AI-slop pages.
Don't waste time on: cosmetic warnings, low-value private URLs, chasing a perfect 100 Health Score (aim "decent"; example site scored 96 "Excellent"), or issues caused only by a non-canonical www. variant (robots.txt inaccessible on www, a www 404 - non-issues).
Worked fix examples:
Non-canonical page in sitemap (?gender=male/?gender=female filter URLs that canonicalize to /styles): fix = remove those query-param variants from sitemap.ts (they're UI filters, not separate pages). The agent read the CSV and patched sitemap.ts (-2 lines).
AI-content-detector flag (Ahrefs "AI content level: Very High" on auto-generated legal pages): prompt Cursor with just too much ai → it rewrites in "plainer, more varied prose," keeps legal substance, drops AI-boilerplate ("We are committed to…", rigid A/B/C subsections, bold-label colons), varies section titles, bumps the last-updated date. Re-crawl to confirm the AI score dropped.
Note: Ahrefs has its own "Fix with Agent A" AI auto-fix button, but the instructor never uses it - he prefers the manual screenshot/CSV → Cursor loop.
Google your topic vaguely - see what pages already rank in your space.
4.2 Keywords Everywhere (the cheap, always-on SERP overlay)
A Chrome/Firefox extension (~$12/year, credit-based) that overlays keyword data directly on the Google SERP - no leaving Google. "The search engine results page is the most important thing in SEO."
What it shows:
Under the search box: Volume/mo | CPC | Competition for your query.
Inside Google's autosuggest dropdown: volume/CPC/competition per suggestion as you type.
Right sidebar modules: Trend Data (7d/30d/3mo/12mo/5yrs/All), Trending Keywords (with 30-day % increase - catches emerging sub-niches/competitors), SERP Keywords (what the ranking pages target, + # ranking pages), Related Keywords, Long-Tail Keywords, People Also Search For, an SEO Difficulty scorecard, and a "Run SEO Report" button that pipes SERP data into ChatGPT/Claude/Gemini/Deepseek.
Also has web tools: Top Pages Finder, Organic Ranking Checker, and a Keyword Clustering tool (KeywordKeg).
Metrics to read:
Volume - monthly searches.
CPC - what advertisers pay per click in Google Ads = proxy for commercial/buyer intent. Advertisers paying ~$1+ signals real value.
Keep: terms describing the problem your product solves; terms where the searcher might buy/compare/try a tool; commercial-intent modifiers - best, free, generator, software, API, template, alternative, comparison.
Ignore: giant broad keywords that don't match intent; random high-volume terms that don't map to your product (e.g. "Google Photos" at 20M/mo is useless for a headshot tool); keywords that bring users who'll never pay. Related / "People Also Search For" suggestions are hit-or-miss - always judge relevance manually.
4.4 Don't assume your brand-literal term is best
Compare volumes across the cluster before deciding. (Real example: "headshot generator" ≈ 8,100/mo but a broader/adjacent term like "professional headshots" ≈ 60,500/mo may deserve more focus. "AI photo generator" ≈ 550,000/mo - broader still.) Long-tail = a more detailed variant (add "AI"), which can carry more intent or even more volume.
4.5 Steal proven keywords from competitors
Technique 1 - vague-search extraction: search the clumsy way a real user describes the problem (e.g. create profile picture from a group of photos with AI for my linkedin), read the titles Google ranks (titles, not snippets - the title is the strongest relevance signal), and extract the short keyword from those titles. (That query surfaced Canva's "Free AI LinkedIn Profile Picture Generator" → short keyword "LinkedIn profile picture generator.") Validate by re-searching the short keyword: if it returns essentially the same pages, Google has confirmed the two are the same intent.
Technique 2 - competitor top pages (page-level, not domain-level):
Open a competitor ranking in the SERP.
In Keywords Everywhere, hover a result's traffic popup → "view top pages", or paste the domain into the Top Pages Finder (keywordseverywhere.com/tools/top-pages-finder/). Free tier scans up to 500 pages; shows URL / Estimated Traffic / Total Keywords.
Filter out irrelevant pages on giant sites (Canva ranks for QR codes, resumes, logos - ignore); prefer smaller, topically-focused competitors (e.g. PFPMaker over Canva).
For any interesting page, view its full ranking-keyword list (Keywords Everywhere "View All" or the Organic Ranking Checker).
Export CSV/Excel in bulk rather than copying by hand.
Cluster by URL, not by individual keyword - one page can rank for hundreds of keyword variants; a competitor's page→keyword map is a template for your own site structure (one page per intent cluster).
Prompt to cluster exported competitor data:
Here are competitor top pages and their ranking keywords.
Cluster these by search intent.
Return:
- recommended page slug
- main keyword
- related keywords
- search intent
- why this page is worth building
- whether it should be a landing page, blog post, tool, listicle, or social/parasite play
Aim to identify 3–4 distinct target keywords you don't yet cover. (Real final shortlist: profile picture maker, AI LinkedIn profile picture generator, AI headshot generator, laser eyes - "plus one for fun.")
5. Judge keyword value - Volume × CPC
Formula:
Keyword value ≈ monthly search volume × cost per click (CPC)
This approximates the total monthly ad-spend flowing through that keyword's SERP - a proxy for real commercial value.
Worked example: "AI headshot generator" ≈ 33,100/mo × $1.50 CPC ≈ ~$45,000–$50,000/month in paid-search value. A good keyword is high traffic AND commercially useful (advertisers actively bidding).
How to read combinations:
High volume + high CPC = strong market.
Low volume + high CPC = still worth it if intent is strong (e.g. "best AI headshot generator": 3.1K volume but $3.00 CPC - higher buyer intent than a 25K-volume/$2 term).
High volume + $0 CPC = probably informational/low-converting - usually skip (e.g. "laser eye meme maker": 200 volume, $0 CPC → rejected: "none of these images will convert").
Ask before building:
Would this searcher pay for what I sell?
Are advertisers already paying for this click?
Can one page satisfy this intent?
Can I realistically compete with what already ranks?
The "$50k keyword" case: "AI headshot generator" = 25,000 searches × $2 CPC = $50,000/mo of ad value. A single #1 organic listicle capturing a slice of that (est. ~10,000 clicks → ~5,000 affiliate clicks → 35% commission on ~$30 sales) can be worth $5k–$10k/month - roughly $60k–$120k/year from one article. This is why the top pages are so hard to beat (see Part 9.5).
6. Validate & cluster keywords in Ahrefs
Ahrefs is the instructor's primary tool (best data). Recommend trying it ≥1 month, exporting data, then deciding whether to keep paying or rely on cheaper tools.
Quick setup (Ahrefs SEO Toolbar + Site Explorer):
Install & log into the Ahrefs SEO Toolbar browser extension (overlays DR/UR/BL/RD/KW/ST metrics on every SERP result and adds a keyword-metrics bar: KD, Volume, GV, TP, Clicks, CPC).
Open your site (or a competitor) in Site Explorer.
Settings → "See keyword data for" → United States (not Worldwide). Why US: English, biggest market, highest/most relevant volume, users with budgets.
Set the backlinks filter to "Best links: Only" (removes spammy/useless links).
Focus on two reports only for a fast read: Top Pages and Backlinks.
Top Pages is the single most useful report. Why it beats "Organic Keywords": a single page can rank for hundreds/thousands of near-duplicate keyword variants. "Organic Keywords" makes you think you need 500 pages; Top Pages auto-clusters those variants down to the actual number of distinct pages (e.g. 1,208 organic keywords → really only ~38 pages). One page can rank for 500 keywords - you don't build a page per keyword variant.
Top Pages tips:
Disable "Page type" and "AI content level" columns, enable "SERP titles" to see each competitor's actual <title> (steal title patterns).
Sort by Traffic or Value, not raw volume or rank - a page can rank #1 for a near-zero-volume/$0-CPC keyword and be worthless (e.g. "ai cosplay").
Filter by URL "Contains: blog" to mine a competitor's blog specifically for proven high-traffic topics/titles.
Columns/metrics glossary (see also Part 13): DR (Domain Rating 0–100), UR (URL Rating, page-level), AR (Ahrefs Rank), BL (backlinks), RD (referring domains), KW (keywords ranked), ST (organic search traffic), Traffic, Value (≈ traffic × CPC of ranking keywords), KD (Keyword Difficulty 0–100), CPC, Position, Top keyword. Expect established competitors at DR ~50–70; a brand-new site starts very low (the example site: DR 20).
7. Reverse-engineer the SERP (the most important skill)
"The SERP is the brief. Do not decide the content type first. Let Google show you what format it wants." Rankings move, but someone is always in the top 10 - that's your study-able example.
7.1 SERP review checklist (run for every keyword)
For each keyword, write down:
What page types rank? Tool, landing page, blog post, listicle, Reddit, Quora, YouTube, LinkedIn, app store, directory, image pack?
Do titles use exact-match keywords? (Test with Ctrl/Cmd+F "highlight all" of the exact phrase across the SERP - if nearly everything highlights, exact-match title is mandatory.)
What modifiers repeat? free, best, #1, 2026/current year, review, comparison, "side by side," "I tested N+".
Are low-DR pages ranking? If yes, the keyword is beatable. (Real: a DR-27 page ranked #3 for a KD-69 term; DR-12 and DR-3 pages held the top 2 for a KD-37 term; a DR-12 blog post with 2 backlinks ranked for "LinkedIn headshot.")
Are Reddit/Quora/LinkedIn posts ranking? If yes, parasite/social SEO is part of the play (and these slots are un-ownable - you participate, you don't build them).
Are videos/images showing? If yes, consider YouTube or image assets.
What sections repeat across the ranking pages?
What's missing that you can do better?
7.2 Let the SERP dictate the page type - don't reuse one playbook
Two real, contrasting SERPs in the same niche:
"profile picture maker" (KD 69) → top 3 are all tool/landing pages (PFPMaker, Canva, Picofme), all with the exact keyword in the title, all "free," upload-first UX. → Build a free, upload-first landing page.
"LinkedIn headshot" (KD 9) → top 3 are LinkedIn native posts + Reddit (no tools). First AI Overview appears. An Images pack appears. The first buildable results are two low-DR blog posts (DR 18, DR 12) at positions 4 and 6 - outranking higher-DR tool pages (Monica DR 73, InstaHeadshots DR 57) at positions 5 and 7. → Build a blog post first, even though the product is a tool.
Rule: "Do not reuse the same playbook across keywords." Page type can beat domain authority - when low-DR blog posts outrank high-DR tool pages, Google wants informational content for that query.
7.3 Reading authority to judge beatability
Under each organic result the Ahrefs/Keywords Everywhere toolbar shows two rows:
PAGE: UR, BL, RD, KW, ST, Words (page-level authority + word count).
Very low DR in top spots = beatable. Very high DR (Canva 93, Adobe 96) = hard to unseat directly; you win via on-page match + targeted page-level backlinks.
8. On-page SEO (audit the top 10, then apply)
Process: for every top-10 competitor, record title, meta description, H1, all H2s, canonical status, alt text, and "vibe"/proof elements. Patterns that repeat across almost all top pages are requirements, not style choices.
8.1 The on-page checklist (in order of importance)
Title tag <title> (most important) - contains the exact target keyword if competitors do. Common mistake: putting a creative headline in the <title> and omitting the keyword - that creative copy belongs in the H1. (Real: PFPMaker's title = "Free AI Profile Picture Maker - Professional & Creative Styles"; its H1 = "Create Stunning AI Profile Pictures in Seconds".)
Meta description - include specific numbers and a clear benefit ("Generate professional… 27+ AI tools, 1,100+ styles. Start with 9 free tools…"). Keep ≤ ~160 chars.
H1 - verb-first, includes related keywords. For secondary/landing pages, make the H1 literally the exact keyword and nothing else (Canva's /create/profile-pictures H1 = just "Free profile picture maker").
H2s - answer follow-up questions; this is what most helps Google understand the page. A "How to [X]" section with numbered steps works well ("People love steps").
Canonical tag - always include; self-canonical on the clean URL. Even on ?ref=/UTM tracked versions the canonical should point to the clean URL. Missing canonical is a real ranking weakness.
Robots meta + sitemap - already covered; part of the checklist.
Structured data (JSON-LD) - optional/low priority; the instructor often skips it or just asks the AI to "add structured data" (e.g. @type: BlogPosting with datePublished/dateModified/headline/image/keywords/author/publisher).
Open Graph / social tags - easy to generate with a script; ask the AI.
Alt text on all important images, descriptive + brand/keyword context.
Vibe / trust & proof elements (do for all top 10): specific numbers/stats, recognizable trust logos, many examples, before/after, big clear images, testimonials/star ratings, FAQ at the bottom, internal links (footer + in-content), and proof of real product use.
8.2 The hard rule
"If every top result uses the exact keyword in the title, do not get clever - use the keyword." On-page alone isn't enough: backlinks are the other lever (PFPMaker DR 67 outranks Canva DR 93 partly via ~3,000 page-level backlinks + better on-page).
9. Build & ship pages with Cursor
The build tool throughout is Cursor (Agent mode; cheap "Composer 2.5 Fast" for demos, but the instructor recommends a stronger model - GPT-5.x / Claude Opus - for real content quality). Drag the relevant folder into the chat for context.
9.1 Build a SERP-matched landing page (when the SERP wants a tool/landing page)
Cursor prompt (verbatim template):
Create a public page at /profile-picture-maker.
Target keyword: profile picture maker.
Use the SERP pattern from these screenshots:
- exact keyword in title/H1
- free/tool-first positioning
- upload form above the fold
- examples
- how it works section
- AI profile picture styles
- FAQ
- clear CTA
Add canonical URL, metadata, OG tags, and internal links where relevant.
(The instructor's actual minimal first prompt was just: make a public page called "profile picture maker" (as a slug) / use similar titles.)
Refinement questions to ask about the first draft:
Does it match what the SERP rewards? Is there an upload action above the fold?
Are the H2s keyword-aligned? Did it add unnecessary pricing too early (remove it if no ranking competitor shows pricing this early)?
Is the slug short and exact? Is it linked from the footer / related pages?
Reorder by searcher priority ("How it works should be higher").
Key build decisions demonstrated:
Add drag-and-drop + paste-screenshot (Ctrl/Cmd+V) + click-to-upload above the fold (all three; competitors converged on this).
Let people try before login; gate account creation at the highest-intent step (the "Generate" click), not at upload.
Match competitors' H2 structure and keyword usage, not their exact copy: "I don't copy the exact text, but you want to look at the most important sections like H2s… that's enough for AI to understand what you're going for."
Cut sections competitors don't have; reorder to match intent.
After publishing (post-publish checklist):
Verify the canonical URL is set (Ahrefs Toolbar → Indexability → "Self-canonical"). If not, ask Cursor to add it.
Check title/description are correct; refine against competitors (add numeric proof points like "27+ tools").
Confirm the page is in the sitemap and linked from the footer.
GSC → URL Inspection → Request Indexing for fast indexing (don't wait for Google to discover it).
Revisit in a few weeks with GSC query data; add backlinks + more internal links.
9.2 When the SERP wants a blog post, not a tool
If low-DR blog posts rank (see 7.2), build a blog post first even if your product is a tool. A tool page can help later, but match the guide/blog intent first.
9.3 Build an MDX blog system (Next.js)
Cursor prompt (verbatim template):
Add a blog to this Next.js app.
Use /blog and /blog/[slug].
Store posts as MDX files in web/content.
Use next-mdx-remote or a similar library to render posts.
Cache loaded posts.
Add:
- cover image support
- author block with [Author Name] and avatar
- table of contents from H2s
- CTA at the bottom
- sidebar CTA using the [product] upload form in mini format
- metadata, canonical URL, OG tags, and structured data
Implementation notes shown: MDX files in web/content/*.mdx, rendered async and not pre-rendered via next-mdx-remote, cached with Next.js "use cache"; cover image in public/; author block (name + avatar); auto TOC from H2s; two CTAs (bottom + sidebar) reusing the product's upload form in a compact "mini" variant.
Blog post requirements:
Target one keyword. Use it in title/H1/slug.
Slug = the bare keyword, nothing else./blog/linkedin-headshot, NOT /blog/how-to-make-an-amazing-linkedin-headshot-instantly. Never put years in slugs (so you can refresh 2026→2027 by editing only the title/description, keeping the URL stable). The title/description can be long/creative; the slug stays minimal.
Add internal links to the landing/tool page, and add links from other site pages back to the new post ("only if relevant"). Cursor prompt: add more links to our new blog as well from other pages throughout this site, only if relevant (in public).
Add screenshots and examples.
Brief the AI by pasting competitor URLs + their titles directly into the chat ("just copy the URL directly into Cursor").
9.4 Make AI content genuinely good - the 2-minute voice note technique
The moat is proof of work: real screenshots, your real opinions, real examples from your product, evidence a human actually used the tool. "Most people write a hundred sloppy AI blog posts without voice-prompting or adding a screenshot - and that stuff generally does not work at all."
The technique - before generating the post, record a ≥2-minute voice note (AI voice/dictation) explaining the topic in your own words. Include:
Your actual opinion / stated preference (e.g. "use a yellow-background avatar so people spot you in the feed").
Examples from your product; small details only you know.
Objections a reader might have; what competitors miss.
Which screenshots to take and where they go (narrate it).
Rewrite prompt (verbatim template):
Use this voice note and screenshots to rewrite the blog post.
Keep my opinions and examples.
Make it useful, not generic.
Add sections where the screenshots prove the point.
Avoid em dashes and generic AI phrasing.
Add internal links to the relevant product pages.
Workflow tips:
Parallelize: while Cursor is generating, take + annotate screenshots (a screenshot-beautifier tool - inset, arrows, backgrounds) and paste them back into the chat as attached images with narration.
Attach screenshots of the real product AND of real social proof (e.g. your own LinkedIn feed showing the yellow avatar with an arrow overlay).
Use a stronger model than the cheap default for production. Avoid em dashes / generic AI phrasing (do manual edits).
Provide product-specific value: real prompts, real pricing, internal links to /styles, "free credits on signup," a mini upload CTA.
Rule: "AI is useful for structure, but the moat is your proof of work. Screenshots, opinions, examples, and actual product use make the page hard to copy."
9.5 Listicles and the "$50k keyword"
Build list pages that deserve to rank. Use listicles when the SERP already rewards lists, the searcher wants options to compare, and you can add real criteria/examples/pricing/comparison.
The bar is set by the current #1. The winning "I Tested 30+ AI Headshot Generators" Medium post ranks because of undeniable proof of work no AI can fake: real signups/trials of every tool, the same input photos across all tools, real UI + pricing screenshots, comparison tables, an affiliate disclosure, and a dedicated review video per top pick. A thin one-screenshot-per-tool listicle (the instructor's own failed 2024 attempt) cannot compete.
Proven listicle title patterns (repeat across nearly all rankers):
The current year ("2026") - freshness.
The word "best."
"Honest review" framing (readers are skeptical of SEO).
"I tested N+ tools" - the "+" itself drives clicks ("there's more to see").
"Side by side comparison."
A number near the front ("16 Best…").
Distribution insight: publish on high-DR third-party platforms (Medium, Dev.to) - "anyone can post there and rank higher; you don't need to build backlinks, just make a very high-quality post." YouTube is now a first-class competing content type for "best of" queries (make your own "Top N" video, or email existing reviewers to include you - the instructor got his product "GenPPT" reviewed by YouTuber Artturi Jalli this way).
9.6 Parasite / social SEO (Reddit, Quora, LinkedIn)
When forum/social threads already rank for your keyword, participate:
Find an open (not archived) thread, reply as the founder with disclosure, keep it short and genuinely useful. Example reply: "I am the founder of headshot-generator.ai and it does exactly what you say. You can upload your own images here and make AI profile pictures quickly. Let me know if this works. 🙂"
Know the subreddit rules first (many ban external links & self-promo). If links are banned: strip the link, give real value, mention the product by name only, and add the actual link later as a comment once the post has aged (avoids spam filters).
You can also make your own ranking post (a listicle where you're #1) on Reddit/LinkedIn/Medium/Dev.to.
Distribute your own content: post it to LinkedIn (a well-reacted LinkedIn post helps it do well on Google) and Reddit, linking back to the blog post - real social signals + traffic help Google find it faster.
Caution: don't over-use your real account for repeated self-promo; expect removals on old threads.
10. Off-page SEO - backlinks & outreach
10.1 Mine competitor backlinks (Ahrefs)
Faster than SERP prospecting: copy a top competitor's existing backlinks.
Identify 2–4 closest real competitors from the SERP.
Ahrefs Site Explorer → Backlink profile → Backlinks.
Click "Best links: Only" and configure the filter:
- Follow status = Dofollow only (nofollow links aren't "connected").
- Backlink type = In content (links inside the main content body - not footer/header/image/form).
- Referring-domain DR ≥ 30.
- Referring-domain Traffic ≥ 500 (a domain can fake DR with spam but have zero real traffic - filter it out).
- Exclude known spammy domains = ON; exclude links from subdomains = ON.
- External links ≤ 200 (default).
Set grouping to "One link per domain" → a clean, deduplicated prospect list.
Sort/scan by Page traffic (descending) - prioritize referring pages that themselves get real organic traffic (they send real referral visitors, not just link equity), especially pages that rank top 10 for a money keyword (a mention there can be profitable within days).
Export the rest and mass-email via an outreach/enrichment tool; do the top prospects manually for better results.
Handling site types:
Listicles / "best of" → ask to be added to the list.
Single-topic articles → pitch a new tailored article/angle (e.g. "How real estate agents use an AI headshot generator to close more sales"), offer to send a draft.
Guest-post-mill / backlink-seller sites (dedicated "Write for us"/"Guest post" pages, ~800–1,200 word requirement, PayPal invoice ~$50–100, e.g. Metapress ~$80) → acceptable filler/volume, not top-tier links. Prioritize real pages with real page traffic instead.
For each prospect: read the referring page, find the author byline, find contact via About/Contact page or the author's LinkedIn (Message/DM as fallback).
Validation logic: since competitors rank with these exact backlinks, the links are pre-validated. "If you email a hundred of these people, many will respond and you'll get your first links." And you avoid paying middlemen for "shitty links."
10.2 Outreach from the SERP
The SERP itself is a list of outreach targets. Work through it - and keep going to page 2, 3… up to page 10 (better ROI than most tactics).
What to target: resource pages, listicles that include competitors (even a competitor's own blog listicle), articles mentioning your problem, pages with outdated/weaker recommendations, YouTube reviews, LinkedIn/Reddit posts.
Finding the person: byline → author profile → personal site (About/Projects/Contact) → X/Twitter bio links → LinkedIn contact info → any monetized booking link (e.g. topmate.io - sometimes the cheapest paid option, like a $2 priority DM or $6 blog review, is the most efficient guaranteed contact) → phone as last resort.
Email/outreach rules:
Lead with why your page helps THEIR reader. Never ask for a link with no context.
Keep it short. People know what you want.
Personalize with one real detail (their city, a project, a bio line) - 5 seconds of profile-reading avoids looking like a spammer.
Offer something concrete in return, tailored to what they want: cash, a backlink from another of your sites, a social boost/retweet, an affiliate commission, or a reciprocal listing ("I'll list you at #3 if you list me at #3" - works even with direct competitors).
Subject lines matter - personalize (the instructor used the Swiss-German greeting "Grüezi! 👋" for a Zurich-based target); avoid spammy subjects.
Sign with a real-person signal (a Twitter/X link is "the highest signal I'm a real person").
Expect low response rates even with effort; replicate the same personalized process across every ranker.
Verbatim example outreach email:
Subject: Grüezi! 👋
Hi there,
Saw you are from Zurich, I have been living in Switzerland and built https://magicspace.agency - we are based in Zug
Anyways, I built headshot-generator.ai and I saw [their article URL]
Would love to be featured here with my tool if possible
I can pay for this for sure, or offer something else in return like a link back to your site from one of our other sites or anything else you had in mind!
Cheers,
https://x.com/illyism
Negotiating with monetized affiliates: check if they already use affiliate links (?via=xxx). If they have none, don't lead with money - a feature request + reciprocity is enough. If they already earn from a competitor, you must beat their existing commission (e.g. offer an exclusive 50% vs. a competitor's public 30%), possibly plus a cash bonus/prepayment. Estimate the page's value first (Volume × CPC) so you know your ceiling - a $100 ask won't move someone making hundreds/day from an existing affiliate.
"Make your own listicle everywhere": don't only get into others' lists - publish your own "best of [category]" on your blog, LinkedIn, Reddit, Medium, Dev.to. Cross-link your own network of sites, and add affiliate links to competitors so you earn even when a reader picks a rival.
11. AI SEO - ranking inside AI answers
11.1 Google AI Overviews
AI Overviews raise the bar for "useful" content but don't remove SEO - the process is basically the same as SERP SEO: reverse-engineer what's cited, then replicate/improve it. Don't over-invest in buzzword formats (llms.txt files, Markdown-only, "AI-ready," structured data as a silver bullet) - they don't mainly determine citation.
How AI Overviews actually work (from Google's own sources panel):
Mentions matter more than links. You get cited because you're mentioned across the web, whether or not each mention is a hyperlink. The AI reads pages and understands what's said about a brand.
Google runs a background search, gathers sources, and feeds them as context/grounding into an LLM generation step. It may append freshness terms ("2026") and run multiple prompt variants - which is why the cited sources change between refreshes of the same query.
Typical source mix: a listicle, Reddit threads, Dev.to/Medium articles, and the brand's own site.
Output is a synthesized answer (Best-for / How-it-works / Pricing per tool), not one page copied verbatim.
Two-part strategy to get cited:
Make your own site's value proposition crystal-clear and specific. Generic copy ("powered by GPT Image 2") gives the AI nothing to cite. Mirror the AI Overview's own structure (Best for / How it works / Pricing) and state a real differentiator: built by X, faster/cheaper, most realistic, for teams vs. budget vs. speed, mobile-friendly, upload-your-own-images, a specific newer model, free/open-source, etc.
Get mentioned in the actual cited sources (the non-negotiable part). Audit each source in the sidebar for your query and ask: can I get listed/reviewed there? Classify each as: a contactable author/publisher (email/relationship), a community to post in (Reddit), a directory/listicle accepting submissions (look for "get listed"/"write for us"/"product review" pages), or a hard/closed source (big brand's owned editorial - deprioritize).
Content guidance for AI-shaped results: answer the question directly; use clear sections and definitions; add examples/data/product insight; keep claims specific and easy to cite.
11.2 Ranking across AI engines (ChatGPT, Perplexity, Gemini, Claude, Grok)
The same handful of source pages get cited across every engine - so research done for one engine largely transfers, but check each. For your target query, run it in each engine, open the sources panel, and open every cited page (same discipline as a Google SERP). Then get in via email / Reddit / YouTube-creator outreach, or publish your own page in the same proven format.
Per-engine behavior:
Google AI Mode - same engine as AI Overviews; may ask clarifying questions (team vs. individual, budget); site-count badge + source cards.
ChatGPT - tight ranked list (🥇🥈🥉, "Best for X"), right-side Sources panel; test in Incognito/temporary mode to see the default non-personalized answer.
Perplexity - "Best picks by use case," inline citation chips including YouTube videos as sources.
Claude - least likely to web-search by default (depends heavily on the prompt); in thinking mode it writes the most original synthesis (e.g. a "trained-model vs. zero-shot" framework) and flags source bias ("nearly every review is written by a competing tool or affiliate").
Grok - most aggressive searcher; runs many queries and browses official brand/pricing pages directly → your own pricing/product pages are a direct citation surface. Its thoroughness makes it easier to influence via comparison pages ("InstaHeadshots vs Aragon").
General rules: reasoning/"thinking"/"expert" modes issue multiple queries and cross-reference (more/different citation opportunities); treat Reddit threads and YouTube videos as citable sources; replicate the winning format (Best-for verdicts, spec blocks, use-case breakdowns, explicit final recommendation); disclose affiliate links (still gets cited). Two monetization angles from AI-source content: link to the leader for affiliate commission, or position your own product as the better alternative.
12. Building a long-term moat
The hardest-to-break moat is cross-platform citation consensus: being mentioned everywhere (blogs, listicles, YouTube, Reddit, LinkedIn) so that both Google's algorithm and AI engines converge on recommending you because everyone else already does. It's self-reinforcing - once you're the consensus pick, every new human- or AI-written article feels compelled to include you (or it "doesn't have enough info compared to everyone else").
Case study: Aragon.ai dominates "best AI headshot generator" across Grok, Google organic, and AI Overviews - not necessarily because the product is best, but because of distribution. Its lever: an affiliate program → many people write blog posts about it → those feed listicles → listicles feed AI/SEO results → top-10 dominance.
The moat recipe (do's):
Run an affiliate program (the main leverage) - turns others' content into your marketing, paid only on conversion (vs. ongoing ad spend).
Email people to review you; pay people to review you and include you in listicles.
Be present across all platform types at once: YouTube, Reddit, listicles, LinkedIn.
Build web presence overall, and start as early as possible - the moat compounds, so an early lead becomes very hard for later entrants to close.
Payoff: "basically money for free" (you pay affiliates a little on conversion) and far more sustainable than long-term Google Ads spend.
Broader moat framing (from the course rules): move beyond basic articles. Real moats = original data, free tools, templates, examples from your product, and pages that improve as users/content grow. Rule: if anyone can generate the same page in one prompt, it is not a moat. Verify by testing your own "best [category]" query across an AI chatbot + Google organic + AI Overview to see who owns the consensus and who cites them.
13. Appendix A - Tools glossary (what to use and how)
The foundation. ~80% of GSC work is the Performance tab. Free.
Cloudflare
DNS + one-click GSC domain verification (auto TXT record via Domain Connect)
Used for the "Start Verification → Authorize" flow.
Keywords Everywhere
~$12/yr Chrome/Firefox extension; overlays Volume/CPC/Competition on the SERP + autosuggest; sidebar modules; Top Pages Finder, Organic Ranking Checker, clustering
The cheap, always-on keyword tool. Credit-based.
Ahrefs
Primary tool: SEO Toolbar (SERP overlay), Site Explorer (Top Pages, Backlinks), Site Audit (170+ technical checks)
Best data. Try ≥1 month; free tier via Ahrefs Webmaster Tools/"Ahrefs Free" gives Web Analytics + Site Audit + Site Explorer. Set country = US, "Best links: Only."
Cursor
AI code editor (Agent mode) - builds sitemaps, robots.txt, landing pages, blog systems; fixes Ahrefs issues from screenshots/CSV; deploys
Use a strong model (GPT-5.x / Claude Opus) for real content; cheap "Composer 2.5 Fast" only for trivial tasks. Drag folders in for context.
ChatGPT / Claude / Gemini / Perplexity / Grok
AI answer engines to rank inside (AI SEO); also for interpreting GSC issues, clustering keywords, drafting
Same source pool across engines; open the sources panel and target those sources.
Screenshot beautifier (e.g. "Snapper"-type)
Annotate screenshots (inset, arrows, backgrounds) for blog/social proof
Proof-of-work content.
Raycast
Clipboard/launcher - paste screenshots into composers
Utility.
Semrush, Google Ads Keyword Planner, Google Trends
KD (Keyword Difficulty) - 0–100 estimate of how hard to rank top 10.
TP (Traffic Potential) - total traffic available across all keyword variants a top page could capture.
Clicks (toolbar) - estimated organic clicks available for a keyword.
DR (Domain Rating) - 0–100 domain backlink strength (established sites ~50–70; new sites very low).
UR (URL Rating) - page-level backlink authority.
AR (Ahrefs Rank) - global domain rank number.
BL - total backlinks. RD - referring (unique) domains (more meaningful than raw BL).
KW - number of keywords a domain/page ranks for.
ST - estimated organic search traffic.
Traffic (Top Pages) - estimated organic traffic to a specific URL.
Value - estimated $ value of that traffic ≈ traffic × CPC of ranking keywords.
Words - page word count.
Keyword value - Volume × CPC = approximate total monthly ad spend through the keyword's SERP.
15. Appendix C - Prompt library (verbatim / templates)
Sitemap (initial):
Add a sitemap.ts file for this Next.js app.
Include all public static routes and any public dynamic routes.
Only include canonical public URLs.
Do not include private, auth-only, test, duplicate, or admin URLs.
Keep it simple: URL only unless lastModified is already meaningful.
Sitemap (strip metadata):just keep the url, no changeFrequency, priority or lastmod (except if set)
Fix an Ahrefs technical issue: drop the issue screenshot + affected-URLs CSV into Cursor and ask it to identify the cause and patch the code. (For AI-flagged content, the whole prompt can be too much ai.)
Cluster competitor keyword export:
Here are competitor top pages and their ranking keywords.
Cluster these by search intent.
Return: recommended page slug, main keyword, related keywords, search intent,
why this page is worth building, and whether it should be a landing page,
blog post, tool, listicle, or social/parasite play.
Build a SERP-matched landing page:
Create a public page at /[keyword-slug].
Target keyword: [keyword].
Use the SERP pattern from these screenshots:
exact keyword in title/H1, free/tool-first positioning, upload form above the fold,
examples, how-it-works section, styles, FAQ, clear CTA.
Add canonical URL, metadata, OG tags, and internal links where relevant.
Build an MDX blog system:
Add a blog to this Next.js app. Use /blog and /blog/[slug].
Store posts as MDX in web/content. Use next-mdx-remote (load async, not pre-rendered), cache with use cache.
Add: cover image, author block ([name] + avatar), table of contents from H2s,
bottom CTA + sidebar CTA reusing the [product] upload form in mini format,
metadata, canonical URL, OG tags, structured data.
Add internal links to a new post from the rest of the site:
add more links to our new blog as well from other pages throughout this site, only if relevant (in public)
Rewrite AI content with a voice note + screenshots:
Use this voice note and screenshots to rewrite the blog post.
Keep my opinions and examples. Make it useful, not generic.
Add sections where the screenshots prove the point.
Avoid em dashes and generic AI phrasing.
Add internal links to the relevant product pages.
Parasite-SEO founder reply (Reddit/Quora):
I am the founder of [site] and it does exactly what you say. You can upload your own
images here and make [result] quickly. Let me know if this works. 🙂
Outreach email skeleton:
Subject: [personalized, non-spammy]
Hi there,
[one personal detail you found about them]
I built [your site] and saw [their exact article URL].
Would love to be featured here if possible.
I can pay for this, or offer something in return - a link back from one of our other sites,
a retweet, an affiliate commission, or anything you had in mind!
Cheers, [your X/Twitter link]
16. Appendix D - Checklists
Technical foundation (once):
[ ] GSC property added (Domain type) and verified.
[ ] sitemap.ts generating only canonical public URLs; trailing-slash consistent; submitted in GSC.
Tactics change; the meta-skill is reading what Google/AI currently reward by studying the SERP directly.
End of knowledge base. Source: "Ship or Die - SEO" by Ilias Ism (24 videos), extracted from transcripts + on-screen frames. Worked examples use the real headshot-generator.ai product and its live SERP/tool data as captured in the course.