How to Find Keyword Cannibalization in Search Console With Codex

How to Find Keyword Cannibalization in Search Console With Codex

Aident AI

Three competing blue and coral page paths pass through an amber diagnostic lens and resolve into one cyan canonical path.

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:

Follow https://aident.ai/SETUP.md

Then confirm the Aident account and Vault state:

aident account auth status
aident vault vault --action status

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;

  • query and page dimensions;

  • 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:

  1. lowercase the query;

  2. trim leading and trailing whitespace;

  3. keep punctuation when it changes the actual error or product string; and

  4. 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:

pageCount >= 2
AND totalImpressions >= 20
AND leadingPageImpressionShare < 0.90

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 with query and page dimensions, 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.

Home

Home

Home

Integrations

Integrations

Integrations

Vault

Vault

Vault

Audit

Audit

Audit

Arana Grande

Arana Grande

Arana Grande

Free

Free

Free

30-day audit summary

30-day audit summary

30-day audit summary

Daily action-call volume and the latest receipts from the Loadout audit trail.

Daily action-call volume and the latest receipts from the Loadout audit trail.

Daily action-call volume and the latest receipts from the Loadout audit trail.

View Audit

View Audit

View Audit

Loadout usage

Loadout usage

Loadout usage

617 action calls in the last 30 days

617 action calls in the last 30 days

617 action calls in the last 30 days

May 19 - Jun 17

May 19 - Jun 17

May 19 - Jun 17

10 active days

10 active days

10 active days

Less

Less

Less

More

More

More

Recent activity

Recent activity

Recent activity

Latest action-call receipts from connected agents

Latest action-call receipts from connected agents

Latest action-call receipts from connected agents

Apr 23, 09:23 AM

Apr 23, 09:23 AM

Apr 23, 09:23 AM

Shopify

Shopify

Shopify

Creates Or Updates An Asset For A Theme

Creates Or Updates An Asset For A Theme

Creates Or Updates An Asset For A Theme

Success

Success

Success

Apr 23, 09:21 AM

Apr 23, 09:21 AM

Apr 23, 09:21 AM

Shopify

Shopify

Shopify

Update Products Param Product Id

Update Products Param Product Id

Update Products Param Product Id

Success

Success

Success

Apr 23, 08:53 AM

Apr 23, 08:53 AM

Apr 23, 08:53 AM

Shopify

Shopify

Shopify

Update Products Param Product Id

Update Products Param Product Id

Update Products Param Product Id

Failed

Failed

Failed

Apr 22, 22:13 PM

Apr 22, 22:13 PM

Apr 22, 22:13 PM

Shopify

Shopify

Shopify

Create Product Image

Create Product Image

Create Product Image

Success

Success

Success

Apr 22, 22:12 PM

Apr 22, 22:12 PM

Apr 22, 22:12 PM

Shopify

Shopify

Shopify

Create Product Image

Create Product Image

Create Product Image

Success

Success

Success

Connected integration coverage

Connected integration coverage

Connected integration coverage

162

162

162

of 753 accessible connected

of 753 accessible connected

of 753 accessible connected

Callable actions

Callable actions

Callable actions

1,126

1,126

1,126

Vault credentials

Vault credentials

Vault credentials

8

8

8

Explore what's possible

Explore what's possible

Explore what's possible

See all Integrations

See all Integrations

See all Integrations

Google Ads

Google Ads

Google Ads

All available Goolge Ads tools via...

All available Goolge Ads tools via...

All available Goolge Ads tools via...

X (twitter)

X (twitter)

X (twitter)

All available X tools via...

All available X tools via...

All available X tools via...

Github

Github

Github

All available Github tools via...

All available Github tools via...

All available Github tools via...

Notion

Notion

Notion

All available Notion tools via...

All available Notion tools via...

All available Notion tools via...

Slack

Slack

Slack

All available Slack tools via...

All available Slack tools via...

All available Slack tools via...

Firecrawl

Firecrawl

Firecrawl

All available Firecrawl tools via...

All available Firecrawl tools via...

All available Firecrawl tools via...

753 integrations are available for loadouts.

753 integrations are available for loadouts.

753 integrations are available for loadouts.

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.

Try Aident Loadout

Empower your Codex or OpenClaws to get real jobs done. Connect 27,000+ tools in one prompt, and let your agents deliver real results.

Try Aident Loadout

Empower your Codex or OpenClaws to get real jobs done. Connect 27,000+ tools in one prompt, and let your agents deliver real results.

Try Aident Loadout

Empower your Codex or OpenClaws to get real jobs done. Connect 27,000+ tools in one prompt, and let your agents deliver real results.