Consider a site where navigation links to /products/widget, the canonical says /catalog/widget, and the sitemap lists /products/widget/. Every URL may work. The site is still telling three versions of the same story.
I prefer to write down the intended public URL before changing any rule. That becomes the reference for the redirect, the canonical element, the sitemap, and internal links.
A canonical is a signal, not a traffic rule
A redirect changes where a browser goes. A rel="canonical" element proposes the representative URL for indexing while leaving the page accessible. Google treats redirects and canonical annotations as strong canonicalization signals; sitemap inclusion is a weaker signal. Google can still choose a different canonical.
Use a redirect when visitors should move to the new address. Use a canonical when duplicate or similar URLs need to remain accessible for a reason. Those are different product decisions, even when their search goals overlap.
Walk through one concrete example
Suppose /shoes?campaign=spring and /shoes contain the same catalog content. The campaign parameter may be useful for measurement without deserving a separate indexed page. A consistent canonical can identify /shoes as the preferred version.
Now suppose /shoes?size=9 contains a meaningfully different filtered experience. Do not copy the campaign rule to every parameter without discussing the intended search behavior. Whether a filter should be indexable depends on the content and site strategy, not merely the presence of a question mark.
An audit I would actually use
Take a representative sample of templates, locales, and parameter combinations. For each one, capture the requested URL, redirect chain, final status, rendered canonical, sitemap membership, and internal-link target. Inspect the rendered page if client-side code changes its metadata.
Look especially for a canonical that redirects, a canonical pointing to an error page, or different locale pages all pointing to one language. These are useful review findings because they are concrete contradictions.
Then check Search Console’s selected canonical for important pages after recrawling. A successful deployment proves that you published the signal. It does not prove that the search engine adopted it.
Good URL hygiene is mostly agreement between ordinary systems. That is why ownership across content, SEO, and platform teams matters more than finding one clever tag.