---
title: "CTR optimization report | SEO Skill"
description: "Find high-impression Search Console queries with weaker CTR than expected for their position. Review the real result before rewriting a snippet."
canonical: "https://seoskill.dev/docs/reports/ctr-underperformers"
language: "en"
---

# CTR optimization report

Find titles and snippets that may be underselling pages with useful rankings. The expected CTR is a review benchmark, not a Google target or a forecast of extra clicks.

## Install and run the report

Install the CLI once, then run `seo start` to connect your site and Google data. After setup you can run this report yourself or ask your agent to run it.

Install the SEO CLI globally.

```
npm i -g seo
```

Run setup after installation.

```
seo start
```

Find high-impression queries with weaker CTR evidence.

```
seo ctr-underperformers --project example
```

## What you get from this report

Find high-impression Search Console queries with weaker CTR than expected for their position. Review the real result before rewriting a snippet.

Best for

You need a limited list of high-impression rows for title and snippet investigation.

Needs

Returned Search Console query rows

You get

Find high-impression Search Console queries with weaker CTR than expected for their position. Review the real result before rewriting a snippet.

Use next

Build a content optimization brief

Every report follows the same rules for missing data and outside estimates.[See how report data works](https://seoskill.dev/docs/reports#how-report-data-works).

## What you need before you run it

The report uses the information below. Optional sources are only used when you ask for them.

### Returned Search Console query rows

Provides impressions, clicks, CTR, average position, dates, and property scope.

### Documented CTR expectation

Defines the position-aware benchmark and minimum evidence used to create the review set.

## Use a different report for these jobs

These jobs need a different report or a manual review.

[

### The main opportunity is queries averaging positions 11 to 20 rather than weak CTR at an existing position.

Run second-page opportunities. It groups the returned page and query evidence near page one without treating the average position as a fixed rank.

Second page SEO report

](https://seoskill.dev/docs/reports/second-page)[

### You need to know whether changing a title or snippet actually improved clicks or CTR.

Record and measure the change across matched Search Console windows. It adds before-and-after evidence, but it still cannot isolate the edit from demand, ranking, SERP, or seasonality changes.

SEO change measurement

](https://seoskill.dev/docs/reports/measure-change)

## Use the report with an agent or in code

The command above is enough for most work. These options let an agent, script or application run the same report with explicit input and structured output.

### CLI

Use the report catalog when an agent, script or CI job needs predictable JSON instead of the normal terminal output. Check the current input first, then run the report with the validated parameters.

Check the current input before the agent or script runs the report.

```
seo reports describe ctr-underperformers --json
```

Once the input is valid, run the report through the report catalog.

```
seo reports run ctr-underperformers --params '{"site":"sc-domain:example.com","minImpressions":250,"includeBrand":false}' --json
```

### MCP

An MCP agent follows the same two-step flow. It inspects the current schema, fills the required fields and only then runs the report.

Ask the MCP server for the current report input.

```
{
  "id": "ctr-underperformers"
}
```

Run the report after the agent has checked and filled the input.

```
{
  "id": "ctr-underperformers",
  "params": {
    "site": "sc-domain:example.com",
    "minImpressions": 250,
    "includeBrand": false
  }
}
```

### TypeScript

Install the package in a Node 22 project when your application needs to run the report directly. The result includes the same evidence, warnings and limits returned through the CLI and MCP server.

Add the SEO package to your project.

```
npm install seo
```

Run the report from your TypeScript application.

```
import { executeReport } from 'seo/mcp'

const result = await executeReport(
  'ctr-underperformers',
  {
  "site": "sc-domain:example.com",
  "minImpressions": 250,
  "includeBrand": false
},
)

console.log(result)
```

## What to do next

Inspect the live search result and query intent before rewriting a title or description. Record the change, leave the page long enough to collect comparable data and check the same query set again.

1.  01Use content optimization for a supported page-level brief.
2.  02Record and measure any title or snippet change instead of forecasting clicks.

## Related reports

[

Build a content brief from one page, its Search Console queries and the headings or topics already present. Keep every suggestion tied to demand.

Content optimization report

](https://seoskill.dev/docs/reports/content-optimization)[

Find page-one queries with useful impressions and weaker CTR evidence, then inspect the search result before changing titles, snippets or page copy.

SEO quick wins report

](https://seoskill.dev/docs/reports/quick-wins)[

Compare matched Search Console periods around a recorded SEO change and keep releases, demand shifts and other confounders beside the result.

SEO change measurement

](https://seoskill.dev/docs/reports/measure-change)

## Sources used by this report

These primary sources define the provider data or search controls used by the result.

-   [Search Console Search Analytics API guidance](https://developers.google.com/webmaster-tools/v1/how-tos/search_analytics)
