Prompt Ops for SEO: How I Took a Blog to Top-3 on 40 Queries Without a Link Budget or Content Farm

Prompt Ops for SEO: How I Took a Blog to Top-3 on 40 Queries Without a Link Budget or Content Farm

Four months ago our blog was invisible. Not penalized, not deindexed — just flat. Impressions crawled along at a few hundred a week, average position hovered around 28, and the few clicks we got came from branded queries. We had no link budget, no content team, and no appetite for a content farm that pumps out 200 thin pages a month. What we did have was an AI agent, a spreadsheet, and a willingness to treat prompts as infrastructure rather than magic tricks.

This is not a listicle of "10 ChatGPT hacks." It is the actual prompt set I used, in the order I used it, with the real inputs and outputs. Some of these prompts are short. Some are long system-style instructions. All of them are things I still run today. Where a prompt touches a standard or a spec, I point to the official source, because prompt engineering without ground truth is just confident guessing.

The result, four months in: top-3 positions on 40 queries, roughly 70% of which are commercial-intent or comparison queries. No paid links. No guest-post farm. One writer (me) plus an AI agent doing the heavy lifting on research, clustering, and audits. Below is the workflow.


The starting point: what was actually broken

Before writing a single prompt, I ran a five-minute diagnostic. If your blog is stuck, the problem is almost never "we need more content." It is usually one of four things: your pages target overlapping intents (cannibalization), your internal linking is a random graph, your technical foundation leaks crawl budget, or your pages don't demonstrate first-hand experience — the first E in E-E-A-T.

I pulled three things from Google Search Console (Performance report, Pages report, and the Sitemaps section) and one thing from Screaming Frog (free tier, 500 URLs). That was my entire dataset. Here is what it showed:

Signal Value at start What it meant
Average position 27.8 Page 3 territory, invisible
Queries with impressions 1,140 Demand existed, relevance didn't
Pages with clicks 9 9 pages carried the whole site
Internal links per page (median) 2 Almost no link equity flow
Indexed pages 61 Crawl budget mostly wasted

The diagnosis was clear: we had demand, we had pages, but the pages were not organized into topic clusters and the internal linking was effectively absent. That is a structural problem, and structure is exactly what prompts are good at.


Prompt 1 — The intent classifier (run before anything else)

Most keyword tools give you volume and difficulty. Almost none give you intent, and intent is what decides whether a page should exist. I feed every raw keyword through this prompt first.

System prompt:

You are a search intent classifier. For each keyword, output exactly one label:
INFORMATIONAL, COMMERCIAL, TRANSACTIONAL, NAVIGATIONAL, or MIXED.
Rules:
- If the SERP would show a product page or pricing, label COMMERCIAL or TRANSACTIONAL.
- If the SERP would show a guide, definition, or tutorial, label INFORMATIONAL.
- If the query contains a brand name and the user likely wants that brand's site, label NAVIGATIONAL.
- If two intents are genuinely balanced, label MIXED and explain in one sentence which page type should win.
Output as a Markdown table: keyword

| intent | recommended page type | one-line rationale.
Do not invent search volume. Leave volume blank if not provided.

User input (real example):

keywords:
- "seo prompts"
- "best ai prompts for seo"
- "how to cluster keywords with ai"
- "screaming frog vs sitebulb"
- "asibiont blog"

Output (trimmed):

keyword intent recommended page type rationale
seo prompts MIXED pillar guide Both "what are they" and "give me a list" — pillar covers both
best ai prompts for seo COMMERCIAL comparison/listicle "best" signals evaluation intent
how to cluster keywords with ai INFORMATIONAL tutorial "how to" is a process query
screaming frog vs sitebulb COMMERCIAL comparison "vs" is a head-to-head evaluation
asibiont blog NAVIGATIONAL homepage/blog index Branded query

Why this matters: without it, you write a tutorial for a query that wanted a comparison page, rank on page 2, and blame the algorithm. Intent mismatch is the single most common reason a technically fine page never breaks into the top 3.


Prompt 2 — Semantic clustering that respects SERP overlap

Classic keyword clustering groups by string similarity. That is wrong. Two keywords can share zero words and still belong on the same page if their SERPs overlap. The correct grouping signal is SERP overlap, not token overlap.

Prompt:

You are an SEO clustering assistant. I will give you a list of keywords with their top-10 SERP URLs.
Group keywords into clusters where a single page could rank for all members without being thin.
Rules:
- Two keywords belong together if 4+ of their top-10 URLs are identical.
- If overlap is 2-3, keep them separate but note "adjacent."
- Name each cluster with a 2-4 word topic label.
- Output: cluster name

| member keywords | suggested URL slug | primary keyword.
Do not invent SERP URLs. Use only what I provide.

Real input:

"keyword research ai" -> [url1, url2, url3, url4, url5, url6, url7, url8, url9, url10]
"ai keyword research tool" -> [url1, url2, url3, url11, url5, url6, url7, url8, url9, url10]
"how to do keyword research with ai" -> [url1, url2, url3, url4, url5, url6, url7, url8, url9, url10]

Here the first and third share all ten URLs (overlap 10). The second shares eight. All three collapse into one cluster. A naive string-clusterer would have split them across three pages and created cannibalization before I'd written a word.

Output:

cluster name members slug primary
AI keyword research workflow all 3 /ai-keyword-research keyword research ai

One page, one intent, one URL. That is how you avoid competing with yourself.


Prompt 3 — The content brief generator (with real entities, not fluff)

Once a cluster exists, I generate a brief. The key constraint: the brief must name the entities Google's NLP expects, not generic headings like "Introduction" and "Benefits."

Prompt:

You are an SEO content strategist building a brief for a single page.
Inputs: primary keyword, cluster members, target intent, competitor headings (I will paste them).
Output:
1. Working title (<=60 chars) and meta description (<=155 chars).
2. H2 outline that covers every subtopic competitors cover PLUS one subtopic they all miss.
3. A list of 8-12 named entities (tools, standards, people, metrics) that must appear naturally.
4. Three questions real users ask (from People Also Ask style patterns) that the page must answer.
5. A "what NOT to do" note: one common mistake for this topic.
Do not fabricate statistics. If you reference a standard, name it exactly (e.g., RFC number, ISO number) and mark it for verification.

Why the entity list matters: Google's systems (documented in the Search Quality Rater Guidelines, available at https://static.googleusercontent.com/media/guidelines.raterhub.com/en//searchqualityevaluatorguidelines.pdf) assess whether a page demonstrates genuine expertise. Naming the actual tools, standards, and metrics is how a page signals that. A page about "technical SEO" that never mentions robots.txt, sitemap.xml, canonical, or Core Web Vitals is a page that a rater — and increasingly a model — will treat as shallow.


Prompt 4 — Technical audit triage (the one that saved crawl budget)

We had 61 indexed pages. Roughly a third were parameter URLs and tag archives. This prompt takes a crawl export and produces a prioritized fix list.

Prompt:

You are a technical SEO auditor. Input: a CSV export from a crawler with columns:
URL, status_code, title, meta_robots, canonical, word_count, internal_inlinks, response_time_ms.
Tasks:
1. List URLs that should be noindexed or consolidated, with the exact reason.
2. Flag duplicate titles and near-duplicate content (same word_count ballpark, similar title).
3. Identify orphan pages (internal_inlinks = 0).
4. Rank the fixes by expected impact: High / Medium / Low.
Output a Markdown table: URL

| issue | recommended action | impact.
Do not recommend anything that violates robots.txt semantics. If unsure, say "verify manually."

Real finding from our crawl:

URL issue action impact
/blog?tag=ai thin archive, duplicate title noindex,follow High
/blog/page/2 canonical points to itself set canonical to /blog Medium
/old-post-2019 orphan, 120 words 301 to closest cluster High
/blog/post-x duplicate title with /blog/post-y rewrite title Medium

That single pass removed 14 low-value URLs from the index and freed crawl budget for the pages that actually mattered. Note the noindex,follow syntax — that is the correct directive format per the HTML spec and Google's documentation at https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag. Getting this wrong (e.g., writing noindex: true in a meta tag) does nothing.


Prompt 5 — Internal linking architect

This is the highest-ROI prompt in the entire set. Internal links are the only "links" you fully control, and most blogs treat them as an afterthought.

Prompt:

You are an internal linking strategist. I will give you a list of pages with titles and the primary keyword each targets.
Task: propose internal links so that every page receives at least 3 contextual inlinks from topically related pages.
Rules:
- Anchor text must be descriptive and varied (not "click here", not the exact same anchor every time).
- Never link two pages that target the same intent cluster (that creates cannibalization).
- Prefer linking from higher-authority pages (more inlinks) to lower ones.
Output a table: source page

| target page | suggested anchor text | placement (which H2).

Real output snippet:

source target anchor placement
/ai-keyword-research /keyword-clustering "grouping keywords by SERP overlap" H2: Clustering
/technical-audit /ai-keyword-research "once you know which queries matter" H2: Triage
/eeat-checklist /technical-audit "the foundation a rater checks first" H2: Experience

Notice the anchors are natural phrases, not keyword-stuffed. Google's own guidance on links (https://developers.google.com/search/docs/crawling-indexing/links-crawlable) is clear that descriptive anchor text helps users and search engines understand the target. Keyword-stuffed identical anchors across 50 pages is a pattern that looks manipulative.


Prompt 6 — E-E-A-T experience injector

Google added the extra "E" (Experience) to E-E-A-T in December 2022, per the Search Quality Rater Guidelines update. The practical implication: pages that show first-hand experience outperform pages that only summarize. This prompt rewrites generic sections to surface experience — but only from real inputs I provide.

Prompt:

You are an editor improving E-E-A-T signals. Input: a draft section and a list of REAL facts I supply (things I actually did, tools I used, numbers I measured).
Task: rewrite the section so that first-hand experience is visible, without inventing any fact.
Rules:
- Replace generic claims with specific, verifiable details from my list.
- Keep the reading level accessible; explain jargon in parentheses on first use.
- Do not add statistics I did not provide.
- If my list is insufficient to make the section credible, say so and list what I should measure.

This is the prompt that produces sentences like "In our crawl of 61 URLs, 14 were thin archives" instead of "many sites have thin content." The difference is the entire point of the extra E.


Prompt 7 — The "what's missing" gap finder

After drafting, I run a gap check against the top-3 ranking pages for the cluster's primary keyword. This is not about copying — it is about finding the subtopic everyone skipped.

Prompt:

You are a content gap analyst. Input: my draft outline and the H2/H3 outlines of the 3 top-ranking pages (pasted).
Output:
1. Subtropics all three competitors cover that I miss.
2. Subtropics none of them cover that would genuinely help a user (max 2).
3. Any claim in my draft that is unsupported and should be cut or sourced.
Be blunt. Do not pad the list.

In our case, the gap was "how to verify a prompt's output against ground truth" — none of the top three covered it, and it was exactly the differentiator that earned the page its links (organic, unsolicited).


Prompt 8 — Schema markup generator (with validation step)

Structured data does not directly boost rankings, but it improves how your page appears and clarifies entities. The critical rule: generate valid JSON-LD and validate it. Do not trust the model's output blindly.

Prompt:

You are a structured data assistant. Generate JSON-LD for an Article (or FAQPage) based on the content I paste.
Rules:
- Use only schema.org types that exist (Article, BlogPosting, FAQPage, BreadcrumbList, Organization).
- Use the exact property names from schema.org.
- Output the JSON-LD block, then a checklist of properties I must fill with real values.
- Do not invent @id values or fake dates.

Real output (trimmed):

{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "Prompt Ops for SEO",
  "datePublished": "2026-09-20",
  "author": { "@type": "Person", "name": "..." }
}

Always validate at https://validator.schema.org/ and the Rich Results Test at https://search.google.com/test/rich-results before shipping. A single typo in a property name silently invalidates the block.


Prompt 9 — The cannibalization detector

This is the prompt that catches the problem before it costs you a ranking. I run it monthly across the whole site.

Prompt:

You are a cannibalization auditor. Input: a list of pages, each with its primary keyword and the queries it currently ranks for (from Search Console).
Task: find pairs of pages that rank for the same query in positions 5-30.
Output a table: query

| page A (position) | page B (position) | recommended merge or redirect.
Explain in one line why merging helps in each case.

Real finding: two posts both ranked for "ai content brief" at positions 11 and 19. Neither could break into the top 5 because they split signals. We merged them into one, redirected the weaker URL with a 301, and the combined page moved to position 4 within three weeks. That is the compounding effect of fixing structure instead of adding volume.


Prompt 10 — The 301 redirect mapper

When you merge or delete, redirects must be precise. Redirect chains and loops waste crawl budget and dilute signals.

Prompt:

You are a redirect mapping assistant. Input: old URLs and new URLs.
Task: produce a 1:1 mapping table with the most relevant target for each old URL.
Rules:
- Never chain redirects: A -> B -> C should be A -> C.
- Never redirect to a 404 or to the homepage as a catch-all.
- For deleted content with no equivalent, recommend 410 Gone, not 301.
- Output: old URL

| new URL | status code | rationale.

The 410 Gone distinction matters. Per Google's documentation (https://developers.google.com/search/docs/crawling-indexing/http-network-errors), a 301 signals "moved permanently" and passes signals, while 410 signals deliberate removal and is processed faster for deindexing. Using 301 for everything is a common, costly mistake.


The four-month timeline and what actually moved

Month Focus What we did Observed effect
Month 1 Structure Intent classification, clustering, technical triage, redirects Indexed pages down from 61 to 47; impressions flat
Month 2 Content Briefs, E-E-A-T rewrites, internal linking Average position 27.8 to 19.4
Month 3 Gaps Gap finder, schema, cannibalization merge First top-10 positions appear
Month 4 Consolidation Monthly cannibalization pass, anchor variation Top-3 on 40 queries

I want to be careful with numbers here, because SEO case studies are full of invented precision. What I can state honestly: the direction was consistently positive month over month, the biggest single jump came from the cannibalization merge in month 3, and the top-3 positions concentrated in clusters where we had both a strong pillar and a genuine experience angle. I did not measure a clean causal percentage for each prompt, and I would distrust anyone who claims to.


Why this works (and where it does not)

Three principles sit under all ten prompts.

First, ground truth over generation. Every prompt that touches a standard, a status code, or a schema type is anchored to an official source. If a prompt asks the model to reference a spec, name the spec exactly and verify it. A hallucinated property or a fake RFC number destroys credibility faster than any ranking penalty.

Second, structure before volume. Nine of these ten prompts are about organizing what already exists. The instinct when traffic is flat is to publish more. The data almost always says the opposite: you have demand, you have pages, they are just not connected.

Third, experience is not optional. The extra E in E-E-A-T is the one signal you cannot fake with a prompt. The prompts here help you surface experience you already have — they cannot manufacture it. If you have not done the work, the honest move is to do a small piece of it and write about that.

Where this does not work: brand-new domains with zero authority will still need time, and no prompt set replaces genuine topical depth in a competitive niche. Prompts compress the research and audit work; they do not compress the trust-building.

If you want to run this workflow yourself, start with Prompt 1 and Prompt 5. Intent classification stops you from writing the wrong page, and internal linking is the cheapest ranking lever you own. Then add the technical triage once you have a crawl. The rest compound from there. And if you are building these workflows into an agent, keep the ground-truth rule: verify every standard, every status code, every schema type against the official documentation before it ships.

← All posts

Comments