You know two pages are cannibalizing each other by checking Search Console for a single query that two of your URLs both rank for, often flipping between them, while neither wins cleanly and they split the clicks and impressions between them. That is the actual test: one query served by two URLs, both underperforming, targeting the same intent. Topic similarity by itself is not cannibalization, so the diagnostic lives in the query data, not in your impression that two articles feel alike.
To run the check, open the Performance report and pivot from queries to pages, or filter by a specific query and look at which URLs appear for it. The telltale pattern is two of your own URLs surfacing for the same search term, frequently with positions that wobble over time as Google keeps testing which one to favor. When you also see the clicks and impressions for that query divided across both pages rather than concentrated on one, that division is the cannibalization, because the two pages are competing for the same slot instead of one of them owning it.
The reason to insist on this data step is that it filters out false alarms. Two pages can cover related topics and still rank for completely different queries, each owning its own searches, in which case there is nothing to fix even though the subjects overlap. Conversely, two pages that look distinct on the surface can quietly compete for the same query. Only the query report tells you which situation you are in, so judging by topic resemblance leads you to merge pages that were doing fine or miss the ones genuinely splitting signals.
Before assuming a problem, pull the query report and confirm two competing URLs. Identify the shared query, verify that both your pages appear for it with split clicks and unstable positions, and confirm they are chasing the same intent. Only once the data shows one-query-two-URLs-both-underperforming should you move on to deciding what to do about it.