Template

Keyword Cannibalization Analysis

Inspired by Jean-Christophe implementation: https://www.jcchouinard.com/seo-cannibalization-analysis

Loading

Loading

Workflow

Workflow

Loading

Loading

Workflow

Workflow

Loading

Loading

Workflow

Workflow

Keyword cannibalization happens when two or more pages on your site rank for the same query, forcing Google to decide which one to show. Instead of one strong ranking, you end up with several weaker listings, diluted clicks, and confused visitors. As search engines double-down on topical authority and “helpful content,” letting pages fight each other is leaving easy traffic—and revenue—on the table. For additional insights into streamlining your site’s performance, you might find our article on auditing website content at scale with AI useful.

How the “KW Cannibalization Analysis” App Works

This app takes raw Google Search Console (GSC) data and pinpoints every query where more than one of your pages is competing. Here’s the flow built in Moonlit:

1. Pulling GSC data

The Google Search Console node grabs 12 months of performance data (clicks, impressions, CTR, average position) for every query-page pair on the property you specify. By selecting both “query” and “page” dimensions, we get a row for each combination, which is exactly what we need to spot overlap.

2. Python clean-up & analysis

The custom Python block does all the detective work:

  • Remove branded terms. Any words you list in “Excluded keywords” are stripped out with a simple regex, so brand traffic doesn’t cloud the results.

  • Find true cannibalization. It groups rows by query and keeps only those that rank more than one unique page. Single-URL queries are harmless and get dropped.

  • Quantify the damage. For each remaining row, it calculates:
    - clicks_pct_vs_query: share of total clicks that URL gets for that query.
    - clicks_pct_vs_page: share of that page’s total clicks coming from this query.

  • Flag actions. If a URL owns at least 10 % of clicks at both the query and page level, it’s labeled “Potential Opportunity” (worth consolidating or refocusing). Anything weaker is marked “Risk.” For more ideas on streamlining your content process, check out our post on Content Automation.

The script returns a tidy JSON table ready for inspection or export.

Customizing This App

Customization

Description

Adjust the time window

Change the date_preset to analyze different periods—use 90 days for recent trends or 16 months for deeper historical audits.

Tweak the opportunity threshold

Modify the cut-off value (e.g., from 0.10 to 0.20 or 0.05) to make the filter stricter or more lenient based on your site’s traffic.

Add positions or CTR logic

Incorporate average position or click-through rate checks to highlight cases where neither page ranks in the top 20—helpful for finding easy optimization wins.

Write follow-up actions

Append columns with actionable suggestions like “merge,” “canonical,” or “re-optimize” based on detected page types or template patterns.

Pipe to other Moonlit tools

Automatically send flagged URLs to tools like a content-brief generator or internal-linking workflow for seamless, closed-loop optimization. Check out our guide on stitching workflows here.

Running It at Scale with Bulk Runs

  1. Create a CSV with two columns: GSC Property name and (optional) Excluded keywords.

  2. Head to Bulk Runs, choose this app, and upload the file.

  3. Map each column to its corresponding input and hit Run. Moonlit spins up a separate analysis for every property—ideal for agencies managing dozens of sites.

Why It Matters

With AI content multiplying and Google rewarding clear topical hubs, cannibalization quietly erodes authority, click-throughs, and conversions. A quick monthly scan with this app surfaces the conflicts so you can consolidate pages, streamline internal links, and send stronger signals to Google—all before traffic slips away.

Start Engineering your
Content Growth Engine

Start Engineering your
Content Growth Engine

Start Engineering your
Content Growth Engine

Title Title Title Title Title Title Title Title Title Title Title