# Find the pages to build from Search Console

> Google already shows you which searches it connects with your site. Learn where to click in Search Console to find pages to build, pages to improve, and pages competing with each other.

Module 11 · Track 2 · SEO and AI search · Intermediate · 12 min · promotedby.ai Academy, version 2026-11-05 · https://promotedby.ai/academy/pages-from-search-console

## The short version

- The fastest wins are searches where Google already shows your site but no page of yours properly answers them.
- Queries with many impressions and few clicks, shown with a loosely related page, are a sign you are missing a page.
- One strong page per intent beats many thin pages for every wording of the same question.
- Pages at positions 4 to 20 are the cheapest to move; a page near the top with a low click-through rate usually needs a better title and description, not new content.
- When two of your URLs share the impressions for one query, either merge them or give each a clearly different job.
- Start where Google already sees you, not with high-volume searches you have no standing for yet.

## After this module you can

- pull the right view of Search Console's Performance report and know its limits
- group a list of queries by what the searcher wants, and match each group to one page
- spot pages in striking distance (positions 4 to 20) and low click-through rates, and choose the fix for each
- check whether two of your pages compete for the same search, and decide whether to merge or separate them

Google keeps a record of every search where it showed your site, and it shares most of that record with you in Search Console. Among those searches are questions your site almost answers. Google shows your site for them, usually low on the page and often with a page that only half fits, because nothing you have published is a clear match. Those are often the cheapest pages you can build, since your own data already shows the demand.

This module walks through where to click, how to read what you find, and what to do about each kind of result. The words used throughout: a *query* is what someone typed into Google. An *impression* is one time a link to your site appeared in the results. A *click* is a visit from that result. *CTR* (click-through rate) is clicks divided by impressions. *Position* is how high your result appeared, 1 being the top, averaged over all the times it was shown.

## What the Performance report can and can't tell you

The Performance report for search results shows four numbers: total clicks, total impressions, average CTR and average position. Below the chart is a table you can group by Queries, Pages, Countries, Devices, Search appearance or Dates, using the tabs above it. By default it covers the last three months.

Four limits shape how you read it. Each comes from Google's help pages.

1. The table shows at most 1,000 rows. Rare, long-tail searches can be missing from the table even though they count in the chart total.
2. Some queries are anonymized: searches made very rarely are left out to protect privacy. They count in the chart totals but never appear as rows.
3. The chart counts your whole site once per search. The table counts each page separately when you group by Pages. If two of your pages appear for one search, that is one impression in the chart and one impression for each page in the table. So the chart and table totals often disagree, and nothing is broken.
4. Data usually arrives two to three days late.

The report also only shows one dimension at a time. It can tell you which queries a page gets, or which pages a query shows, but it can't print both side by side for every row. For that you need the Search Console API, where you can request `query` and `page` together, or an AI agent connected to it. Several open-source MCP servers (small connectors that give an agent tools) do this for Search Console.

## Step by step in Search Console

Set aside 30 minutes the first time. After that it takes ten.

1. Open Search Console and choose your property in the property selector.
2. In the left menu, open **Performance**, then **Search results**.
3. Click the date filter at the top. Keep **Last 3 months** for a first pass. Three months is enough data to be stable and recent enough to reflect your current pages.
4. Above the chart, click the boxes for **Total clicks**, **Total impressions**, **Average CTR** and **Average position** so all four show in the chart and the table.
5. Under the chart, open the **Queries** tab. Click the **Impressions** column heading to sort from most to least.
6. Look for rows with many impressions and few clicks. Write them down, or use the **Export** button to download the chart and table data to a spreadsheet, which is easier to filter.
7. To see which page Google showed for a query, click the query's row. The whole report now filters to that query. Open the **Pages** tab to see the URLs that appeared for it.
8. Remove that filter with the x next to it at the top, and repeat for the next query worth checking.

Filters help you cut the list down. Click **+ Add filter**, pick the query filter, and you can choose **Queries containing**, **Queries not containing** or **Custom (regex)**. Matching ignores upper and lower case. A regular expression (regex) is a pattern that matches many queries at once. Google uses the RE2 syntax and matches anywhere in the query unless you anchor it with `^` (start) or `$` (end). Two patterns worth saving:

```text
Question-style searches (Custom regex, "Matches regex"):
^(how|what|why|which|when|can|does|is)\s

Leave out your brand (Custom regex, "Doesn't match regex"):
acme|acmebackup
```

Search Console also offers a built-in **Branded** and **Non-branded** filter under the query filter. It isn't available for sites with few impressions or for sub-properties such as a single folder. Where you have it, non-branded searches are where new people find you, so that is the list to mine.

Before you change anything, run one of the queries in Google yourself and look at what ranks. Keep in mind that results vary by place, device and search history, so your view will not match everyone's.

## A worked example

Say you run the site for a hypothetical open-source backup tool called Acme Backup. You pull three months of data through the API with query and page together, and the interesting rows look like this:

| Query | Page shown | Clicks | Impressions | CTR | Position |
|---|---|---|---|---|---|
| acme backup | / | 410 | 1,900 | 21.6% | 1.2 |
| acme backup pricing | / | 30 | 300 | 10.0% | 1.9 |
| acme vs restic | /blog/why-we-built-acme | 6 | 2,300 | 0.3% | 11.4 |
| restic alternative | /blog/why-we-built-acme | 3 | 1,700 | 0.2% | 14.8 |
| backup postgres to s3 | /docs/postgres | 38 | 3,100 | 1.2% | 7.9 |
| how to back up postgres to s3 | /docs/postgres | 22 | 1,400 | 1.6% | 6.3 |
| postgres backup s3 cron | /docs/postgres | 9 | 800 | 1.1% | 9.2 |
| acme encryption | /docs/config | 14 | 520 | 2.7% | 4.1 |
| acme encryption | /docs/security | 5 | 480 | 1.0% | 6.8 |
| incremental backup linux | / | 1 | 2,600 | 0.04% | 38.0 |

The next step is grouping by intent. Intent is what the searcher is trying to get done: learn how to do something, compare options, find a specific product, or buy. Different wordings of the same need belong together, because one page should answer all of them.

- Brand searches ("acme backup", "acme backup pricing"). People already know you. The home page wins these at the top. Nothing to build.
- Comparison ("acme vs restic", "restic alternative"). 4,000 impressions and 9 clicks, at positions 11 to 15, shown with a blog post about why the project started. That post is only loosely related. Build a dedicated comparison page: an honest table of what each tool does, where each is the better choice, and the commands side by side.
- How-to (the three Postgres queries). One intent, the right page, positions 6 to 9, CTR around 1 to 2%. This page is in striking distance. Improve it rather than adding a second page.
- Two pages, one query ("acme encryption"). Two docs pages split 1,000 impressions almost evenly. That is the cannibalization pattern covered below.
- Broad and far ("incremental backup linux"). Position 38 with the home page, against large guides and vendor sites. Park it. Building depth on the how-to and comparison groups first gives you a better base to try for it later.

From ten rows you get one page to build, one to improve, one consolidation and one thing to deliberately ignore. That is a normal result.

## Pages already close: striking distance and low CTR

### Striking distance: positions 4 to 20

"Striking distance" is SEO shorthand for pages ranking just below the top results, around positions 4 to 20. They are the cheapest to move, because Google already shows them close to the top for those searches. A brand-new page has to earn that first.

To find them, use the Pages tab with the Average position column showing, or filter your export to positions 4 to 20 and sort by impressions. For each page:

1. Click the page to filter the report to it, then open the Queries tab to see what it is shown for.
2. Search the top two or three queries yourself and read the pages above you. Note what they answer that you don't.
3. Put the direct answer near the top. For the Postgres guide, that means the working command in the first screen, before any background.
4. Add a short section for each sub-question in the query list ("with cron", "to S3").
5. Make the title match the main query in plain words.
6. Add a few links from related pages on your own site, with anchor text that describes the target ("back up Postgres to S3", not "click here").
7. If you have substantially updated the page, change its visible "last updated" date. If you haven't, leave the date alone.

### Low CTR: fix what people see in the results

Some pages rank well but few people click them. Google's help suggests a direct check: select CTR as your metric, open the Pages tab and sort by CTR, lowest first. A low CTR, in Google's words, "can indicate that users see your page in Search results but don't think it answers their query."

Judge CTR against your own data, not a number from someone else's site. Compare a query with your other queries at similar positions. If most of your queries around position 2 have several times this one's CTR, this result is the problem. The usual fix is the title and the meta description (the short summary under the title in results).

> **Weak: Before**
>
> `<title>Postgres | Docs | Acme Backup | Acme</title>`
>
> Description: none. Google picks a sentence from the page, here a line about the license.

> **Strong: After**
>
> `<title>Back up Postgres to S3 with Acme Backup (cron example)</title>`
>
> `<meta name="description" content="One command to back up a Postgres database to S3, then a cron line to run it nightly. Tested with Postgres 16.">`

The weak title repeats the brand and says nothing about the page. The strong one names the task in the searcher's words and mentions the brand once. Google's title guidance asks for exactly this: descriptive and concise, no repeated or boilerplate text, the brand kept short. Google writes its title links from several sources, including your `<title>`, headings and links to the page. It uses your meta description when it judges that the description is more accurate than text taken from the page itself. So write both for people, and judge the result by CTR over the next few weeks.

## Two pages, one query: cannibalization

Keyword cannibalization means two or more of your pages compete for the same search. Neither becomes the clear answer, so Google may alternate between them, and links and attention are split.

To check a query, click it in the Queries tab and open Pages. One URL with nearly all the impressions is healthy. Two or more URLs with a real share each is worth a look. To see whether they take turns, add a date comparison (**Compare** tab in the date filter) and check if one page's impressions fell as the other's rose.

Then decide which case you are in (the same fix appears as strategy 5 in [Eight SEO strategies that always work](https://promotedby.ai/academy/strategies-that-always-work)):

1. Same intent. Both pages try to answer the same question, like the two encryption docs. Merge the better parts into one page, redirect the other URL to it with a permanent (301) redirect, and point your internal links at the survivor. Google's canonical documentation names redirects and `rel="canonical"` as strong signals, and consolidating helps it combine the signals, such as links, from the duplicates onto one URL.
2. Different intents. One page explains a concept, the other is a how-to. Keep both, and make the difference obvious: distinct titles and headings, each page linking to the other for its own purpose.

Two of your pages appearing for one query is not always a problem. A home page and a product page can both show for a brand search and both earn clicks. Act when the split leaves both pages stuck below where one strong page would be. Google's starter guide is also clear that duplicate content is not a penalty in itself. Content reachable under several URLs is, in its words, "inefficient, but it's not something that will cause a manual action."

## The decision table

| What you see | What it usually means | What to do |
|---|---|---|
| Many impressions, few clicks, a loosely related page shown, position 8 to 30 | You have no page for this intent | Build one page for the whole query group |
| Right page shown, position 4 to 20 | Relevant but not the best answer yet | Improve the page: answer first, sub-questions, internal links, title |
| Position 1 to 3, CTR well below your other top queries | The result doesn't look like the answer | Rewrite title and meta description; check what else appears on that results page |
| Two of your URLs share the impressions for one query | Cannibalization | Same intent: merge and redirect. Different intents: separate them clearly |
| Position 30 or worse on a broad query with strong competitors | You lack depth on the topic | Park it; build the closer groups first |
| A page's impressions and clicks fell against the previous period | Rankings or demand changed | Compare dates, check the cause before rewriting (see [Read the growth curve](https://promotedby.ai/academy/read-the-growth-curve)) |

The traps are the same every time. One is building a thin page for every wording of a query: "acme vs restic", "restic vs acme" and "restic alternative" belong on one page. Another is chasing big, broad searches where Google doesn't see you yet, when the searches it already shows you for are waiting.

Before you act on an opportunity, run through this:

- [ ] The query group has enough impressions over three months to be worth a page
- [ ] You checked which of your pages Google shows for it (click the query, then Pages)
- [ ] You searched it yourself and read what currently ranks above you
- [ ] You can answer it better than those pages, with something first-hand: a test, real output, your own numbers
- [ ] No existing page of yours already targets the same intent (or you plan to merge it)
- [ ] You wrote down the metric to watch, so [the weekly loop](https://promotedby.ai/academy/weekly-seo-loop) can check it in three weeks

> **For AI agents: Mining Search Console for page opportunities**
>
> - Request: `POST https://www.googleapis.com/webmasters/v3/sites/{siteUrl}/searchAnalytics/query` with `dimensions: ["query","page"]`, the last 90 days, `rowLimit: 25000`, `dataState: "final"`. Page through with `startRow` if needed. Read-only scope is enough.
> - Opportunity rows (starting thresholds, tune per site): impressions at least 100, position 4 to 20, or position 1 to 3 with CTR well below the site's median at that position.
> - Cannibalization: a query where two or more pages each hold at least 20% of its impressions.
> - Group queries by intent (learn, compare, find, buy) before proposing pages. One page per group. Never propose one page per query variant.
> - Output a table: group, queries, page shown, clicks, impressions, CTR, position, proposed action (build, improve, retitle, merge, park) and the metric to watch.
> - Anonymized queries and truncated rows are missing from any export; say so in the report.

## Try it

> **Try it: Find three opportunities (30 minutes)**
>
> Take 30 minutes and find three opportunities on a site you have access to. Open Performance, then Search results, for the last 3 months. On the Queries tab, sort by impressions and copy the 30 queries with the most impressions and a CTR under 2% into a spreadsheet. For the top ten, click each one and note the page Google shows. Group the queries by intent, then label each group with one action from the decision table above.
>
> You're done when you have a table of query groups, each with the page shown, its position, one action (build, improve, retitle, merge or park) and the number you will check in three weeks. Pick the group with the most impressions that isn't brand traffic, and make it one of this week's three actions.

## Check yourself

1. "backup postgres to s3" has 3,100 impressions at position 7.9, and the page shown is your Postgres guide. What is the best first move?
   - a) Build a new page for that query
   - b) Improve the existing guide so it answers that search better, with a matching title and the command near the top
   - c) Ignore it, because position 7.9 is already on page one
   - Answer: b) Improve the existing guide so it answers that search better, with a matching title and the command near the top. The right page is already showing and sits in striking distance. Improving it concentrates everything on one URL; a second page would compete with it.

2. You click the query "acme encryption" and the Pages tab shows two of your URLs, each with about half the impressions. What does that suggest?
   - a) Google is penalizing duplicate content
   - b) Two pages may be competing for one intent, so check whether to merge them or give each a different purpose
   - c) Nothing, because more URLs always means more traffic
   - Answer: b) Two pages may be competing for one intent, so check whether to merge them or give each a different purpose. Split impressions on one query often mean neither page is clearly the best answer. Google's documentation says duplicate content is not a penalty, but consolidating helps it put signals on one URL.

3. A query sits at position 2.1 with a CTR far below your other queries at similar positions. What do you change first?
   - a) The title and meta description, so the result says clearly what the page offers
   - b) The page's URL
   - c) Nothing; CTR does not matter at position 2
   - Answer: a) The title and meta description, so the result says clearly what the page offers. The page already ranks near the top, so the problem is what people see in the result. Google's own help suggests updating titles and descriptions for low-CTR pages.

4. Why can't you trust the Queries table to list every search that showed your site?
   - a) Search Console hides queries from new sites
   - b) The table shows at most 1,000 rows and leaves out anonymized queries that were searched very rarely
   - c) Queries only appear after someone clicks
   - Answer: b) The table shows at most 1,000 rows and leaves out anonymized queries that were searched very rarely. Google omits rare queries to protect privacy and caps the table at 1,000 rows. The API and bulk exports return more, but never every query.

## Sources

- [Search Console Help, Performance report (Search results), overview and basic setup](https://support.google.com/webmasters/answer/7576553)
- [Search Console Help, Performance report, common tasks and use cases](https://support.google.com/webmasters/answer/17010961)
- [Search Console Help, Performance report, advanced filtering and comparison](https://support.google.com/webmasters/answer/17011165)
- [Search Console Help, Performance report, dimensions and data groupings](https://support.google.com/webmasters/answer/17011259)
- [Search Console Help, Performance report, about the data](https://support.google.com/webmasters/answer/17011364)
- [Search Console Help, Performance report, troubleshooting data discrepancies](https://support.google.com/webmasters/answer/17010575)
- [Search Console Help, What are impressions, position, and clicks?](https://support.google.com/webmasters/answer/7042828)
- [Search Console API, Search Analytics query](https://developers.google.com/webmaster-tools/v1/searchanalytics/query)
- [Google Search Central, Influencing your title links in search results](https://developers.google.com/search/docs/appearance/title-link)
- [Google Search Central, Control your snippets in search results](https://developers.google.com/search/docs/appearance/snippet)
- [Google Search Central, How to specify a canonical URL](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls)
- [Google Search Central, SEO starter guide](https://developers.google.com/search/docs/fundamentals/seo-starter-guide)
- [Google Search Central, Debugging drops in Google Search traffic](https://developers.google.com/search/docs/monitor-debug/debugging-search-traffic-drops)
- [GitHub topic, google-search-console-mcp (open-source MCP servers for Search Console)](https://github.com/topics/google-search-console-mcp)
