Skip to Content
Google Search Console

Find keyword cannibalization

Queries for which several of your pages each get a real share of the impressions, found from Search Console query and page data.

GEThttps://api.rankparse.com/v1/gsc/cannibalizationFreeAPI key + connected Google account

Reads the query and page rows for a date range and groups them per query. A query is reported when two or more different pages each get a real share of its impressions, because those pages split clicks and rankings between them. Each result lists the competing pages with their clicks, impressions, share and average position, the top page by clicks, and split_impressions, the impressions the other pages received.

The same page reached through several URLs (http and https, with and without www, a trailing slash, a query string or a fragment) is merged into one page first. A query where that is the only duplication comes back as kind: "url_variants": a canonical problem, fixed by pointing the variants at one canonical URL, not a cannibalization problem. Check which canonical Google chose with Inspect URLs.

Query parameters

sitestringrequired

The property, or a bare host such as example.com, matched to a property you own. See Query search analytics for how a site is matched.

startDatestringrequired

First day, YYYY-MM-DD.

endDatestringrequired

Last day, YYYY-MM-DD. It must not be before startDate.

minQueryImpressionsnumberdefault 50

A query needs at least this many impressions across its pages.

minPageImpressionsnumberdefault 5

A page competes when it has at least this many impressions for the query.

minPageSharenumberdefault 0.1

A page competes when it also has at least this share of the query's impressions, between 0.01 and 0.5.

limitintegerdefault 25

Queries to return, 1 to 100, ordered by split_impressions.

Response

queriesarray

One entry per query: query, kind (cannibalization or url_variants), total_clicks, total_impressions, top_page, split_impressions, position_spread (worst position minus best among the competing pages) and pages, each with page, clicks, impressions, share, position and, when URLs were merged, variants.

total_matchedinteger

Queries that matched before limit, with cannibalization_count and url_variants_count splitting them by kind.

rows_scannedinteger

Query and page rows read from Search Console.

truncatedboolean

Present and true when Search Console had more than 3000 rows. They are read in order of clicks, so the long tail of small queries is missing, and note says so. Use a shorter date range to see more.

Behavior and limits

  • Credits: 0. It reads Google live, up to three calls of 1000 rows each.
  • Web search only. Image, video, news and Discover rows are not included.

Errors

HTTPCodeWhen
400missing_site, missing_dates, invalid_date, invalid_paramA parameter is missing or out of range.
400, 401, 403, 404, 429, 502, 503Search Console codesThe same as Query search analytics.
401invalid_api_keyMissing, invalid or revoked API key.
429rate_limitedMore than 60 requests per minute for this key.

MCP tool: get_gsc_cannibalization.