Every product has two addresses
Shopify serves each product at /products/handle and again at /collections/name/products/handle. The canonical tag points at the clean one, which is correct. The problem is that most themes link to the collection-scoped version from the grid, so your own links push authority at the URL you told search engines to ignore.
Fix — Rewrite collection grid, related-product and blog links to the /products/ form.