Most likely cause : Meta’s in-app browser (IAB) has a feature-specific policy i.e. it disables execution-while-not-rendered and layout-animations. Your theme’s transition JS fires during navigation, the IAB suspends it, and the page never renders, due to which the white screen appears. The “unlock to fix it” behaviour confirms JS was paused and only resumed when the screen woke the WebView.
Some quick fixes :
Fully disable Drive’s page transition JS - Even if the visual toggle is ‘off’, please confirm in the theme code that no startViewTransition, history.pushState, or scroll-listener animation is actually running.
Temporarily disable your custom scroll animation section and retest in the IAB. If navigation works, that section’s JS is the issue.
Add a pageshow/visibilitychange guard - the IAB caches pages and doesn’t always re-fire DOMContentLoaded, which silently breaks animation in it.
Detect Meta’s IAB via user agent and skip animations entirely for it :
Visit ‘inappbrowser’ site via a shared Facebook link to inspect what JS Meta is injecting on your pages.
Use Chrome’s chrome://inspect remote debugging on Android to catch console errors during IAB navigation.
Bottom line : This seems to be a Meta IAB + animated Shopify theme compatibility issue. The fix is either guarding your animation JS against the IAB’s restricted execution environment, or contacting the Drive theme developer, this is a known class of problem they should have a solution for.
This smells less like Shopify checkout and more like a JS or CSS interaction that Meta’s in-app browser is choking on, especially since direct URLs load fine and the page eventually finishes after the phone sleeps and wakes. That usually points to something on the page blocking or delaying the next navigation render, not a theme-wide routing problem.
I’d test it in this order:
Temporarily remove the homepage custom liquid animation entirely, then retest inside Facebook and Instagram in-app browsers.
If that fixes it, add the animation back in pieces until you find the exact script or CSS rule causing the white screen.
Also check whether you’re using any page transition, scroll, or intersection observer code that depends on visibility state, requestAnimationFrame, or body overflow changes. Meta’s in-app browsers can behave oddly there.
The fact that Buy Now also whitescreens makes me think it’s not just menu navigation, it’s probably one shared front-end script or transition layer affecting every internal page change. I’d also try a super plain test theme copy with no custom liquid at all, just to confirm whether it’s the Drive theme itself or the added animation.
Priyasha and Daniel are right that it’s the scroll animation JS getting suspended by Meta’s in-app browser. The fix I’d point at though isn’t just disabling the animation, it’s why the page goes fully blank instead of just un-animated.
That happens when your content starts hidden (opacity 0, or translated off screen) and only becomes visible once the JS animation finishes. Meta’s IAB throttles requestAnimationFrame and pauses JS when the webview isn’t actively painting, so the animation never completes, so the content never gets flipped to visible. That’s your white screen, and it’s also why it “fixes” itself when the phone sleeps and wakes, the webview repaints and resumes the rAF.
The durable fix is to never gate visibility on JS. Set the final visible state as the CSS default so the content shows with no JS at all, and make the animation progressive enhancement on top. Then if the IAB pauses the script you just lose the motion and keep the content. A prefers-reduced-motion fallback gets you most of the way there for free. Does your animation start the content at opacity 0?
Hello there @Darsh_Acharya
To me this sounds like a client side navigation issue, not related to checkout. Since direct URLs do work but navigating internally does not, it might be a good idea to test any custom javascript, scroll animations, or ajax page transitions you are using to see if they function properly in Meta’s in app browser. Disable your custom Liquid section/script/one by one to identify the culprit. Also test with a clean, unedited theme duplicat. If that fixes it, you’ll know which customization to fix.
Can confirm I’m experiencing the same issue on Android Facebook app version 567.1.0.52.74. Just minimizing the app and opening it again renders the new page.
Temu is loading fine.
Shopify support said it’s a Meta bug and should contact them. Great.
I was able to fix this for my site - Atelier 3.5.1 theme.
Root Cause
The theme uses @view-transition { navigation: auto; } in base.css, which tells the browser to apply the View Transitions API to every page navigation automatically. Meta’s in-app browser (WebView) does not support this API properly — it attempts the transition but never completes it, leaving the page in a suspended render state. The page content is actually loaded in memory, which is why minimizing and reopening the app (triggering a visibilitychange event) caused the page to appear.
Fix
Two changes:
In theme.liquid, add this script in <head> before the stylesheets render tag:
<script>
if (/FBAN|FBAV|Instagram/i.test(navigator.userAgent)) {
document.documentElement.classList.add('meta-iab');
}
</script>
In base.css, wrap the @view-transition rule so it only applies to non-Meta browsers:
This disables the View Transitions API exclusively for Meta’s in-app browser while keeping all animations and transitions intact for Chrome, Brave, and other standard browsers.
This is almost certainly front-end rendering/transition code, not checkout or Shopify hosting.
The quickest way I’d isolate it is duplicate the theme, remove/disable any view-transition CSS and custom scroll/header animation JS only for FB/Instagram in-app browsers, then retest from a real Android Meta app link.
The lock/unlock clue is the giveaway: the page is probably loaded, but the WebView never paints after the navigation transition.
I’d fix this before spending more time on general speed scores, because Meta traffic that lands on a white screen is basically dead traffic.