The store that looked broken on Facebook.
Customers tapped the link in a merchant's Facebook post and got a blank screen. She reported it as a broken link, and she was right to. It behaved exactly like one. The link was perfectly healthy. Her homepage was carrying 75.7 MB of decoded image memory and could not survive the browser built into the Facebook app, which is where nearly all of her customers arrive from.
If your Shopify store shows a blank screen inside the Facebook app but works in Chrome, the usual cause is not your link. It is memory. The browser inside Facebook has far less to work with than a normal browser, and a page carrying too many full size images gets discarded mid render, leaving your site's background color and nothing else.
"My Facebook links are broken."
The owner called us. Almost every order her business takes begins with a post on her Facebook page, so when customers started telling her the link did not work, it went straight to her revenue.
What made it clear this was not a one off was that she had already started working around it in her own posts, telling people what to do if they could not reach the website. Nobody writes that line for a glitch they saw once. She had been losing orders to it for a while.
She sent a fifty second screen recording from her phone. That recording turned out to be the entire diagnosis.
The link worked. The page died four seconds later.
Every version of the URL returned a healthy response, including the one carrying the tracking parameter Facebook appends to a real click. The page loaded. The hero image rendered. Then the whole screen turned flat dark green and stayed there until she gave up and closed it.
That dark green was her own website's background color showing through with nothing painted on top of it. To a customer that is indistinguishable from a dead link, which is precisely why it was reported as one.
- 0.0 secondsLink tapped inside the Facebook appFacebook opens its own built in browser rather than Safari or Chrome.
- 1.5 secondsThe page renders correctlyLogo, hero photograph, both buttons and the chat widget all appear. Nothing looks wrong.
- 4.0 secondsStill sitting idleThe frames here are byte for byte identical, so nobody was touching the screen. It was not a tap or a scroll.
- 4.1 secondsBlank, in a single frameSampled at fifteen frames per second there is no fade and no partial repaint. A popup animates in. A scroll shows intermediate content. This did neither.
The detail that settled it was the scrollbar. It was pixel identical before and after: same position, same length. That means the same document at the same scroll offset, so the browser had not navigated anywhere. Contrast stretching the blank area confirmed the rest. The only variation anywhere in the page region was the scrollbar column itself. Nothing had been hidden and nothing had loaded in its place. The renderer had simply been killed.
A thumbnail was quietly loading a twelve megapixel photograph.
The homepage was holding 75.7 MB of decoded image data across 61 images. The rest of the store was nowhere near that.
The cause was a review app on the homepage. It rendered review thumbnails using raw image URLs with no size parameter, so instead of asking for a small version it pulled the full original every single time.
What was requested
4000 × 3000
959 KB downloaded
45.8 MB held in memory
To fill a thumbnail roughly 200 pixels wide.
What it needed
200 × 150
13.8 KB downloaded
0.16 MB held in memory
Identical on screen. 107 times lighter.
Underneath that sat the real hazard. 36 of the store's 82 product photographs were phone uploads at up to 24 megapixels. The theme resized them correctly, which is exactly why every other page was fine. The app did not.
Desktop Chrome and Safari have enough headroom to absorb that. The browser inside the Facebook app does not, because it runs inside an app already consuming a large share of the phone. When it runs out, the page is discarded and you are left looking at the background color.
That is also why the fault looked random. It depended on how much memory each customer's phone had free at that moment, so it worked for some people and failed for many others.
Replaced the cause, then removed the hazard underneath it.
Everything was built on a duplicate of the live theme. The live store was never edited directly, and every original product image was copied locally with checksums before anything was touched.
Rebuilt the homepage reviews natively
Rather than dropping her social proof, we wrote a section that reads the review app's own stored data and renders it in Liquid. Real reviews, star ratings, verified buyer labels, updating on their own as new reviews arrive. It renders no images and loads no JavaScript.
Resized 36 oversized product photographs
Capped at a sensible maximum dimension using our own bulk image tool, in a single reversible batch. The photographs are visually identical on the storefront because the theme was already displaying them far smaller than they were uploaded.
Measured everything from outside the tools
Every figure was taken by querying the store directly rather than trusting any tool's own progress report. A tool telling you it succeeded is not evidence that it did.
Tested on a real phone, in the real app
Not a simulator and not a desktop browser with a narrow window. The fault only ever appeared inside the Facebook in-app browser, so that is where it had to be signed off.
The product page reviews were left completely untouched, because they used a different component that was never part of the problem.
A tenth of the weight, and nothing lost.
| Measure | Before | After |
|---|---|---|
| Homepage image memory | 75.7 MB | 8 MB |
| Images on the homepage | 61 | 21 |
| Largest single image | 45.8 MB | 0.8 MB |
| Across the whole catalog | 2,006 MB | 736 MB |
Across all 48 products, all 82 images survived. No images were lost, no ordering changed, no alt text or variant links were altered, and the reviews still update on their own. The finished store was verified on a real handset through the Facebook app, end to end, from the post through to a product page.
Turnaround was one working day from getting store access.
Four things worth looking at this week.
You do not need us to do any of this, and if it all comes back clean then you have lost ten minutes and gained some certainty.
- Open your store the way your customers do. Tap your own link from inside Facebook or Instagram, not from Chrome or Safari. Those in-app browsers are the least forgiving ones your customers use.
- Sit on the page without touching it for thirty seconds before you start scrolling. This particular failure happened while the screen was idle, which is easy to miss if you scroll immediately.
- Ask which page your social links point at. If every link goes to your homepage, and your homepage is your heaviest page, every visitor from social media is landing on your worst case.
- Check what size your product photographs actually are. If they came off a phone and went straight up, they are probably several times larger than anything your store ever displays.
If something looks wrong and you would rather not chase it yourself, send us the details and we will tell you what we find. If your site turns out to be fine we will say so. Related reading: Shopify Core Web Vitals optimization and our Shopify development services.
Blank pages in the Facebook browser: FAQ
Why does my Shopify store look blank in the Facebook app but work fine in Chrome?
Because the browser built into the Facebook app has far less memory to work with. It runs inside an app that is already using a large share of the phone, so a page that Chrome or Safari handles comfortably can exhaust what is left. When that happens the page is discarded and the screen falls back to your site's background color. Nothing is broken in your store or your link. The page simply could not finish rendering in that particular browser.
Is a blank page in the Facebook browser the same as a broken link?
No, although it is impossible to tell them apart as a customer, which is why it gets reported as a broken link. In the case on this page every version of the URL returned a healthy response, including the version with the tracking parameter Facebook adds to a real click. The link was never the problem. The page failed after it had already loaded.
Why does it work for some customers and not others?
Because it depends on how much memory each phone has free at that moment. Someone with a newer phone and few apps open gets through. Someone with an older phone, or with Facebook running for hours, does not. That is why merchants describe it as random, and why it is easy to dismiss when you test it once on your own phone and it works.
What is decoded image memory, and why does it matter more than file size?
File size is what gets downloaded. Decoded memory is what the image occupies once the browser expands it to draw it on screen, and it is far larger. A 4000 by 3000 photo might download as a one megabyte file but needs roughly 46 megabytes of memory to render. Page weight tools usually report the download, so a page can look reasonable on paper while being far too heavy in practice.
How much image memory is too much for a mobile page?
There is no official ceiling, but the contrast in this case is instructive. The homepage held 75.7 MB of decoded image data and failed inside the Facebook browser. The product pages held 6.3 MB and the collection pages 1.4 MB, and neither ever failed. If a page is many times heavier than the rest of your site, that page is the one to look at.
Can a Shopify app cause this even when my theme is fine?
Yes, and that is exactly what happened here. The theme was resizing images correctly everywhere it controlled them. A review app on the homepage was requesting images without a size parameter, so it pulled the full original every time to fill a small thumbnail. Apps render inside your pages but do not always follow the same rules your theme does.
My product photos come straight off my phone. Is that a problem?
On its own, usually not, because a well built theme requests a smaller version of whatever you upload. It becomes a problem the moment anything on your store requests the original instead. Modern phone cameras produce images up to 24 megapixels, and 36 of the 82 images in this store were in that range. Uploading at a sensible size removes the hazard rather than relying on every app to behave.
What size should product images be on a Shopify store?
For most stores a longest edge of about 2048 pixels is plenty. It is larger than any realistic display size including zoom on a high resolution screen, and it keeps the original small enough that nothing catastrophic happens if some app requests it in full. Going bigger adds storage and risk without adding anything a customer can see.
Does Shopify not resize images automatically?
Shopify can, and it does so whenever an image is requested with a width parameter. That is how themes normally serve images. The resizing is not automatic in the sense of being unavoidable, though. If code asks for the image URL without specifying a size, Shopify returns the original at full resolution, exactly as uploaded.
How do I check whether my own store has this problem?
Open your store on a phone through the app your customers actually arrive from, not through Chrome or Safari, and sit on the page for thirty seconds without touching it before scrolling. Then compare pages. If your homepage feels heavier than your product pages, or if it is the page all your social links point at, it deserves a proper look.
Will resizing my product photos make them look worse?
Not at a sensible size. In this project the photos are visually identical on the storefront because the theme was already displaying them far smaller than they were uploaded. What changed is how much data sits behind the same picture. We also kept a checksummed copy of every original before touching anything, so the change was reversible.
Does this affect the Instagram in-app browser too?
The same class of problem applies to any in-app browser, and Instagram is built by the same company on similar foundations. Any browser embedded in another app inherits that app's memory pressure. If most of your traffic arrives from social media, those browsers are the ones your site has to survive, and they are the least forgiving ones your customers use.
Does a heavy homepage hurt my Google rankings as well?
It can, because page experience is a ranking input and heavy pages score badly on it. That is the smaller problem here though. A page that ranks but does not render for a share of your visitors is losing orders directly, which costs more than a ranking position. Fix the rendering first, then treat the search benefit as a bonus.
Will I lose my product reviews if the review section is replaced?
No, and you should not accept a fix that costs you your social proof. In this project the product page reviews were untouched because they used a different component that was never part of the problem. On the homepage we built a section that reads the same review data the app already stores, so the reviews still update on their own, still show star ratings, and simply no longer pull product photographs.
Do I need to change my Facebook link after a fix like this?
Not once the page it points at is healthy. Before the fix, pointing the link at a lighter page was a sensible temporary measure that cost nothing and took a couple of minutes. It is worth knowing as a stopgap, because it puts something in your control while a proper fix is scheduled.
How long does a fix like this take?
This one was diagnosed, built, tested and published inside one working day from getting store access. Most of that time went on measurement and verification rather than writing code. The change itself was small, which is usually true once the actual cause is identified rather than guessed at.
What does work like this cost?
A focused performance fix on a single store is typically under NZD $1,000 and is quoted at a fixed price before anything starts. Larger performance work across a full catalog, or a build that needs custom sections written from scratch, is scoped separately. We would rather tell you the cause is small and charge accordingly than sell a rebuild you do not need.
Not sure whether your store has this problem?
Send us your store URL. We will open it the way your customers do, measure what the page actually weighs, and tell you plainly whether there is anything worth fixing. If there is not, we will say so and you will owe us nothing.