Full Answer
GA4's channel report isn't reading your mind; it's pattern-matching strings. Every session carries a source and medium, and GA4 runs those values through its default channel grouping, a fixed set of rules that decides whether a visit is Paid Search, Display, Organic Social, Email, Referral, or Direct. The medium does most of the work: cpc, ppc, and paidsearch route to paid channels, email routes to Email, and a recognised social domain routes to Organic Social.
This is why naming discipline matters. GA4 expects specific tokens. If you write utm_medium=ppc in one campaign and paid-search in another, they land in different buckets, and a typo or a capital letter can push a session into Unassigned. Worse, if the UTMs are missing entirely, because a redirect or browser stripped them, GA4 has nothing to classify and the session defaults to Direct.
The takeaway for a WooCommerce operator is that channel reporting is only as good as the parameters arriving intact and named to GA4's conventions. Use the reserved medium values GA4 recognises, keep source and campaign names consistent across platforms, and verify that the tags actually reach the analytics hit rather than being lost in transit. If you also store first-touch source server-side on the order, you keep a second, durable record that doesn't depend on GA4's classification at all.