Find Cannibalized Pages (Google Search Console)
This n8n template helps you detect page cannibalization in Google Search Console (GSC): situations where multiple pages on your site rank for the same query and more than one page gets clicks . Use it to spot competing URLs, consolidate content, improve internal linking, and protect your CTR/rankings.
Good to know
-
Data source: Google Search Console Search Analytics (Dimensions:
query , page ).
-
Scope: Defaults to last 12 months and up to 10,000 rows per run (adjustable).
-
Logic: Keeps only queries with >1 page and where the second page has clicks > 0 → higher confidence of true cannibalization.
-
Privacy: Template ships with a placeholder property (
sc-domain:example.com ) and a neutral credential name; replace both after import.
-
Cost: n8n nodes used here are free. GSC usage is also free (subject to Google limits).
How it works
-
Manual Start — run the workflow on demand.
-
Google Search Console — fetch last 12 months of query–page rows.
-
Summarize — group by
query , building two arrays:
-
appended_page[] → all pages seen for that query
-
appended_clicks[] → clicks for each page-query row (aligned with appended_page )
-
Filter — pass only queries where:
-
count_query > 1 (more than one page involved), and
-
appended_clicks[1] > 0 (the second page also received clicks)
-
Output — list of cannibalized queries with the competing pages and their click counts.
Example output
{
"query": "best running shoes",
"appended_page": [
"https://example.com/blog/best-running-shoes",
"https://example.com/guide/running-shoes-2025"
],
"appended_clicks": [124, 37],
"count_query": 3
}
How to use
- Import the JSON into n8n.
- Open the Google Search Console node and:
- Connect your Google Search Console OAuth2 credential.
- Replace
siteUrl with your property ( sc-domain:your-domain.com ).
- Press Execute Workflow on Manual Start .
- Review the output — focus on queries where the second page has meaningful clicks.
💡 Tip: If your site is large, start with a shorter date range (eg, 90 days) or raise rowLimit .
Requirements
- Access to the target property in Google Search Console .
- One Google Search Console OAuth2 credential in n8n.
Customizing this workflow
-
More robust detection: In the Summarize node, change
clicks aggregation from append to sum . Then filter for “ at least 2 pages with sum_clicks > 0 ” to avoid any dependency on row order.
-
Scoring & sorting: Add a Code/Function node to sort competing pages by clicks or impressions and compute click-share per page.
-
Deeper analysis: Include
impressions and position in the GSC node and extend the summary to prioritize fixes (eg, high impressions + split clicks).
-
Reporting: Send results to Google Sheets or export to CSV ; create a dashboard of top cannibalized queries.
-
Thresholds: Expose minimum click thresholds as workflow variables (eg, second page clicks ≥ 3) to reduce noise.
Troubleshooting
-
Empty results: Widen date range, increase
rowLimit , or temporarily relax the filter (remove the second-page click condition to validate data flow).
-
No property data: Ensure you used
sc-domain: vs. https:// property format correctly and that your user has GSC access.
-
Credential issues: Reconnect the OAuth2 credential and reauthorize if needed.