// guides / keyword cannibalization

Keyword cannibalization checker: free, and it reads your own data

This keyword cannibalization checker reads a Search Console export with queries and pages, and shows every query where two or more of your URLs split the impressions. Paste the CSV, or load the sample data to see a result first. Nothing leaves your browser.

By Muhammad Younus Updated

Two glass prisms, one amber and one blue, whose light beams collide at a single glowing point
// 01 - free tool

How do you use this keyword cannibalization checker?

In three steps. Export query, page and impressions for the last three months (the routes are below). Upload or paste the CSV; clicks and position are optional. Click Check for cannibalization. If you haven't got an export yet, Load sample data shows what a result looks like.

The checker runs entirely in your browser, and it doesn't upload anything.

Settings

// runs in your browser, nothing is uploaded

the short answer
$ keyword cannibalization checker ✓ A keyword cannibalization checker finds the queries where you've got more than one page taking a real share of the impressions.✓ Search Console's Performance export gives queries and pages as separate tables, so the query-and-page data comes from Search Analytics for Sheets, Looker Studio or the API.✓ A flag isn't a verdict: check whether both pages show together and whether they serve different intent before merging anything.
// 02 - the tool

What is keyword cannibalization, and what does a checker do?

Keyword cannibalization is when two or more pages on one site compete for the same search, so Google keeps switching between them and neither holds the position one clear page could. A keyword cannibalization checker groups your search data by query and finds the queries where two or more of your own URLs take a real share of the impressions. When Google can't settle on which page answers a search, it can rotate between them, and when it does, each often ranks lower than one page would.

Most checkers are paid tools that estimate rankings, or ask for access to your Search Console account. This one reads the numbers Google already gave you in Search Console, which is the only data about your site that doesn't need estimating, and it reads them without an account connection.

// 03 - worked example

What does a keyword cannibalization example look like in the checker?

These are the results the checker gives for its own sample data, at the default settings. Four queries go in, three come out flagged, and the fourth shows what a harmless second URL looks like.

What does a keyword cannibalization example look like in the checker?
QueryHow the impressions splitResultWhy
wordpress seo auditService page 52%, blog post 48% of 810HighTwo URLs at 30% or more: neither owns the query
core web vitals wordpressService page 51%, guide 32%, plugin post 16% of 585HighThree URLs over the 15% share, the second above 30%
example agencyHomepage 75%, about page 25% of 160MediumA brand search; enter the brand term and it's marked brand
woocommerce seoService page 91%, blog post 9% of 670Not flaggedThe blog post is under the 15% share, so it's noise
// 04 - getting the data

How do you export query and page data from Search Console?

The Performance report exports queries and pages as separate tables, so you'll need a route that keeps each query next to its page.

  1. i.

    Search Analytics for Sheets

    A free Google Sheets add-on. Group by query and page, set the last three months, then download the sheet as CSV.

  2. ii.

    Looker Studio

    Connect the Search Console source with URL Impression, add a table with Query and Landing Page, and export it.

  3. iii.

    The Search Console API

    Request the query and page dimensions together, or use the bulk data export to BigQuery on larger sites.

  4. iv.

    Keep enough history

    Three months smooths out daily swaps; shorter windows flag noise that isn't there.

// 05 - how it decides

How does the keyword cannibalization checker decide what counts?

It only looks at queries with enough impressions to mean something, then it'll measure how the impressions split across your URLs. You can change both thresholds in the tool's settings.

How does the keyword cannibalization checker decide what counts?
RuleDefaultWhy
Minimum impressions per query50Below that, a second URL's usually a one-off
Minimum share for a competing URL15% of the query's impressionsTiny shares aren't a split, they're Google testing
High severityThe second URL at 30% or moreNeither page owns the query
Medium severityThe second URL between 15% and 30%A real split, one page still leads
Brand queriesMarked when you enter brand terms; judge them yourselfHomepage and about page sharing a brand search is normal
// 06 - the cost

Why does keyword cannibalization cost rankings?

Because Google can't decide which of your pages is the answer. When two URLs keep trading places for one query, links, clicks and relevance signals are spread across both, and neither page collects enough of them to hold a strong position. You'll often see it as a query that never settles: position 8 one week, 15 the next, with a different URL each time.

On WordPress it rarely starts with someone targeting a keyword twice on purpose. It's a blog post that drifted onto a service query, a category archive that ranks for its own name, or a page that's been published twice with -2 on the end. To fix keyword cannibalization you need to know which of those you've got, and that's why a checker that reads real impressions beats one that only reads your titles.

// 07 - before you act

When is a flagged query not really cannibalization?

When both pages show together. If a logged-out search puts both on page one, you're holding two spots, and merging them could lose one. Don't change anything before you've checked the live results.

It's also fine when the pages serve different intent: a service page and a how-to guide can both appear for a broad query, each winning its own long-tail searches. The real signal is URLs that alternate over time, which the Search Console date view shows when you filter to one query.

// 08 - other options

Which other tools check for keyword cannibalization?

i.

Semrush

Position Tracking includes a cannibalization report built from the keywords you track.

ii.

Ahrefs

The Organic keywords report can show keywords where more than one of your URLs ranks, from Ahrefs' own ranking data.

iii.

Google Search Console

Filter the Performance report to one exact query, then open the Pages tab to see every URL that earned impressions.

iv.

A site: search

Search site:yourdomain.com plus the keyword for a quick, rough look at which pages Google associates with it.

// 09 - after the check

How do you fix keyword cannibalization once a query is flagged?

  1. i.

    Pick the owner page

    The URL that's got the better history, links and conversions keeps the query.

  2. ii.

    Merge or retarget the other

    Merge its useful content into the owner and 301 it, or rewrite it for a different intent.

  3. iii.

    Point internal links at the owner

    Anchors that name the query should link to the page that should rank.

  4. iv.

    Measure one query at a time

    Re-run the checker after four to eight weeks and compare the split.

// 10 - diy or help

What can you fix yourself, and when do you need help?

Deciding owners, merging and redirecting across a site is what the keyword cannibalization service does, and splits caused by duplicate URLs belong to duplicate content SEO.

Fine to do yourself

  • Running the checker every quarter
  • Retitling a post that drifted onto a service query
  • Adding internal links to the owner page

Worth handing over

  • Dozens of flagged queries across templates
  • Merges that need redirects and content decisions
  • Splits caused by archives, parameters or duplicate hosts

Rather have it fixed for you? See the Keyword cannibalization service.

Keyword cannibalization
// questions

What else do people ask about keyword cannibalization checkers?

How do you check for keyword cannibalization?

Export queries and pages together from Search Console for the last three months, then look for queries where two or more of your URLs each take a real share of the impressions. The checker above does that grouping for you. Then confirm with a live search and the date view before merging anything.

Is keyword cannibalization always bad?

No. It's only a problem when two pages split one query and neither ranks as well as one would. Two pages showing together on page one is a win.

Can a site: search find keyword cannibalization?

It'll give you a rough idea of which pages Google links to a keyword, but it doesn't show impressions or which page actually ranks. Search Console data is more reliable.

How often should I check for keyword cannibalization?

Every three to six months on most sites, and after publishing a batch of posts on topics your service pages already cover.

Does this checker send my Search Console data anywhere?

No. The CSV is read by JavaScript in your browser and never uploaded. Closing the tab clears it.

// sources

Where do these rules come from?

Google's own documentation, plus what I see on the WordPress sites I work on. Written by Muhammad Younus, a WordPress technical SEO consultant.

// from the blog

On WordPress, overlap usually starts in one of two places, and each has a post: tag and category archives competing with articles, and product pages carrying the same manufacturer copy. High impressions with low clicks is often the first sign in Search Console.

Muhammad Younus with a friendly open smile, head tilted slightly
// next step

Want this checked on your own site?

Book a call on Upwork, share the URL and read-only Search Console access, and you'll get back what's actually wrong, ranked by the clicks it's costing.

Book a call on Upwork