Skip to content

Search Console guide

How to check for keyword cannibalization in Search Console

Direct answer

To check for keyword cannibalization in Search Console, find queries where two or more of your pages get impressions, then compare their positions and clicks. Open Performance → Search results, click a query, and read the Pages tab. If the URLs swap places or split the clicks, they compete. Rankgaroo can pull every query and page pair at once and group the overlaps.

Updated

On this pageDo it by handAsk your AI insteadWorked exampleLimits to knowQuestionsRelated guides

Two of your pages show up for the same search, and the one you wanted to rank sits below the other. Or the ranking flips from week to week and neither page settles.

Search Console can show this, but only one query at a time. The Performance report has no table that lists queries and pages together.

Do it by hand in Search Console

  1. Go to Performance → Search results and set the date range.
  2. On the Queries tab, click a query you care about. Search Console adds it as a filter.
  3. Open the Pages tab. If two or more URLs have impressions for that query, they overlap.
  4. Note each URL's position, clicks and impressions. Then use Date → Compare to see whether the leading URL changes between periods.
  5. Repeat for your top queries. There is no way to list all overlaps in one view.
  6. Decide: a clear leader (for example position 2 against position 9) is usually fine. Pages that trade places or split clicks need a plan, such as clearer targeting, an internal link, or a merge.

Because the Performance report shows one query at a time, you can check a handful of queries in an hour but not the hundreds that might overlap.

Ask your AI instead

With Rankgaroo connected to Claude, ChatGPT or Cursor, paste a question like this:

Prompt

In Search Console data for example.com from 2026-09-25 to 2026-10-22, find queries where more than one URL gets impressions. Ignore pages that are only language versions of each other (/de/, /es/, /ja/ and so on). For each real case, show both URLs with clicks, impressions and position, and say whether it looks like cannibalization.

What the AI calls

  • gsc_search_analytics(siteUrl: "sc-domain:example.com", startDate: "2026-09-25", endDate: "2026-10-22", dimensions: ["query", "page"], rowLimit: 1000)

    returns up to 1,000 query and page pairs. The AI groups rows by query and keeps queries with two or more URLs, setting aside language-folder twins.

  • gsc_search_analytics(startDate: "2026-08-28", endDate: "2026-09-24", dimensions: ["query", "page"], filters: [{dimension: "query", operator: "equals", expression: "time tracking spreadsheet"}])

    for the previous period, to see whether the leading URL changed.

Worked example

QueryPageClicksImpressionsCTRPosition
time tracking spreadsheet/templates/time-tracking-spreadsheet/71,0100.7%10.4
time tracking spreadsheet/blog/time-tracking-spreadsheet-vs-app/24500.4%18.2
rechnung schreiben freiberufler (how to write an invoice as a freelancer, German)/de/blog/rechnung-schreiben-als-freiberufler/23240.6%4.7
rechnung schreiben freiberufler (how to write an invoice as a freelancer, German)/de/templates/rechnungsvorlage-freiberufler/22810.7%10.0
invoice payment terms net 30/blog/invoice-payment-terms-net-30/35200.6%8.6
invoice payment terms net 30/templates/invoice-template-with-payment-terms/12000.5%12.8
acme app/21264033.1%1.5
acme app/about/35100.6%3.4
acme app/blog/what-is-acme/23900.5%3.9
Example site · Search Console · 2026-09-25 to 2026-10-22. Sample data from a fictional site.

What the answer says

Of 812 distinct queries in the top 1,000 query and page rows, 96 appear under more than one URL, but many of those are language versions of the same page, such as "acme app" on /, /de/ and /ja/. Those are not cannibalization. The same-language cases are clearer. "time tracking spreadsheet" shows a template at position 10.4 and a blog post at 18.2, "invoice payment terms net 30" has a guide at 8.6 and a template at 12.8, and the German "rechnung schreiben freiberufler" splits 605 impressions between two pages at 4.7 and 10.0. In all three, one URL leads, so an internal link or a sharper split of topics may be enough. For "acme app" the home page takes the clicks, so the extra URLs are harmless.

Limits to know

  • gsc_search_analytics returns at most 1,000 rows per call, and a query and page table uses up rows quickly. On a big site the AI only sees the pairs with the most clicks.
  • Two URLs with impressions for one query is not proof of harm. The AI can show positions and clicks, but deciding to merge pages is your call.
  • Search Console hides rare, anonymized queries, so some overlaps never appear in the data.
  • Rankgaroo can't read page content. The AI judges overlap from URLs, queries and positions only.

Questions

What is keyword cannibalization?

Keyword cannibalization is when two or more pages on the same site rank for the same query, so they compete with each other and split clicks and ranking signals that a single page could hold. It shows up as two URLs under one query in Search Console.

Is it always a problem when two pages rank for the same query?

No. Two URLs sharing one query is common, for example a home page and an about page on a brand search. It becomes a problem when the positions swap between the pages or when neither page ranks as well as one combined page might.

Are translated versions of a page cannibalizing each other?

Usually not. Language versions of one page, set up with hreflang, are meant to serve different audiences. In the example data, the query "acme app" appears on the home page of the /de/, /es/ and /ja/ sections, and each one earns clicks in its own market.

How do I fix keyword cannibalization?

Pick a main page for the query. Then either rework the other page toward a different angle, or merge it into the main page and redirect it. Internal links that point at the main page, using the query as anchor text, also help signal which page you prefer.

Get answers like this from your own data

Rankgaroo is in private beta. Join the list and we'll send your connector link when a spot opens.

One email when your spot is ready. Tell us about your setup.