Aident AI

How to Find Keyword Cannibalization in Search Console With Codex
To find potential keyword cannibalization in Google Search Console with Codex, export final Search Analytics rows with both query and page dimensions, group the rows by normalized query, and flag queries receiving impressions across multiple canonical pages. Then compare equal periods and review search intent before changing anything. Multiple ranking pages are a diagnostic signal, not proof that one page is harming another.
A practical first pass keeps four values together: total query impressions, the number of pages receiving them, the leading page's impression share, and the performance of each page. That narrows thousands of rows to a review queue without turning every shared query into an automatic redirect.
This workflow uses Aident Loadout to give Codex bounded access to the current Search Console Action. It produces a reviewed decision list, not a destructive content-cleanup script.
What Counts as a Cannibalization Signal?
Start with a query that has impressions for two or more pages during one complete window. For each query, calculate:
Signal | Calculation | Why it matters |
|---|---|---|
Page count | Distinct canonical pages for the query | Finds shared query ownership |
Query impressions | Sum of impressions across those pages | Prioritizes observable demand |
Leading-page share | Highest page impressions divided by total query impressions | Shows whether one page clearly dominates |
Page-level clicks and position | Preserve each Search Console row | Separates useful secondary visibility from a weak owner |
A low leading-page share can justify a closer look, but it is not a universal severity score. A documentation page and a product page may both deserve visibility for a broad query. Country, device, language, freshness, and result features can also change which page appears.
Keyword cannibalization is an intent and ownership problem. Duplicate URLs are a different technical case. Google may group substantially duplicate URLs and choose a canonical, but two distinct pages can still appear for the same query because they serve different reader jobs.
What You Need
Prepare:
a verified Google Search Console property;
a connected Google account with read permission;
the public Aident CLI installed and authenticated;
one complete analysis window and an equal preceding window; and
a documented rule for branded and intentionally shared queries.
Give Codex the canonical setup instruction:
Then confirm the Aident account and Vault state:
If Search Console is not connected, follow How to Connect Google Search Console to Codex With Aident Loadout before running the audit.
Step 1: Discover the Current Search Analytics Action
Ask Codex to search the live Aident catalog for the Search Console Action that returns clicks, impressions, CTR, and position. Inspect its current schema before execution. Do not preserve an internal Action identifier in a permanent prompt because catalog versions and accepted inputs can change.
Confirm these inputs:
exact property identifier;
start and end dates;
queryandpagedimensions;final data state;
web search type;
page aggregation;
row limit and pagination; and
any country, device, page, or query filters.
Run a small proof request first. Verify that the connected account can read the property and that each row contains one query, one page, clicks, impressions, CTR, and position.
Step 2: Pull Equal Complete Windows
Search Console data normally lags by two or three days. End the current window on the latest complete date and choose the immediately preceding period with the same number of days.
Keep the property, dimensions, search type, aggregation, filters, data state, row limit, pagination, and brand rule identical. Record the extraction time and exact dates. A moving label such as "last 28 days" is not enough for a reproducible comparison.
Paginate until the response contains fewer rows than the requested limit. Search Analytics prioritizes top rows and can omit anonymized queries, so describe the result as the reported Search Console sample for the selected scope, not a complete keyword database.
Step 3: Normalize and Group Query-Page Rows
Normalize query text conservatively:
lowercase the query;
trim leading and trailing whitespace;
keep punctuation when it changes the actual error or product string; and
apply the same explicit brand rule to both periods.
Then group by normalized query. Keep every page row inside its group and calculate page count, total impressions, total clicks, and leading-page impression share.
One bounded review rule is:
Those thresholds are queue controls, not Google's definition of cannibalization. Change them only with a written reason and preserve the old result for comparison.
Step 4: Remove Benign Shared Visibility
Review the highest-impact groups before recommending a fix. Exclude or label cases such as:
branded and navigational queries where several official pages can be useful;
localized pages intended for different languages or countries;
a product page and an educational page serving different funnel stages;
a temporary new page that has not accumulated a complete comparison window; and
close queries grouped by a model even though their reader jobs differ.
Do not use token similarity alone. Open the pages, compare their primary answers, inspect current search results, and decide whether one canonical should own the job.
Step 5: Compare the Same Query Across Time
A single period shows distribution, not whether the split is becoming harmful. Compare the exact query-page group with the equal prior period.
Look for:
Pattern | Interpretation | Next check |
|---|---|---|
One page consistently earns most impressions and clicks | Clear ownership may already exist | Protect the owner and monitor |
Two pages exchange the lead across periods | Ownership may be unstable | Compare intent, internal links, and page changes |
A new page gains impressions without reducing the owner | Useful SERP diversity is possible | Confirm the reader jobs differ |
Combined impressions fall while ownership fragments | Higher-priority cannibalization suspect | Review consolidation and differentiation |
Several pages appear but none earns clicks | Query fit or snippet quality may be the larger problem | Inspect results before merging content |
Position is not directly additive across pages. Preserve page-level positions and weight any aggregate position by impressions.
A First-Hand Example From Aident
We ran this method on Aident's sitewide query-page rows for two equal, complete 28-day periods. The directional brand rule excluded explicit Aident, Aiden AI, and Loadout strings plus three observed brand misspellings. We required at least 20 total impressions and less than 90 percent leading-page share for the bounded review queue.
Window | Reported non-branded queries | Queries on 2+ pages | Shared queries with 20+ impressions | Bounded review queue |
|---|---|---|---|---|
July 1 to July 28, 2026 | 946 | 8 | 2 | 1 |
July 29 to August 25, 2026 | 3,366 | 124 | 30 | 17 |
The review queue grew as Aident's reported query footprint and page inventory grew. That does not prove that 17 queries were harmful or that new content caused the change. Search Console returns privacy-filtered top rows, older pages had more time to index, and the site added many canonicals during the later period.
One useful review case was node_repl exec context not found. The exact troubleshooting guide received 27 impressions and 8 clicks at position 2.41, while a nearby computer-use error guide received 25 impressions and 1 click at position 6.48. The leading page held only 52 percent of impressions. That is worth checking because both pages answer closely related errors, but the stronger exact-match page and its clicks argue against an automatic merge. The next action is to protect its canonical ownership, clarify the neighboring page's distinct failure mode, and review internal anchors.
The broader keyword-footprint workflow explains how to keep ranking keyword counts, Top 3, Top 10, Top 20, clicks, impressions, and average position together.
Step 6: Choose the Smallest Safe Fix
Match the action to the evidence:
Evidence | Preferred action |
|---|---|
Same query, distinct reader jobs, stable performance | Keep both pages and clarify titles, openings, and internal anchors |
Same job, one strong owner, one weak adjacent page | Move useful material to the owner, then review a redirect |
Substantially duplicate URLs | Use a consistent canonical signal, sitemap entry, and internal link target |
Lead page is correct but internal links point elsewhere | Update relevant internal links toward the owner |
Neither page serves the query well | Improve the best owner before creating another page |
Proposed new article overlaps an existing owner | Expand or refresh the owner instead |
Use canonical tags for duplicate or very similar URL variants, not as a shortcut for two useful pages with different intent. Before a redirect or deletion, audit backlinks, conversions, internal links, dependent documentation, and rollback needs. Keep every destructive change behind human review.
Common Mistakes
Calling Every Shared Query Cannibalization
Multiple pages can legitimately serve different intents. Treat shared visibility as a review signal.
Sorting Only by Page Count
A query with many pages and one impression is usually less urgent than a two-page split with material clicks or impressions. Keep demand and concentration beside page count.
Looking at One Period
Ranking systems and query mixes move. Compare equal complete windows before diagnosing ownership drift.
Merging Before Checking Intent
Two pages that use similar words can solve different jobs. Inspect the content and live results before consolidating.
Using a Canonical Tag as a Content Strategy
Canonicalization helps Google choose among duplicate or substantially similar URLs. It does not decide which of two distinct reader jobs the site should keep.
Reporting Search Cleanup as Product Growth
Search impressions and clicks measure discovery. Track the tagged setup visit, Search Console connection, and first successful Search Analytics execution separately.
Reusable Codex Prompt
Paste this after setup and replace the bracketed values:
Use Aident Loadout to inspect the current Google Search Console Search Analytics schema and confirm my connected property. Run a small proof read, then export final web data for
[current start]to[current end]and the immediately preceding equal period withqueryandpagedimensions, page aggregation, and bounded pagination. Apply this case-insensitive brand rule:[regex]. Normalize queries conservatively, group rows by exact normalized query, and preserve every page's clicks, impressions, CTR, and position. Create a review queue for queries with at least[page count]pages,[impression threshold]total impressions, and less than[leading-page share]concentration. Treat the queue as a signal, not proof. Compare the same groups across periods, inspect existing canonical ownership and current result intent, and recommend protect, differentiate, improve, consolidate, or investigate. Do not redirect, delete, submit a sitemap, change a canonical, expose credentials, or perform another write.
Set up Aident Loadout and run one Search Console cannibalization review.
For the full research-to-publication loop, continue with Aident's agentic SEO pipeline case study.
Sources
Refresh this guide when Google's Search Analytics or canonical guidance changes, the live Aident Action schema changes, or day-30 evidence establishes a better review threshold for Aident's publishing cadence.



The one tool
for every tool
your agent needs.
Give any AI agent real capabilities in seconds. Connect 27,000+ tools once, skip the setup headache, and let your agents execute.
