Playbooks/Discovery Optimization/Search Performance Analysis

Search Performance Analysis

seogoogle search consoleyour own data

Search Performance Analysis is a Discovery Optimization technique for finding SEO opportunities in the search data you already have. Most SEO advice starts with a keyword tool and a volume estimate for a term you don't rank for yet. This technique starts at the other end: the impressions, clicks, CTR, and position already sitting in your Google Search Console, including queries you're surfacing for at position 40 that nobody told you about. It is the part of SEO that needs no new keywords and no new content. You are optimizing what you already rank for.

You don't need volume estimates to begin. You need to read the data your own site is already producing. This is the search-data side of Discovery Optimization; the answer-engine side starts with Category Visibility.

When to use it#

Reach for Search Performance Analysis when:

  • You have a site with some Search Console history. Even a few hundred impressions is enough.
  • You see queries you rank for but earn no clicks on, meaning high impressions and a CTR near zero.
  • You have content that sits adjacent to a real query but doesn't quite match what the searcher wants.

It is the cheapest technique in the guide, because the input is free. You already paid for it by publishing.

The method: the impression, intent, conversion loop#

1
Read the data you already own

Open the Search Console performance report (or Rampify's search performance) and sort your queries by impressions, ascending CTR. You are hunting for queries with real impressions and a click-through rate near zero, and especially queries you didn't know you ranked for at all. These are demand signals you already hold. Don't filter by volume. Filter by surprise.

2
Triangulate intent

For each candidate, ask the load-bearing question: does the page Google is serving actually match what this searcher wants? High impressions with a CTR near zero is rarely a title-tag problem. It is usually an intent problem. You rank, but for the wrong shape of result. Someone searching "X checker" wants a checker; if Google is serving them your how-to blog post, they won't click no matter how good the snippet is.

Intent Reclamation

The single highest-leverage move here: when you find high impressions paired with a CTR near zero, you have found a page that is ranking on the wrong intent. You don't need to win a new keyword. You need to reclaim the impressions you already have by giving them the page they were looking for.

3
Restructure to match, and preserve the equity

Rebuild the content into the shape the query wants. A blog post becomes a use-case page. A generic overview becomes a comparison. A docs stub becomes a tool page. Then 301-redirect the old URL to the new one so the ranking and impressions you already earned carry over instead of starting from zero. This is the step people skip, and it is why their rewrite tanks. A fresh URL throws away the signal you spent months accumulating.

4
Add the conversion path

A page that ranks but cannot convert is vanity. Give the restructured page an unambiguous next step, a "Get started" action that routes to your signup or activation flow. The whole point of working the signal is to turn it into an outcome, so build the outcome in before the traffic arrives.

5
Measure the loop closing

Watch the right metric. Rank and impressions tell you Google is serving the page. Conversions tell you the loop closed. Track which landing pages actually produce signups, not just which ones rank, and let that decide where you look next. (As you'll see below, the conversions can arrive even when the classic clicks don't.)

Worked example: /use-cases/claude-seo-checker#

This is the page that prompted the technique, a real and verifiable run of the loop on Rampify's own site.

1. The faint signal. In December 2025 the query "claude seo checker" showed up in Search Console with 27 impressions at average position ~44.9, page five, a handful of impressions, easy to ignore. We didn't ignore it.

2. The intent diagnosis. The page Google was serving for it was a blog post about Claude Code subagents for blog writing. Over the following months that post climbed to 1,009 impressions, at 0% CTR. Google was convinced we were relevant to "claude seo checker," but the result was a how-to article and the searchers wanted a checker. Textbook wrong-intent ranking.

3. The restructure. We rebuilt the content as a purpose-built use-case page, /use-cases/claude-seo-checker, framed as "here is the checker," and 301-redirected the old blog URL to it so the roughly 1,000 impressions of equity came along.

4. The conversion path. The new page leads with a "Get started" action into the free signup.

5. The result. As Google re-served the intent-matched page, it climbed to roughly 7,916 impressions over 28 days and now ranks top-5 across the whole cluster: position ~2 on "claude seo checkers," ~4 on "claude seo checker," and in the top handful on dozens of tool, tracker, and audit variants. To date the page has produced 6 free-signup conversions.

The AEO twist: you don't have to win the click

Here is the counterintuitive part. Even at the top of the rankings, this page's Google CTR is still about 0.1%. Almost nobody clicks the organic result. The conversions come from the blend of organic and direct traffic, and a large share of that direct traffic is people who asked an AI assistant "best claude seo checker," got pointed here, and arrived without a tracked click. Search Performance Analysis bought us the ranking and the AI-recommendation surface, and on today's web, owning those converts even when the classic click never happens. That is the bridge between traditional search and AI search in a single page.

Scale the win into a cluster#

There is one more move, and it is where the compounding happens. Once a page wins, treat it as a template. The claude-seo-checker win became the pattern for a family of sibling use-case pages, one per platform, each the same restructure aimed at a different query. Combined, the cluster has produced 9 conversions (claude-seo-checker 6, cursor-seo 2, windsurf-seo 1), not just the original page's 6. One winning template, compounding across a family.

Scale the template, not the intent

One rule, learned the hard way on our own cluster: every page you add must own a distinct query intent. We once had a Claude Code page that drifted into the same "claude seo" queries the winner already owned. Instead of adding reach, it cannibalized: 2,750 impressions stuck at position 40, zero conversions, and four pages quietly competing for "seo software for claude." We folded it back into the winner. If a new page targets a query an existing page already wins, that is one page too many, not one more win.

The conversions column on your Pages tab is how you tell the siblings apart: which ones actually convert versus which just rank. Scale the template only where the conversions follow.

How Rampify does each step for you#

This is a manual loop you can run by hand. Rampify shortens every step:

  • Read the data. get_search_performance (and per-page intelligence) surface your impressions, CTR, and the queries you rank for, so the faint signals come to you instead of you scrolling Search Console. Sort its pages by impressions to include the ones people see but never click.
  • Triangulate intent. The Google Search surface and the traffic Pages tab flag the tell-tale pattern, a striking-distance rank with weak CTR, so wrong-intent pages are highlighted rather than hunted. Each opportunity get_search_performance returns names the pages Google serves for the query, so you see which page holds the wrong intent, and when two of your pages compete for one query.
  • Restructure and preserve equity. Rampify's opportunities are redirect-aware, so once you 301 a page it stops re-flagging the old URL and tracks the equity moving to the new one.
  • Add the conversion path and measure. The traffic Pages tab carries a conversions column beside impressions and CTR, so you can rank your landing pages by what actually converts and watch the loop close. Your AI tool gets the same numbers: get_search_performance with sort_by: "conversions" ranks pages by conversions, and its sections summary compares whole templates (your use-case pages against your blog, say) by conversions per search click. That is how we know this page produced six signups.

The fastest way to start is to connect Search Console and ask your AI tool, through the Rampify MCP, where your wrong-intent impressions are.

Run it on a schedule#

Run the harvest every week in Claude. It reads your Search Console queries, finds the striking-distance ones you don't track yet, and proposes keyword clusters and content specs for them. It writes nothing: you create the ones you want. Launch the builder below: your AI resolves your project over MCP, asks how often and where the report should go, and hands back Instructions to paste into claude.ai → Routines → New routine.

Instructions — template
You are a scheduled weekly agent running Rampify's Search Performance Analysis: you read Google Search Console queries for the project and propose the best untracked ones as keyword clusters and content specs. The audience is the founder, who decides what to create. You create nothing yourself.

Project ID: {{PROJECT_ID}}
Domain: {{DOMAIN}}
Client ID: {{CLIENT_ID}}

The Rampify MCP server is attached. Run unattended start to finish.

1. Pull search queries.
   - Call get_search_performance (project_id={{PROJECT_ID}}, last 28 days) and read the full query list, including the ranking / CTR opportunity queries.

2. Find untracked opportunities.
   - Call get_keyword_clusters (project_id={{PROJECT_ID}}, detail "full") to see every keyword already tracked, clustered or not.
   - From the GSC queries, keep only those that are ALL of:
     - getting real impressions: at least {{MIN_IMPRESSIONS}} over the 28 days,
     - in the striking-distance band: average position roughly 5 to 20, where a small gain actually moves clicks,
     - NOT already in a cluster or tracked keyword.
   - Rank the survivors by impressions and keep the top {{MAX_OPPORTUNITIES}} so a run never floods the queue.

3. Validate.
   - Call lookup_keywords on the shortlist to confirm search volume. Drop zero-volume noise.

4. Propose, don't create.
   - Group related queries into proposed clusters (one per intent theme; name it for the theme).
   - For each proposed cluster worth an article, describe the content spec you'd file: the angle, the target queries, and the search intent.
   - Don't call create_keyword_cluster, create_content_spec or any other tool that writes. The founder creates the ones they want (they can ask their AI to).

5. Report.

## Output

A markdown report, under 500 words, with these sections in order:

### What you rank for but don't track
The untracked striking-distance queries you found, each with its 28-day impressions and average position.

### Proposed clusters
Each proposed cluster: name and the queries it would group.

### Proposed content specs
Each proposed content spec: title, the cluster it serves, the angle, and the queries it targets. End with one line the founder can paste into their AI tool to create the ones they want.

### Skipped
One line: how many queries were skipped because they are already tracked or too thin.

## Delivery

{{DELIVERY}}

## What this routine writes

Nothing. It reads your Search Console data and tracked keywords and proposes; you create what you want. The only external action is delivery, via your own connector.

## Constraints

- Read only: never call create_*, update_*, delete_*, or anything that publishes.
- Respect the cap of {{MAX_OPPORTUNITIES}} opportunities per run.
- Never construct dashboard URLs by hand. Always use the dashboard_url field a tool returns. URLs use client_id, not project_id.
- Stay under 500 words for the whole report.

Read your own search data

Connect Google Search Console and let Rampify surface the impressions you already own, the wrong-intent pages quietly waiting to be reclaimed.

Start free