Yeti Design Co.
Four build slots open this month Request a slot
Home Work Approach Services Pricing Guides About Request a slot
← Back to guides

Why your GlossGenius booking link breaks on mobile Safari

The short version

Most of the time it is not GlossGenius and it is not Safari. It is Instagram. A link tapped from your bio opens inside Instagram’s own in‑app browser, which keeps a separate cookie jar, cannot reach the cards saved in iCloud Keychain, and loses the session the moment a client leaves to fetch a text code. The second most common cause is embedding the booking flow in an iframe on your own site, where Safari’s Intelligent Tracking Prevention blocks the third‑party cookies it needs to remember which service she picked. The fix for both is the same: link straight out to your GlossGenius page instead of embedding it, and test by tapping your own bio link on a real phone.

You tested it. You typed the address into Safari on your own phone, picked a balayage with a toner, and it worked. Then a client texts to say the link does nothing. Or it loads and forgets what she chose. Or it will not take her card.

You are both telling the truth. You are not opening the same browser.

What is actually yours to fix?

Almost nothing below is a GlossGenius bug. Most of it is ordinary iOS behavior that every booking platform runs into. Square, Vagaro, Boulevard and Acuity hit the same walls.

That is not an excuse. It matters because it tells you where the fix lives. You cannot file a support ticket about how Safari handles cookies. You can change how people arrive at your booking page, and that is where the whole fix sits.

How your booking link is put together

The short link in your bio, a Book button on your site, a widget dropped into a page: however the link is dressed up, the flow itself runs on GlossGenius’s servers, not yours. Only the context changes, and context is everything here.

A link sends the visitor to GlossGenius directly. The browser treats that page as first‑party. Cookies stick, storage sticks, the payment sheet behaves.

An embed loads the same page in an iframe on your domain. To the browser, GlossGenius is now a third party sitting inside your site. And on an iPhone a third party has almost no rights. Everything below comes out of that one distinction.

Cause one: Instagram’s in-app browser

This is the one, and it is the most common by a wide margin, because most of your traffic arrives from a bio link. A link tapped inside Instagram or Facebook does not open in Safari. It opens in a browser those apps carry inside themselves.

It looks like Safari. It is not. It keeps its own cookie storage, cleared on its own schedule. It cannot see cards saved in iCloud Keychain, so autofill comes up empty and she types a card number with one thumb. Apple Pay on the web generally will not run inside it. And when she taps out to Messages for a confirmation code, coming back can drop her into a fresh session with an empty cart. The deposit form she half‑filled, gone.

None of that is a GlossGenius decision. It is how Meta’s apps handle links, and it lands on every platform equally. It is also invisible to you, because you test by typing the address, and typing the address opens Safari.

Confirm it in two minutes

Open Instagram and tap your own bio link the way a client would. Book something end to end: service, time, deposit. Then close it, open Safari, type the same address, and do it again. If the second works and the first does not, you have found it, and nothing on GlossGenius’s side needs fixing.

Cause two: cookie blocking inside an embed

Put the booking flow in an iframe on your own site and Safari treats every cookie that frame sets as third‑party, blocking or partitioning it. Storage in that frame gets the same treatment. Intelligent Tracking Prevention has worked this way since 2020 and it is on by default on every iPhone.

What that looks like in the room: the frame loads, she picks a full highlight, taps through to the time picker, and the flow has forgotten the service. Or it spins forever. Or it renders blank with no error at all, which is the cruelest version, because there is nothing to screenshot.

There is a way for an embedded widget to ask permission. It is called the Storage Access API, and it needs a deliberate tap and a prompt. Most booking widgets do not implement it.

How to prove it: on the phone, open Settings, then Safari, and turn off Prevent Cross‑Site Tracking for one minute. Reload. If the embed suddenly works, it is third‑party storage, which means it is the embed. Turn the setting back on. You are never going to ask clients to change it.

Cause three: the tap that does nothing

Sometimes the button simply does not respond. No error, no page, no spinner. She taps it four times and gives up.

Safari only lets a script open a new window inside the direct handling of a real tap. If the button runs a fetch first and calls window.open when the response arrives, the tap has been spent and Safari quietly blocks the window. On a desktop you get a small notice in the address bar. On iOS, usually nothing at all.

Fix: a plain link, not a scripted button. A real anchor pointing at your booking URL is a navigation the browser always honors. Keep it in the same tab, too. New tabs behave strangely inside in‑app browsers, and a client who loses track of a tab has lost her appointment.

Cause four: the boring ones

Check these first, because they are free.

  • A stray character or space pasted into the Instagram bio field alongside the URL.
  • An old link still circulating after a name change or a plan change.
  • A link‑in‑bio aggregator sitting between the tap and the booking page. Every hop is another chance to break, and the aggregator opens in the in‑app browser too.
  • An actual outage on GlossGenius’s side. Rare, but check it before you rebuild anything.

The “open in Safari” workaround is not a fix

Inside Instagram’s browser there is an ellipsis menu in the corner with an option to open the page in your external browser. Tap it and the page lands in Safari, where cookies, autofill and Apple Pay work again. Recent versions of the app also carry a setting that sends links straight to Safari.

Both work. Neither is a fix.

A workaround that lives on the client’s phone is not something you control. You can write open in Safari in your bio; some people will read it, most will not, and the ones who do not are the ones you lose. Every instruction before she can book is a step she can decline.

Why a direct link beats an embed almost every time

An embed keeps the visitor on your domain, which is the whole appeal. On a desktop it delivers on that.

On a phone the picture inverts. The embed is fighting third‑party cookie rules, a fixed frame height that clips the flow as it grows, momentum scrolling that traps a finger inside the frame, a keyboard that covers the field being typed into, and date pickers rendered somewhere she cannot reach. And when it breaks you cannot debug it: it is someone else’s page inside someone else’s frame.

A direct link sidesteps all of it. The cost is real and worth saying plainly: she leaves your site, and the booking page will not look quite like the page she came from. That is far smaller than the cost you are paying now. If your platform lets you map a subdomain of your own to it, do that.

The rule I work by: a booking button that leaves your site and works beats an embed that stays and fails. It is the default on every hair salon website I build, and on the lash and brow studio sites too. Straight to the platform, styled to match the page it came from, in the same tab.

How to test this properly

Responsive mode in your laptop’s browser cannot find this bug. It is not Safari, it does not enforce Safari’s cookie rules, it shares your logged‑in desktop session, and it has never heard of Instagram’s in‑app browser. Everything looks fine in there while you quietly lose bookings.

Test in this order instead:

  • From your own Instagram bio, on a phone. Tap it the way a client does, not by typing the address.
  • All the way through a real booking, deposit included if you take one. Then cancel it. Half of these failures only appear at payment.
  • In a private Safari tab, which gives you a visitor with no cookies and no history. That is exactly who a first‑time client is.
  • On somebody else’s phone. Yours has your logged‑in session and your saved cards, and that hides the failure you are hunting.
  • On an Android phone too. Instagram uses its own in‑app browser there as well.

To see the actual error rather than guess at it: on the iPhone, Settings, Safari, Advanced, switch on Web Inspector. On a Mac, turn on the Develop menu in Safari’s settings. Connect by cable and the page appears under Develop, with the real console from the real device. One caveat: that attaches to Safari, not to Instagram’s in‑app browser, which generally cannot be inspected. Which is much of why this bug survives so long.

What good looks like

A client sees a set of foilyage in your feed, taps one link, lands on a page that loads in a second, picks her service, pays the deposit, and gets a confirmation. No instructions. No menu to find. No second attempt on a laptop that evening, which is the version where she just does not bother.

One tap, no explaining. Anything past that is quietly costing you appointments you will never hear about.

Or have someone wire the booking in properly.

Every site I build sends people straight to your booking platform (GlossGenius, Square, Vagaro, Boulevard, Acuity) with no iframe in the way, tested on a real phone from a real bio link before it goes live. $1,999 flat, a year of hosting included, live in seven days.

Request a slot →