Detect keyword cannibalization

The tool finds queries that more than one of the site's own pages competes for. Search data alone cannot answer this. Both engines show one result per site, so the page that loses every time earns no impressions and is missing from every feed. That settled case is the damaging one. Each query gets a verdict, and the verdict says what you may do. confirmed means two or more pages did earn impressions. Each page is listed with its share of those impressions, so a merge has a page to keep. pattern is co_occurring if they showed on the same day, and alternating if they never did. alternating means the engine is still choosing between them. possible means one page ranks, and a URL in the site's sitemap matches the query on the slug and the title words. That page was never read. Open the URL in sitemapCandidates and decide. This is the strongest claim the tool can make about that URL. none means one page ranks and nothing else in the sitemap targets the query. The query is clear, and it is safe to optimize that page. unknown means there is no usable sitemap, or a crawl stopped early. A missing page then proves nothing. rows lists the confirmed and possible queries. verdicts counts every step, including the cleared ones. inventory says how complete the page list is, and how old it is. Pass query to get one query's row on whatever step it lands on.

detect_keyword_cannibalization

The tool finds queries that more than one of the site's own pages competes for.

Search data alone cannot answer this. Both engines show one result per site, so the page that loses every time earns no impressions and is missing from every feed. That settled case is the damaging one. Each query gets a verdict, and the verdict says what you may do.

confirmed means two or more pages did earn impressions. Each page is listed with its share of those impressions, so a merge has a page to keep. pattern is co_occurring if they showed on the same day, and alternating if they never did. alternating means the engine is still choosing between them.

possible means one page ranks, and a URL in the site's sitemap matches the query on the slug and the title words. That page was never read. Open the URL in sitemapCandidates and decide. This is the strongest claim the tool can make about that URL.

none means one page ranks and nothing else in the sitemap targets the query. The query is clear, and it is safe to optimize that page.

unknown means there is no usable sitemap, or a crawl stopped early. A missing page then proves nothing.

rows lists the confirmed and possible queries. verdicts counts every step, including the cleared ones. inventory says how complete the page list is, and how old it is. Pass query to get one query's row on whatever step it lands on.

Parameters

ParameterTypeRequiredNotes
sitestringYesThe site to look up, as a bare domain ("example.com") or a URL. The tool strips the scheme, www, path, and trailing slash. The site must belong to a workspace you own. Call list_sites first if you are not sure of the exact domain.
windowDaysintegerNoLength of the current window, in days. Defaults to 28.
tostringNoLast day of the current window (YYYY-MM-DD). Defaults to the most recent date either engine has data for.
minImpressionsintegerNoMinimum window impressions for a page to count as competing for the query. This keeps one stray impression from making a healthy query look contested. Defaults to 10.
querystringNoAsk about one query only. The row comes back on whatever verdict it gets, including none and unknown. The unfiltered response only counts those two.
limitintegerNoMaximum rows to return, sorted by relevance. Defaults to 50.
searchVertical"web" | "image" | "video"NoWhich Google search type to read: web (the default), image, or video. Bing Webmaster Tools does not split search types on any traffic report, so image and video return Google only. The response records that Bing was left out, in unsupportedInputs. A missing Bing number then means Bing was not measured. Defaults to "web".
Full input JSON SchemaTypes, defaults and validation rules
json
{  "$schema": "https://json-schema.org/draft/2020-12/schema",  "type": "object",  "properties": {    "site": {      "type": "string",      "minLength": 1,      "description": "The site to look up, as a bare domain (\"example.com\") or a URL. The tool strips the scheme, www, path, and trailing slash. The site must belong to a workspace you own. Call list_sites first if you are not sure of the exact domain."    },    "windowDays": {      "default": 28,      "description": "Length of the current window, in days.",      "type": "integer",      "exclusiveMinimum": 0,      "maximum": 365    },    "to": {      "description": "Last day of the current window (YYYY-MM-DD). Defaults to the most recent date either engine has data for.",      "type": "string"    },    "minImpressions": {      "default": 10,      "description": "Minimum window impressions for a page to count as competing for the query. This keeps one stray impression from making a healthy query look contested.",      "type": "integer",      "minimum": 0,      "maximum": 9007199254740991    },    "query": {      "description": "Ask about one query only. The row comes back on whatever verdict it gets, including none and unknown. The unfiltered response only counts those two.",      "type": "string",      "minLength": 1    },    "limit": {      "default": 50,      "description": "Maximum rows to return, sorted by relevance.",      "type": "integer",      "exclusiveMinimum": 0,      "maximum": 500    },    "searchVertical": {      "default": "web",      "description": "Which Google search type to read: web (the default), image, or video. Bing Webmaster Tools does not split search types on any traffic report, so image and video return Google only. The response records that Bing was left out, in unsupportedInputs. A missing Bing number then means Bing was not measured.",      "type": "string",      "enum": [        "web",        "image",        "video"      ]    }  },  "required": [    "site"  ]}

Response

Full output JSON SchemaEvery field the response can contain
json
{  "$schema": "https://json-schema.org/draft/2020-12/schema",  "type": "object",  "properties": {    "site": {      "type": "string"    },    "workspaceId": {      "type": "string",      "format": "uuid",      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"    },    "searchVertical": {      "type": "string",      "enum": [        "web",        "image",        "video"      ]    },    "currentWindow": {      "type": "object",      "properties": {        "start": {          "type": "string"        },        "end": {          "type": "string"        }      },      "required": [        "start",        "end"      ],      "additionalProperties": false    },    "rows": {      "type": "array",      "items": {        "type": "object",        "properties": {          "query": {            "type": "string"          },          "verdict": {            "type": "string"          },          "evidence": {            "type": "string"          },          "pageCount": {            "type": "integer",            "minimum": -9007199254740991,            "maximum": 9007199254740991          },          "totalClicks": {            "type": "integer",            "minimum": -9007199254740991,            "maximum": 9007199254740991          },          "totalImpressions": {            "type": "integer",            "minimum": -9007199254740991,            "maximum": 9007199254740991          },          "pages": {            "type": "array",            "items": {              "type": "object",              "properties": {                "page": {                  "type": "string"                },                "google": {                  "anyOf": [                    {                      "type": "object",                      "properties": {                        "clicks": {                          "type": "integer",                          "minimum": -9007199254740991,                          "maximum": 9007199254740991                        },                        "impressions": {                          "type": "integer",                          "minimum": -9007199254740991,                          "maximum": 9007199254740991                        },                        "position": {                          "anyOf": [                            {                              "type": "number"                            },                            {                              "type": "null"                            }                          ]                        },                        "measuredDays": {                          "type": "integer",                          "minimum": -9007199254740991,                          "maximum": 9007199254740991                        }                      },                      "required": [                        "clicks",                        "impressions",                        "position",                        "measuredDays"                      ],                      "additionalProperties": {}                    },                    {                      "type": "null"                    }                  ]                },                "bing": {                  "anyOf": [                    {                      "type": "object",                      "properties": {                        "clicks": {                          "type": "integer",                          "minimum": -9007199254740991,                          "maximum": 9007199254740991                        },                        "impressions": {                          "type": "integer",                          "minimum": -9007199254740991,                          "maximum": 9007199254740991                        },                        "position": {                          "anyOf": [                            {                              "type": "number"                            },                            {                              "type": "null"                            }                          ]                        },                        "measuredDays": {                          "type": "integer",                          "minimum": -9007199254740991,                          "maximum": 9007199254740991                        }                      },                      "required": [                        "clicks",                        "impressions",                        "position",                        "measuredDays"                      ],                      "additionalProperties": {}                    },                    {                      "type": "null"                    }                  ]                },                "totalClicks": {                  "type": "integer",                  "minimum": -9007199254740991,                  "maximum": 9007199254740991                },                "totalImpressions": {                  "type": "integer",                  "minimum": -9007199254740991,                  "maximum": 9007199254740991                },                "impressionShare": {                  "type": "number"                }              },              "required": [                "page",                "google",                "bing",                "totalClicks",                "totalImpressions",                "impressionShare"              ],              "additionalProperties": {}            }          },          "google": {            "type": "object",            "properties": {              "attached": {                "type": "boolean"              },              "pageCount": {                "type": "integer",                "minimum": -9007199254740991,                "maximum": 9007199254740991              },              "pattern": {                "anyOf": [                  {                    "type": "string"                  },                  {                    "type": "null"                  }                ]              },              "multiPageDays": {                "type": "integer",                "minimum": -9007199254740991,                "maximum": 9007199254740991              }            },            "required": [              "attached",              "pageCount",              "multiPageDays"            ],            "additionalProperties": {}          },          "bing": {            "type": "object",            "properties": {              "attached": {                "type": "boolean"              },              "pageCount": {                "type": "integer",                "minimum": -9007199254740991,                "maximum": 9007199254740991              },              "pattern": {                "anyOf": [                  {                    "type": "string"                  },                  {                    "type": "null"                  }                ]              },              "multiPageDays": {                "type": "integer",                "minimum": -9007199254740991,                "maximum": 9007199254740991              }            },            "required": [              "attached",              "pageCount",              "multiPageDays"            ],            "additionalProperties": {}          },          "sitemapCandidates": {            "type": "array",            "items": {              "type": "object",              "properties": {                "page": {                  "type": "string"                },                "url": {                  "type": "string"                },                "lastmod": {                  "anyOf": [                    {                      "type": "string"                    },                    {                      "type": "null"                    }                  ]                },                "matchedTokens": {                  "type": "array",                  "items": {                    "type": "string"                  }                },                "coverage": {                  "type": "number"                },                "titleMatched": {                  "type": "boolean"                }              },              "required": [                "page",                "url",                "matchedTokens",                "coverage",                "titleMatched"              ],              "additionalProperties": {}            }          }        },        "required": [          "query",          "verdict",          "evidence",          "pageCount",          "totalClicks",          "totalImpressions",          "pages",          "google",          "bing",          "sitemapCandidates"        ],        "additionalProperties": {}      }    },    "inventory": {      "type": "object",      "properties": {        "status": {          "anyOf": [            {              "type": "string"            },            {              "type": "null"            }          ]        },        "usable": {          "type": "boolean"        },        "fetchedAt": {          "anyOf": [            {              "type": "string"            },            {              "type": "null"            }          ]        },        "pageCount": {          "type": "integer",          "minimum": -9007199254740991,          "maximum": 9007199254740991        },        "indexedPageCount": {          "type": "integer",          "minimum": -9007199254740991,          "maximum": 9007199254740991        },        "truncated": {          "type": "boolean"        },        "siteUrl": {          "anyOf": [            {              "type": "string"            },            {              "type": "null"            }          ]        },        "reason": {          "anyOf": [            {              "type": "string"            },            {              "type": "null"            }          ]        }      },      "required": [        "usable",        "pageCount",        "indexedPageCount",        "truncated"      ],      "additionalProperties": {}    },    "verdicts": {      "type": "object",      "properties": {        "confirmed": {          "type": "integer",          "minimum": -9007199254740991,          "maximum": 9007199254740991        },        "possible": {          "type": "integer",          "minimum": -9007199254740991,          "maximum": 9007199254740991        },        "none": {          "type": "integer",          "minimum": -9007199254740991,          "maximum": 9007199254740991        },        "unknown": {          "type": "integer",          "minimum": -9007199254740991,          "maximum": 9007199254740991        },        "inventoryTested": {          "type": "integer",          "minimum": -9007199254740991,          "maximum": 9007199254740991        },        "queriesExamined": {          "type": "integer",          "minimum": -9007199254740991,          "maximum": 9007199254740991        }      },      "required": [        "confirmed",        "possible",        "none",        "unknown",        "inventoryTested",        "queriesExamined"      ],      "additionalProperties": {}    },    "unsupportedInputs": {      "type": "array",      "items": {        "type": "object",        "properties": {          "field": {            "type": "string"          },          "engine": {            "anyOf": [              {                "type": "string"              },              {                "type": "null"              }            ]          },          "reason": {            "type": "string"          }        },        "required": [          "field",          "reason"        ],        "additionalProperties": {}      }    },    "lastSyncedAt": {      "anyOf": [        {          "type": "string"        },        {          "type": "null"        }      ]    }  },  "required": [    "site",    "workspaceId",    "searchVertical",    "currentWindow",    "rows",    "inventory",    "verdicts",    "unsupportedInputs"  ],  "additionalProperties": false}

On This Page