Find keyword cannibalization
find_keyword_cannibalizationFinds tracked keywords for which two of the site's own pages will compete. This is BlogSEO's definition, not Search Console's "two URLs for one query" (Search Console gives one top page per keyword): a keyword is cannibalized when the page Google already ranks for it is not the landing page and is either a blog article (any position) or another page ranking within the website's cannibalization_max_position (top 30 by default), AND a BlogSEO article targets that same keyword without being the ranking page (with include_planned, a still-scheduled article counts too). Scans the Google keywords of the default locale that have a Search Console ranking page; snapshots older than 30 days are ignored, so it needs a recent sync. Returns up to top keywords (max 200), best position first, each with the ranking URL and its kind (blog_article or other_page), ranking_article_id when the ranking page is a BlogSEO article, the competing articles (article_id, headline, slug, status, live url when known; status scheduled means article_id is a scheduled_article_id) and a deterministic suggestion with its reason: consolidate when a published article competes with a ranking blog article, differentiate otherwise (for a planned article: rewrite its brief or drop the plan). Tells you when Search Console is not connected instead of returning nothing silently. Not a rank tracker: use get_keyword_rankings for positions and get_keyword for one keyword's articles. Pass website_id when the account has several websites (see get_account).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | How many cannibalized keywords to return, best position first. | |
| website_id | No | Website id from get_account. Optional when the account has a single website. | |
| include_planned | No | Also flag keywords whose competing article is still scheduled and not generated yet. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| counts | Yes | ||
| locale | Yes | ||
| gsc_status | Yes | ||
| website_id | Yes | Website the result belongs to. | |
| gsc_fix_url | No | Where to connect Search Console; only present when it is not connected. | |
| gsc_connected | Yes | Whether Google Search Console is connected for the website. | |
| gsc_data_stale | Yes | Search Console data older than 30 days or never synced. | |
| include_planned | Yes | ||
| gsc_last_synced_at | Yes | ||
| cannibalized_keywords | Yes | ||
| cannibalization_max_position | Yes |