// 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.
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.
// runs in your browser, nothing is uploaded
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.
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.
| Query | How the impressions split | Result | Why |
|---|---|---|---|
| wordpress seo audit | Service page 52%, blog post 48% of 810 | High | Two URLs at 30% or more: neither owns the query |
| core web vitals wordpress | Service page 51%, guide 32%, plugin post 16% of 585 | High | Three URLs over the 15% share, the second above 30% |
| example agency | Homepage 75%, about page 25% of 160 | Medium | A brand search; enter the brand term and it's marked brand |
| woocommerce seo | Service page 91%, blog post 9% of 670 | Not flagged | The blog post is under the 15% share, so it's noise |
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.
- 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.
- ii.
Looker Studio
Connect the Search Console source with URL Impression, add a table with Query and Landing Page, and export it.
- iii.
The Search Console API
Request the query and page dimensions together, or use the bulk data export to BigQuery on larger sites.
- iv.
Keep enough history
Three months smooths out daily swaps; shorter windows flag noise that isn't there.
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.
| Rule | Default | Why |
|---|---|---|
| Minimum impressions per query | 50 | Below that, a second URL's usually a one-off |
| Minimum share for a competing URL | 15% of the query's impressions | Tiny shares aren't a split, they're Google testing |
| High severity | The second URL at 30% or more | Neither page owns the query |
| Medium severity | The second URL between 15% and 30% | A real split, one page still leads |
| Brand queries | Marked when you enter brand terms; judge them yourself | Homepage and about page sharing a brand search is normal |
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.
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.
Which other tools check for keyword cannibalization?
Semrush
Position Tracking includes a cannibalization report built from the keywords you track.
Ahrefs
The Organic keywords report can show keywords where more than one of your URLs ranks, from Ahrefs' own ranking data.
Google Search Console
Filter the Performance report to one exact query, then open the Pages tab to see every URL that earned impressions.
A site: search
Search site:yourdomain.com plus the keyword for a quick, rough look at which pages Google associates with it.
How do you fix keyword cannibalization once a query is flagged?
- i.
Pick the owner page
The URL that's got the better history, links and conversions keeps the query.
- ii.
Merge or retarget the other
Merge its useful content into the owner and 301 it, or rewrite it for a different intent.
- iii.
Point internal links at the owner
Anchors that name the query should link to the page that should rank.
- iv.
Measure one query at a time
Re-run the checker after four to eight weeks and compare the split.
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 cannibalizationWhat 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.
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.
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.

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