Group query/page exports into candidate overlap clusters — pages that share one search intent within one segment — and order them as a review queue, with the source rows that produced every candidate travelling with it.
This walkthrough uses the tool's public README and checked-in example files. Run the command from a repository checkout with Node.js 22+; inspect the source before using it on your own files.
Run the checked-in example
node bin/keyword-cannibalization-map.mjs --root examples/exports-clean
node bin/keyword-cannibalization-map.mjs --root examples/exports-clean --json
node bin/keyword-cannibalization-map.mjs --root examples/exports-clean --map build/cannibalization.map.json
node bin/keyword-cannibalization-map.mjs --helpRead the result
stdout carries the report and nothing else, so it pipes straight into a JSON parser. Diagnostics go to stderr.
Where this check stops
Every limit is explicit and enforced: maxExports, maxExportBytes, maxRows, maxFieldChars, maxDepth, maxIntentGroups, maxClusterRows. Exceeding one produces a finding naming it and an incomplete report — never a silent truncation.
Before adapting the command to your own workflow, review the accepted inputs, exit codes and safety boundaries in the README.
Compiled with AI assistance from checked-in public documentation and example scripts. Run the example and review the repository's current documentation before relying on its result.