We use server-side events plus user ID matching for this exact thing.
Fire a custom event when users tap through to web (something like “web_redirect_initiated”). On the web side, match users with hashed email or device fingerprinting.
Branch.io handles this well if you don’t want to build it yourself. Our attribution accuracy went from ~60% to ~85% after we implemented it.
Just make sure your web pixel connects back to the original app session. That’s where most people screw up.