In most cases, it makes sense that Rudderstack is your source of truth for events and then you just send your events to which ever destinations you need them.
For us, we load our scripts through Rudderstack, i.e. Google Tag Manager. We then use Rudderstack for events tracking which we then send to Google Tag Manager which we then send to GA4.
The only time i've had an issue with this kind flow (letting rudderstack do everything) is when manually using
page()
calls instead of loading the GA4 script and letting that do page views. The data wasn't as consistent. But for events, it's been working perfectly.