---
title: "Keyword cannibalization checker · gscdump"
canonical_url: "https://gscdump.com/tools/cannibalization"
last_updated: "2026-10-08T14:05:15.607Z"
meta:
  description: "Free keyword cannibalization checker for Google Search Console. Lists queries where 2 or more of your pages get impressions, with the click split per page."
  "og:description": "Free keyword cannibalization checker for Google Search Console. Lists queries where 2 or more of your pages get impressions, with the click split per page."
  "og:title": "Keyword cannibalization checker · gscdump"
---

Which of my pages compete with each other for the same query?

# Free keyword cannibalization checker for Search Console

Read-only, on your own Search Console data: the queries where 2 or more of your pages each receive impressions over the last 28 days, with the click split and position spread.

## What it returns

Real rows, no sign-in

Each keyword with every nuxtseo.com page Google showed for it over the last 28 days.

[nuxtseo.com](https://nuxtseo.com) · 2026-08-22 to 2026-09-18, 8 pages of 36 queries · captured 2026-09-22

Example Cannibalization rows from nuxtseo.com

| Keyword | Competing page | Clicks | Impressions | Position |
| --- | --- | --- | --- | --- |
| |
| nuxtseo | / | 27 | 41 | 1.10 |
|  | /docs/nuxt-seo/getting-started/installation | 0 | 17 | 1.00 |
|  | /releases | 0 | 11 | 2.82 |
|  | /docs/nuxt-seo/getting-started/introduction | 0 | 27 | 1.19 |
|  | /docs/nuxt-seo/releases/v5 | 0 | 27 | 1.00 |
|  | /docs/sitemap/getting-started/introduction | 0 | 13 | 1.00 |
| nuxt-ai-ready | /docs/ai-ready/getting-started/introduction | 11 | 18 | 1.00 |
|  | /docs/ai-ready/getting-started/installation | 0 | 12 | 5.17 |

These are nuxtseo.com's own rows, read from its Search Console record. Connect a Site below to run the same query over yours.

## Run it on your own record

[**Continue with Google **](https://gscdump.com/auth/google)

HostedRead-only Search Console scope. Free during beta.

or

```
gscdump analyze cannibalization --site sc-domain:example.com
```

$ LocalMIT licensed, on npm.

Over MCP: `run-report { siteId: "<site-id>", reportId: "risks", comparison: "prev-period" }`

[Connect with MCP](https://gscdump.com/mcp) to reach it from ChatGPT, Claude, Cursor, or Copilot.

## **How the checker works**

The checker groups Search Console data by query and page over the last 28 days. It lists queries shared by at least 2 qualifying pages. A shared query is a starting point for review. It does not prove that the pages harm each other's rankings.

1. Read the query and page rows for the last 28 days from the Site's Search Console record.
2. Drop query-and-page rows with fewer than 10 impressions, where the numbers are too thin to compare.
3. Keep each query where 2 or more of your pages each reached the 10-impression minimum.
4. For each query, list the pages with their clicks, impressions, CTR, and average position, and measure the spread between the best and worst position.
5. Drop queries whose best and worst page positions differ by more than 10 positions.
6. Grade severity: 3 or more pages or 50 or more clicks split is high, 2 pages within 5 positions is medium, the rest is low.

The checker reads only data Google already reports to you. It fetches no page and needs no crawl, so a row means Google itself showed two of your URLs for the query.

A product page and a guide can appear for the same query while answering different needs. Read both pages before treating the shared query as a problem.

## **Check a shared query in Search Console**

- Open the Performance report in Google Search Console and select the query in the Queries tab.
- Open the Pages tab to see the URLs Google showed for that query.
- Compare date ranges for each page. Check whether clicks and impressions changed alongside average position.
- Read the pages to check whether they answer the same question. This checker does not fetch their content.

[Google's Performance report guide](https://support.google.com/webmasters/answer/17010961?hl=en) explains how to filter a query and view its pages.

## **What a row cannot tell you**

- **Ranking harm.** The row does not measure which clicks either page would have received without the other.
- **Page switching.** Similar average positions over 28 days do not establish that Google alternated between the pages.
- **Links or content.** Search Console query and page rows contain neither backlinks nor page content.
- **Canonical choice.** A shared query alone does not show that the pages are duplicates or should share a canonical.

[Google's canonical guidance](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls) covers duplicate or very similar pages. Keep that content check separate from this table.

## Common questions

It reads the last 28 days of your Search Console record. Each included page needs at least 10 impressions for the query. A query needs at least 2 qualifying pages, with average positions no more than 10 positions apart.

High: 3 or more pages, or 50 or more clicks split. Medium: 2 pages within 5 positions of each other. Low: everything else. It is a sort aid, not a verdict.

Yes. Several pages can receive impressions for the same query without harming each other. The checker shows shared queries. It cannot prove ranking harm, page switching, or duplicate content.

Yes. Open the Performance report in Google Search Console, select a query, then open the Pages tab. Compare the pages and date ranges. gscdump groups qualifying query and page rows from your record into one table.

## **See also**

<dl>

<dt><a href="https://gscdump.com/tools/striking-distance">Striking distance keywords</a></dt>
<dd>Queries ranking 4-20 by impressions, with CTR and clicks for each.</dd>

<dt><a href="https://gscdump.com/tools/content-decay">Content decay</a></dt>
<dd>Pages whose clicks fell 20% or more against the previous 28 days, with the clicks lost.</dd>

<dt><a href="https://gscdump.com/tools/opportunity">Opportunity keywords</a></dt>
<dd>Queries whose CTR sits below the benchmark for their position, ranked by the click gap.</dd></dl>

Every day you're not syncing is data Google will delete.

Eligible Sites backfill available Search Console history. Data sources depend on the tool and account. Free during beta.

[**Join the waitlist **](https://gscdump.com/#get-access) [**Connect with MCP **](https://gscdump.com/mcp)

## Sitemap

See the full [sitemap](/sitemap.md) for all pages.
