This app shows you which keywords are being cannibalized on which pages.
It highlights opportunities to fix or reduce keyword cannibalization, an ongoing SEO challenge.

It integrates directly with Google Search Console. Simply authorize the app, enter the domain you want to check, enter your branded search keywords to filter out, and run it.
The app does the rest. It provides a detailed report in seconds showing exactly where cannibalization issues are.


Try it here: Keyword Cannibalization Analysis App


This app was originally shared by SEO Strategist Jean-Christophe Chouinard, on his blog: Keyword Cannibalization Analysis Python tutorial.
The web app version shared here is an adapted version by Moonlit founder, Mohammad Abdin.


What is keyword cannibalization?

Keyword cannibalization in search optimization is when multiple pages rank for the same search queries. Having two or more pages trying to rank for one search term can cause issues where search engines like Google are unsure which pages to rank for certain queries.

This results in your web pages constantly dropping in and out of ranking positions for targeted queries. Keyword cannibalization can hinder the performance of pages you’re trying to rank, while boosting irrelevant pages you don’t want to rank.

It can be tricky to identify and troubleshoot keyword cannibalization. Read on to learn exactly how this app works, and how to use it to showcase and resolve keyword cannibalization issues.


How the keyword cannibalization analysis app works

The main challenge with keyword cannibalization is identifying which pages are being cannibalized, and for which queries.

This process is typically done manually by clicking through Google Search Console, which can be very time-consuming.

The manual process can often result in missed keywords too. Because you can only really examine one query at a time.

This app resolves those issues by printing out every query and showing you how much of a cannibalization issue there is on every page.


Step 1: Enter your domain property

kw cannibalization analysis - domain property

In the property field, enter the domain you want to check. This is a text input, so it needs to match the property name in Google Search Console.

So if your property is called, you’d put exactly that in this field.


Step 2: Enter branded keywords to filter out

kw cannibalization analysis - branded kws

This step removes any branded queries from the analysis. You’ll want to remove these because most websites have all kinds of pages that rank for branded searches. You’ll be analyzing for days if you don’t remove branded terms.

You just need to provide a comma-separated list of branded queries, or other queries to exclude.

The app has an extra step that filters the queries you put here out.


Step 3: Authenticate Google Search Console

kw cannibalization analysis - GSC

This app integrates directly with your Google Search Console account. It uses the GSC API to pull in metrics.

You’ll need to be logged into a Google account with access to at least one Google Search Console property to use it.

If you don’t want to authenticate your GSC, you can try this CSV version of the app. It does the same thing.


Step 4: Run it and get your analysis

kw cannibalization analysis - report output

The result is a large spreadsheet with several columns of data.

This app works fast. It pulls data using the Google Search Console API and processes it rapidly with a Python script.

It took me about one minute to run for a mid-sized e-commerce store and provided 11,870 rows of keywords analyzed.

Your results will vary depending on the size of your website and the search terms it ranks for.


What does this stuff mean though?

At first glance, all this data may not look that helpful. Read on for a breakdown of each column and how to use this sheet to fix cannibalization issues.

Click the little download icon in the bottom left and pull it up in Google Sheets for the next steps.


Note: This app’s default date range for query data is the past 12 months. You can clone the app and change the date range within the app editor interface.


How to use the report generated from the app

We will use this data to determine if there are opportunities for consolidation. Meaning keywords may be moved from one page to another, or entire pages may be merged. More on this below.


The Cannibalization Analysis Columns explained

Query, clicks, impressions, click-through rate (CTR), and position are all straightforward. These metrics are standard within GSC.

The part that needs explanation are the other columns, clicks_pct_vs_query, clicks_pct_vs_page, and comment:

  • ‘clicks_pct_vs_query‘: This segment calculates the percentage of clicks each page receives for a specific keyword.
  • ‘clicks_pct_vs_page‘: This segment calculates the percentage of clicks for the main page associated with a keyword.
  • ‘comment’: This is a value of either ” Potential Opportunity” or “Risk – Low percentage of either query-level or page-level clicks”.


Clicks_pct_vs_query explained further

This number represents the percentage of clicks the page receives for that specific query.

So a 1 or 100% in its respective row would mean this page receives 100% of the clicks for this query.

Which means there would be no cannibalization for this page and this term.

The lower this percentage is, the more this keyword is being cannibalized.

If you see something like 0.75, it means other pages rank for this term and get clicks on other pages 25% of the time, which is likely a cannibalization issue.

It would also mean that other pages in this sheet account for the other 25% of clicks. It could be one page or a couple.


Clicks_pct_vs_page explained further

This number represents the percentage of clicks this page gets from the query in this row.

So a 1 or 100% here means the page gets all its clicks or impressions from this query. (Which is impossible BTW)

The higher this number or percentage, the more traffic this specific page gets for that query.

One web page often ranks for many queries, so low numbers or percentages are normal here.

It’s important to look at both metrics to gauge keyword cannibalization.


Comment explained further

The two values you will see in the comment section are either “risk” or “potential opportunity”

Risk basically means don’t worry about it. The logic for risk is if ‘clicks_pct_vs_query’ or ‘clicks_pct_vs_page’ is less than or equal to 10%.

There’s always a chance that cannibalization is occurring, thats why it says “risk” instead of “don’t worry about it”. Use your judgment here to determine outcomes.

Potential opportunity means there is most likely keyword cannibalization. And because only a sith speaks in absolutes, the wording here is very “it depends’. Classic SEO lingo.

So in summary, Potential opportunity = keyword cannibalization, and risk = no cannibalization.


Filter to potential opportunities

kw cannibalization analysis - opportunity filter

I like to export the output and open it up in Google Sheets with a filter to hide the queries marked “risk”.

This way I’m only looking at keywords that have active keyword cannibalization issues.

This allows me to focus on the most important keywords that drive the most clicks and have the most cannibalization. My hitlist.

Tip: You can also format the clicks_pct columns into percentages for easy viewing.


Create a pivot table by query

kw cannibalization analysis - pivot table

I like to pivot the data by query, so I can compare the two or more pages a query shows for.

In my example on the first row, I see that the query “1 18 scale model cars” has two pages getting clicks. One is a category page with 22 clicks, and one is a blog post with 6 clicks.

This indicates a potential cannibalization issue for this query. Two pages are competing for clicks and impressions.

Read on for methods of dealing with keyword cannibalization.


Specific methods of fixing keyword cannibalization

Fixing keyword cannibalization issues is a real bugger. You can make changes and sometimes things don’t even get fixed. Which is why I’m throwing up this disclaimer:

Search intent varies

It’s important to understand that two people may enter the same search query and be looking for entirely different results. This is the nature of search.

So even if there is cannibalization reported, it may not be an issue.

In my example for the query “1 18 scale model cars”, 78% of people may be looking to shop, while 21% of people may be looking for an explanation of the size of these model cars, which is what the blog post that ranks is about. It doesn’t necessarily mean I’ve made a mistake and broken my rankings.

So in my example, I have a category page about buying 1:18 scale diecast cars, and a blog post explaining the sizes and dimensions of 1 18 model car. In my opinion, there is no cannibalization issue here, even though the data suggests otherwise.

To me, this means that people looking for information on 1:18 scale cars will click the blog post, and people looking to buy will click the category page.

It’s important to use your judgment about mixed search intent before you make changes to your website.


One more disclaimer before tactics:

You can’t always fix or modify keyword cannibalization

I’ve worked on sites where everything was done to try and resolve cannibalization. From removing all mentions of specific keywords to consolidating and removing pages. And the page in question still ranked and got clicks for the queries.

This is sometimes the case with cannibalization. Sometimes you can’t fix it no matter what.

However, most of the time cannibalization can be resolved fairly quickly and easily when done correctly. I’m just saying that this is an edge case that may happen now and then.

SEOs aren’t magical wizards. At the end of the day, if Google thinks your page should rank for a specific query, you sometimes can’t do anything about it.

Now let’s talk about the two main tactics used to resolve keyword cannibalization.


Keyword Cannibalization Fix 1: Page consolidation

Consolidation means combining the two pages. This is the most common fix for keyword cannibalization.

To consolidate a page, you take the content from the lesser page, move it to the main page, and 301 redirect the lesser page to the main page.

Consolidation makes sense if your pages have the same search intent. For example, two blog posts that cover very similar topics.

This tactic does not make sense for mixed search intent. For example, moving blog post content to a category page and 301 redirecting the blog to the category page.

It wouldn’t make sense to do this because product category pages and blog posts serve very different audiences. Check the SERPS to see what type of content ranks before making consolidation moves.


Keyword Cannibalization Fix 2: N-Grams adjustments

The classic non-consolidation method is to edit keyword usage on a page. For example, removing all mentions of a specific keyword that is being cannibalized.

I’ve found that editing N-gram usage is more effective than making specific keyword adjustments for keyword cannibalization.

N-grams are the building blocks of keywords. And search engines detect and parse N-grams. You’ll notice that the term “N-gram” is used in many Google search patents. The term “keyword” is rarely used.

The goal of N-Grams analysis and edits is to increase the distance in specific word usage between two pages.

If two pages have very similar N-gram usage, they are more likely to cannibalize. If they have more unique N-Gram usage, they are less likely to cannibalize.

I created an entire tool and guide on the N-grams process. Check out my N-grams analysis app and tutorial for more details on how to master N-grams.


Keyword Cannibalization Fix 3: Internal Link Anchor Text

Similar to N-grams, I’ve noticed that the anchor text used on pages can be a big culprit for keyword cannibalization.

One project I worked on had product pages causing issues with keywords that product category pages were supposed to rank for.

These product pages all linked to their category page with exact match anchor text.

After removing these exact match anchor text links, the cannibalized impressions quickly dropped off and the issue was significantly reduced.

Words and phrases that have an internal link to another page likely have more weight to them than plain text. So keep this in mind when troubleshooting keyword cannibalization issues.


Build your own keyword analysis tools

This app started as a Python script and was adapted with a no-code app builder called Moonlit.

Now It’s easy to take existing Python SEO scripts and turn them into web apps.

Learn how to build your own keyword analysis tools in the AI SEO academy.

You’ll get access to over 20 custom-built tools and training videos to leverage immediately. And you’ll learn how to build and customize them along the way.


Recommended Posts