Keyword cannibalization in SEO is a situation where two or more different pages on the same site answer the same user task. As a result, search shows now one of them for a query, now the other, or not the one you consider the primary page. It’s not one page duplicated under different URLs: the pages are genuinely different, but their task is shared.
This article is for sites that are already live, with dozens or hundreds of pages. Below: how to find competing pages using Search Console and Yandex Webmaster data, how to tell cannibalization apart from a normal situation, and which fix to choose for each pair.
What keyword cannibalization is
Page cannibalization, keyword cannibalization, «in SEO»: what the term means
«Page cannibalization,» «keyword cannibalization,» «cannibalization in SEO» are different names for the same phenomenon. It’s a term from SEO practice, not the name of a search engine filter or penalty. It describes a situation on the site itself: several of its pages share the same task.
The phrase «traffic cannibalization» is sometimes used for something else too: when a site’s own ad for a query takes clicks away from that same site’s organic result. From here on, this article is only about pages from the same site competing with each other in search.
How cannibalization differs from duplicates of one page
A duplicate is the same page available at different URLs. Yandex can treat pages with identical content that open at different addresses as duplicates. Google names, among the causes of such copies, things like a site’s HTTP and HTTPS versions and the sorting and filtering results of a category page. The task with duplicates is to pick a primary URL. How that’s done is covered in the article on duplicates of one page under different URLs.
With cannibalization, the pages are different: each has its own copy, its own title tag, often its own author and date. What coincides is the task they answer. That’s why the fixes are different too: not just picking a primary URL, but deciding whether the second page is needed at all.
Why it’s a problem
The effect of cannibalization shows up like this:
- The wrong page shows up in search. For example, an old article instead of a service page, even though the service page is the one that leads to the action you want.
- The page in search results keeps changing. Today a query shows one page, a month later another. It’s hard to tell which one to improve and what caused the result.
- Resources get split across two URLs. Internal links, content updates, and the team’s time are spread between two pages instead of one.
These are consequences for working with the site. Fixing them removes the confusion, but doesn’t guarantee higher rankings or more traffic: the result depends on many other factors.
Signs of cannibalization
| Sign | Where to see it | What to check next |
|---|---|---|
| The same query shows different URLs from the site in different periods | Query reports in Search Console and Yandex Webmaster | Whether both pages answer the same task |
| A query shows a page other than the one you consider the target: an article instead of a service page, or the other way around | Query reports, manual check of search results | Which pages rank for the query: articles or commercial pages; whether the target page answers the query fully enough |
| Two pages have nearly identical title tags and H1s for the same task | An export of all pages’ headings | Whether the pages differ in content, not just in wording |
| Internal links with identical or similar anchor text lead to different pages | An export of internal links | Which page is the target, and where those links should point |
| A new page went live, and the old one’s impressions for the same queries dropped | Comparing periods before and after publication in Search Console | Whether the queries moved to the new page or the drop has another cause |
A sign is a reason to check, not a diagnosis. The «Cannibalization or normal» section helps you make the diagnosis.
How to find competing pages
Google Search Console: query → pages and page → queries
The main data source is the Search results performance report. It’s convenient to check in both directions.
From a query to pages. Open the «Queries» tab and select the query you need in the table: the data will filter by it. Then the «Pages» tab shows which of the site’s URLs were shown for that query. If the list has two or more pages, that’s a candidate pair.
From a page to queries. Click «+ New filter,» choose «Pages» and the condition «URLs containing,» then enter the page’s address. The «containing» condition will also match longer URLs with the same fragment, for example nested pages within a section. So first open the «Pages» tab and make sure only the one page you need remains after filtering. The «Queries» tab will then show the queries that page was shown for. Repeat for the second page and compare the lists. The queries that show impressions for both pages are what they’re splitting between them.
Comparing periods. In the «Date» filter, choose «Compare» and set two ranges: a «Difference» column appears in the table. This shows how impressions and clicks changed. If one period’s impressions for a query went to one page and another period’s went to a different page, the URL ranking for that query has changed.
Tab and button names are given per Search Console’s help as of October 2026; the interface may change.
Yandex Webmaster: search query groups
Yandex Webmaster has a tool for this called «Managing search query groups.» It links queries and pages in both directions: which queries a site page is shown for, and which pages are shown for a query.
By default, the list shows queries. To see page addresses, click «URL.» For the reverse check, add a «URL» filter with the value «contains»: you get a list of queries for which this page’s snippet is shown in search results. The filter field takes part of an address, so, just like in Search Console, check that neighboring pages with the same fragment haven’t been swept into the selection. Data for a query group over the period you need is in «Performance» → «Query statistics.»
It’s convenient to collect the queries where pages compete into a separate group: you can then check the result against it. If the site isn’t added to the service yet, first sort out how to get access to your site’s statistics.
Manual check of search results and the site: operator
The site: operator helps you quickly check a query’s wording. Google describes it as a search restricted to a specific domain, URL, or URL prefix. For a query combining a word with the site: operator, Yandex finds documents with that word on the site’s pages and subdomains. The help examples put the parts in different order:
- Google:
site:example.com keyword cannibalization; - Yandex:
keyword cannibalization site:example.com.
This shows which of the site’s pages search finds for the wording and which one ranks higher. But it’s a manual check, not impression statistics. Google warns that the operator doesn’t always return every indexed URL. Make your decision from report data, and use site: for a quick spot check.
Crawling the site: identical title tags and H1s, overlapping anchors
It’s easier to search for matching headings in an export of all pages. A crawler program follows a site’s links and collects the title tag and H1 of every page. Sort the export and look for matches and near-matches. For example, «Turnkey bathroom renovation» and «Bathroom renovation: prices and timelines» at two different URLs are already a candidate pair. Setting up that kind of crawl is covered in the article on crawling a site and exporting title tags and H1s.
Check internal links in the same export. If in some sections a link reading «bathroom renovation» leads to the service page, and in others to the article, the site itself is sending both readers and crawlers to two pages on the same topic.
The result of the search is a list of pairs:
- Collect «query → two or more URLs» pairs from the reports and the export.
- For each pair, open both pages and the search results for the query.
- Use the table below to determine whether it’s cannibalization or a normal situation.
Cannibalization or normal: how to tell them apart
| Situation | Cannibalization? | Why |
|---|---|---|
| Two of the site’s pages appear in search results for a query at the same time and answer different parts of the task | Usually not | Google states that its site diversity system generally doesn’t show more than two pages from the same site among top results, with exceptions possible for especially relevant pages. Your two pages appearing together fit within that rule |
| The pages answer different tasks: researching and buying, an overview and a how-to | No | This is a different intent; each page has its own role |
| One page under different addresses: HTTP and HTTPS, sorting and filtering parameters | No, these are duplicates | A primary URL is needed: a canonical tag or a 301 redirect to it |
| Different pages with different copy for the same task, and search alternates between them | Yes | The pages are competing for one spot; neither has settled in |
| The URL for a query changed once after an update or a move and has stayed stable since | Probably not | Search has picked the new page; it’s enough to keep monitoring |
The rule about two pages applies to Google. Don’t rely on it for Yandex.
How to check a query’s task from the search results
Open the search results for the query in the region where the site operates, and look at the top results. If the pages there are the same type as both of yours and answer the same thing, the query has one task, and one page should serve it. If articles and commercial pages are mixed in the top results, the intent may be mixed: then the article and the service page can work side by side. For more on how to read a query’s task from the search results, see the article on search intent.
How to fix cannibalization: a solution for each pair of pages
The fix is decided separately for each pair: pick the target page, choose a solution for the condition, and update the links. If you’re only planning pages, you’ll find useful the article on choosing between a new page, an update, and a merge while planning. Here, we cover the fix for a pair that already exists.
Step 1. Pick the target page
The target page is the one you want to see in search for the query. To pick it, answer four questions:
- which page answers the query’s task better and more fully;
- which one leads to the action you want: an inquiry, a purchase, a visit to a section;
- which one already has more internal and external links pointing to it;
- which one shows up for the query more consistently in the reports from the «How to find» section.
The answers don’t always agree. When they don’t, the main criterion is the query’s task: the target should be the page that answers it. Record the decision in a «query → target URL» table. You’ll need it for links and for checking the result.
Step 2. Choose a solution for the condition
| When it applies | Solution | What to do with the second page | What to update afterward |
|---|---|---|---|
| Both pages are needed, their tasks are genuinely different, but search shows the wrong one: the target page answers worse | Rework the target page | Remove the section that repeats the target page’s task, or replace it with a link | The target page’s title tag and H1, internal links |
| Both pages are needed, written for the same wording, but can answer different tasks | Separate the intents | Reorient each page to its own task: a different query, title tag, H1, content angle | The anchor text of links to both pages |
| Both answer the same task, and the second isn’t needed on its own | Merge with a 301 redirect | Move anything useful into the target page, set up a permanent redirect | Internal links, the sitemap |
| The pages are variants of one page, and both need to stay accessible to users | Set a canonical tag | Mark the target page as the canonical URL | Links to the canonical address |
| A utility page (tags, on-site search, a filter with no demand of its own) is needed by users but not in search | noindex | Block the utility page from indexing | Remove it from the sitemap |
| The intents are different, or it’s a normal case per the table above | Leave it as is | Change nothing | Keep monitoring via reports |
About the noindex row: it removes the page from search, but doesn’t tell the search engine which page to show instead. When Google finds noindex, it will ignore the page even if other sites link to it. Yandex’s help on duplicates says its crawler can exclude such pages from its database as it recrawls them.
Rework the target page
When it applies: both pages are needed, and their tasks really are different. But search shows the wrong one for the query because the target page answers worse — incompletely, with outdated information, or a title tag that doesn’t reflect the task.
What to do: expand and update the target page, sharpen its title tag and H1. The article on a title tag that sets a page apart from its neighbors is useful here. On the second page, remove the section that repeats the target page’s task, or replace it with a short link to it.
When it doesn’t apply: if the second page has no task of its own. That’s a case for merging instead.
When there are many such pairs, it’s more efficient to work through them together with the copy: deciding which page to update and which to merge, accounting for the site’s whole content.
Separate the intents
When it applies: both pages are needed by users, but written for the same wording. In substance, each can still answer its own task. For example, a «how to choose» article and a service page, where both open the same way and are both titled after the same query.
What to do: reorient the second page toward its own task. That means a different query, a different title tag and H1, a different content angle. Swapping a few words isn’t enough: the page needs to answer a different question.
When it doesn’t apply: if the second page has no independent task. Then it’s better to merge it with the target page.
Merge pages with a 301 redirect
When it applies: both pages answer the same task, and the second one isn’t needed on its own, either by users or by the business.
What to do:
- Move anything useful from the second page into the target page that it doesn’t already have.
- Set up a permanent 301 redirect from the second page to the target page.
- Replace internal links with direct links to the target page, so they don’t route through the redirect. When addresses change, Yandex recommends checking that the navigation menu already points to the new addresses.
- Remove the old URL from the sitemap. When addresses change, Yandex recommends listing pages in the sitemap by their new addresses.
What a redirect communicates. Google recommends a permanent server-side redirect when the new URL should be the one shown in search results: the indexing algorithm treats following a redirect as a reason to treat the destination page as canonical. Google explicitly lists the case of «you deleted a page and want to redirect users to another one» among the reasons for a redirect. Yandex states that with a 301 from the old address to the new one, its crawler indexes the redirect’s target and removes the pages it previously knew about from search.
When it doesn’t apply: if the second page is needed by users in its own right. Treat a permanent redirect as a final decision: Google recommends using it only when you’re confident you won’t need to undo it.
How to set up the redirect on the server or in the CMS isn’t covered here: it depends on the site’s platform.
Set a canonical tag
When it applies: the pages are variants of one page, and both need to stay accessible to users. For example, list versions with different sorting, or nearly identical product variants.
When it doesn’t apply: for two independent articles or services with different content. A canonical tag is a hint, not a command. Google can pick a different canonical page even if you’ve specified your own. Yandex treats a canonical address as a recommendation and won’t follow it if the non-canonical pages answer the query more fully and their content differs substantially. For two different articles, that’s exactly the typical case.
Step 3. Update internal links
After any fix, check the site’s internal links. Links with the target query’s anchor text should lead to the target page. Menus, breadcrumbs, and «related reading» blocks shouldn’t send the same anchor text to the second page. For more on how to set up links to the target page, see the article on internal linking.
When there are dozens of competing pairs, solving them one by one isn’t practical. Then you need a check for overlaps across the whole site at once and a shared «query → page» map.
How to check the result
Check after the search crawlers have recrawled the changed pages. Timing depends on the site, so go by comparing periods rather than a date on the calendar. You can help Yandex along: submit the old, redirected pages for a recrawl so its crawler picks up the change faster.
- The target URL shows up in Search Console for the chosen queries. Compare the periods before and after the change.
- The old address returns a 301 code and leads directly to the target page, with no intermediate redirects.
- The target page is in the index. The URL Inspection tool in Search Console shows details about the page’s indexed version. For how to check that a merged page is in the index, including in Yandex, see a separate article.
- Internal links, menus, and the sitemap point to the target address.
- In Yandex Webmaster, the target page shows up for the group of problem queries.
If cannibalization comes back, check two things: whether a new page for the same task has appeared on the site, and whether old links to the second page have come back — for example, from a template or a «related reading» block.
It’s easier to prevent overlaps up front: assign one URL to each query group at the clustering stage.
Frequently asked questions
Is cannibalization a search engine filter or penalty?
It’s a term from SEO practice, not the name of a filter or a penalty. It describes a situation on the site: several of its pages answer the same task. The consequences aren’t a punishment — they’re the wrong page showing up in search, or the page in search results keeps changing (see the «Why it’s a problem» section).
Is it normal for two pages from my site to appear in search results for one query?
Yes, if they answer different parts of the task. Google says it generally shows no more than two pages from the same site among top results, but allows exceptions for especially relevant pages. Cannibalization is when pages built for the same task keep alternating in search results, or a page other than the target one shows up instead.
Can canonical tags fix cannibalization between two articles?
Usually not, if the articles differ in content. Both Google and Yandex can disregard the canonical address you’ve specified; Yandex explicitly names the case where the pages’ content differs substantially. See the «Set a canonical tag» section for details.
Which is better: deleting the second page or setting up a 301 redirect?
If the second page has visitors and links, a redirect is better. That way, users land on the target page, and search engines get a signal that its address is the one that should rank. Deleting without a redirect leaves people who arrive via the old link without the page they wanted.
What is «traffic cannibalization»?
The phrase has two meanings. The first is the same as keyword cannibalization: pages from the same site competing in search. The second is when a site’s ad for a query takes clicks away from that same site’s organic result. This article is about the first meaning.
Sources
Documentation this article relies on (checked October 6, 2026):
- Yandex Webmaster help: Duplicate pages (in Russian); Managing search query groups (in Russian); Changing a site’s structure and design (in Russian); A page’s canonical address (in Russian).
- Google Search Central: What is URL canonicalization; site: search operator; A guide to Google Search ranking systems; Redirects and Google Search; Block Search indexing with noindex.
- Search Console help: Performance report (Search results): common tasks and use cases; Performance report (Search results): advanced filtering and comparison; URL Inspection tool.
- Yandex Search. Help: Searching within pages and sites (in Russian).
When there are many competing pairs, it becomes a question of the whole site’s page and query map. We’ll work out which pages are competing for the same queries and propose a fix for each pair. → Sort out page overlaps
If the copy itself needs rewriting, you can reconsider pages’ roles together with the content.