The reason why it is showing for Direct is that Sitecore has a default pipeline to track this channel out-of-the-box.
The best approach from those two ways depends on your implementation requirements, whether what you're trying to achieve is a custom requirement. Mostly for social channel the OOTB Sitecore Campaign Creator approach should be fine. If it is setup, then you will get data in analytics for these channels (Refer the 1st link).
- If you want to achieve this using Out-Of-The-Box in Sitecore without any coding, then you can create a campaign using Sitecore Campaign Creator and associate the required channel.
But, you may be aware that if you go by Campaign Creator approach, there is a start date and end date.
- If you go by the pipeline approach, you'll be doing coding.
Below are some great helpful links that I used to refer :
- https://www.oshyn.com/blog/2019/12/tracking-sitecore-campaigns (For the campaign approach)
- https://medium.com/@syedtawhidrahman/sitecore-how-to-track-interactions-that-your-contacts-have-with-your-website-through-sitecore-a58e396d11cd (For the custom requirement / coding approach)
Apart from the Direct Channel, the other channels that Sitecore tracks by default as of Sitecore version 9.3 are,
- Organic non-branded search
- Organic branded search
Anyways, for tracking social channels you may need to implement custom code like the linkedin example given here - https://sitecorerockz.wordpress.com/2020/08/30/sitecore-map-user-traffic-with-channels/