Back to Blog

iPad Safari Says It Is a Mac: How to Detect and Route iPads

Your device redirect sends iPhones to the App Store and Macs to the Mac page, yet your iPad visitors land on the desktop site. Here is why Safari on iPad says it is a Mac, and how to send iPads to the right link.

Karan Bhakuni
Karan Bhakuni
Founder, Flyn
TechnicalOct 19, 202620 min readUpdated Oct 19, 2026
iPad Safari Says It Is a Mac: How to Detect and Route iPads
In a hurry? See what your browser sends

Why Your iPad Visitors Land on the Desktop Page

You set up a device redirect. iPhones go to the App Store, Android phones to Google Play, Macs to your Mac download page. Then someone opens the link on an iPad and lands on the desktop page, or on the Mac App Store listing, or on a download their tablet cannot run. Your analytics agree with the redirect: the visit shows up as macOS. Nothing is broken. Safari on iPad is telling your server it is a Mac, on purpose, and has done so since 2019.

If your rule reads only the User-Agent header, an iPad in its default Safari mode matches your Mac rule when you have one and falls through to your default destination when you do not. Either way it misses the iOS rule you wrote for it, whether you are an app publisher, a marketer reading device reports, or a developer running a smart link of your own.

Diagram of one short link opened on an iPhone, a Mac and an iPad: the iPhone reaches the App Store and the Mac reaches the Mac page, while the iPad in Safari is read as Macintosh and also lands on the Mac pageTap to enlarge
The symptom: a rule that reads only the user agent sends the iPad wherever it sends a Mac.

Below: what changed in iPadOS 13, both user agent strings, why server side detection misreads iPads, each detection method and its limits, and how Flyn's smart routing handles it, with a test matrix to finish.

What Changed in iPadOS 13

In September 2019, Safari 13 brought what Apple calls desktop-class browsing to iPad. The release notes say Safari for iPad now displays the same desktop websites as Safari for macOS. To get those sites, Safari had to stop introducing itself as an iPad. In the WWDC19 session Introducing Desktop-class Browsing on iPad, Apple said iPad would "present itself to websites as a Mac."

Why Apple did it

Plenty of sites used to serve the iPad a phone layout on a laptop sized screen. Sending the Mac user agent gets it the full site, and WebKit adapts desktop pages to touch. The WebKit team's Safari 13 post described the new iPad string as identical to Safari on macOS and asked developers for one responsive design built on feature detection. The WWDC session was blunter: you do not need to know your content is on an iPad.

When an iPad still says iPad

The desktop user agent is the default, not a law. An iPad presents an iPad user agent again when:

  • Its owner turns off Request Desktop Website in Safari settings, or asks for the mobile version of one site.
  • Safari runs in a narrow Split View or Slide Over window, where Apple said Safari picks the browsing mode on its own.
  • An app's embedded web view was built with an older SDK or sets its own user agent, two cases the WWDC session covered.

When Safari 13 shipped, WebKit also named iPad mini as the one model left out of the change. The reverse case matters too: an iPhone using Request Desktop Website sends a Mac style user agent as well, as a WebKit bug about desktop mode on iOS and iPadOS shows.

The Two User Agent Strings, Side by Side

Here is what a current Mac sends, from the Safari example in MDN's User-Agent reference:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15

And here is what Safari on an iPad sends in its default mode: the same string, byte for byte. That is the whole problem. There is no iPad token, no touch token, nothing a parser can hold on to.

Two user agent strings stacked, one from Safari on a Mac and one from Safari on an iPad in default desktop mode, identical token for token, with a third string below from an iPad asking for the mobile site that contains iPad and MobileTap to enlarge
Mac Safari and iPad Safari in default mode send the same string. Only an iPad asking for the mobile site names itself.

What a mobile mode iPad sends instead

When an iPad asks for the mobile site, the string names the device again. A developer posted this one from iPadOS 13 on the Apple Developer Forums:

Mozilla/5.0 (iPad; CPU OS 13_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1

MDN's current iPhone example has the same shape, (iPhone; CPU iPhone OS 18_6 like Mac OS X) followed by Mobile/15E148 Safari/604.1. Both carry a device name and the Mobile token, and common parsers read both as iOS.

Reading the tokens

  • Macintosh; Intel Mac OS X 10_15_7 is the platform. The version no longer moves: MDN's example is a Safari 26 string and still says 10_15_7.
  • AppleWebKit/605.1.15 is the engine. Chrome on a Mac says AppleWebKit too, as 537.36, but adds a Chrome/ token Safari lacks.
  • Missing: iPad, Mobile, and anything about touch.
  • Closed in 2022: desktop mode on iOS and iPadOS once reported 10_15_6 while Macs said 10_15_7. WebKit fixed that as bug 241322, so do not build on leftovers like it.

See What Your Own Browser Sends

The widget below is our free What Is My User Agent tool, running on this page. It shows the exact string your browser sends, how Flyn's analytics would record the visit, and, for a Safari string that looks like a Mac, whether the touch check would call your device an iPad or a Mac.

Run it on three devices

  1. Open this page on a Mac in Safari: the string says Macintosh and the verdict is a Mac.
  2. Open it on an iPad in Safari: the string still says Macintosh, and the touch check says iPad.
  3. Open it on an iPhone, then turn on Request Desktop Website and reload: the string switches to Macintosh too.

When a customer says your link "opened the wrong page", send them the tool link, or paste a user agent from your logs into it. A pasted string carries no touch information, so for a Mac-like Safari string the tool shows both possible answers instead of guessing. For a link opened inside Instagram or TikTok, the in-app browser detector tells you which app is wrapping the page, the problem covered in why links break in the Instagram in-app browser.

Reading your browser

For support teams: ask a customer to open this page and copy the string above, or take it from your logs. The pasted string is analyzed in this page and never sent anywhere. Touch support cannot be known from a pasted string, so a Safari string that says Mac could be a Mac or an iPad.

Flyn Pro

One link for iPhone, Android, Windows and Mac

Give one short link its own iOS, Android, Windows and Mac destinations. On links with a Mac destination, the Safari check above tells an iPad from a Mac. Every other device gets your country rules, A/B split or default page. Pro starts at $9 a month billed annually, or $12 monthly.

iOSapps.apple.com/app/...
Androidplay.google.com/store/apps/...
Windowsapps.microsoft.com/detail/...
Macapps.apple.com/app/...

Why Server Side Detection and Analytics Get iPads Wrong

A redirect decides from the request headers alone: the user agent, the languages, the referrer, and the network address. It cannot ask the screen anything. When a Mac and an iPad both open a link in Safari, the headers that describe the device are the same, so any rule that reads them, a URL redirect, a CDN worker or a log parser, has to give both one answer, and parsers answer Mac. Country rules are unaffected, since they read where the request comes from, which is why routing by country treats an iPad like anyone else.

Safari sends no client hints

User-Agent Client Hints were designed to replace string parsing with structured headers. Sec-CH-UA-Platform, for example, is a low entropy hint that Chrome and Edge send by default, with a value such as "macOS". Safari does not implement client hints: MDN's compatibility data lists neither the header nor navigator.userAgentData as supported in Safari or Safari on iOS. Hints help you place Chrome on a Mac and say nothing about the one browser that causes the problem.

How Flyn's own analytics record it

Flyn's analytics use the same detection code as the redirect, so they share the blind spot:

  • On a link without a Mac URL, a click from Safari on an iPad in its default mode is recorded as desktop, macOS, Safari.
  • On a link with a Mac URL, the click is recorded after the device check described below, so an iPad is recorded as a tablet on iOS and an iPhone using Request Desktop Website as a phone on iOS.
  • An iPad asking for the mobile site is recorded as a tablet on iOS on every link, because its string says iPad.

Flyn records no visitor identity and counts clicks, not unique people. Click counts and timing are on every plan; the country, city, device, OS, browser and referrer breakdowns are part of click analytics on Pro. How many clicks come from bots, and how they are kept out, is covered in what share of short link clicks are bots.

Watch out

If the device report on a link aimed at phones and tablets shows a healthy macOS share, some of those Mac clicks are probably iPads. Do not cut an iPad campaign, or start a Mac one, from a user agent report alone. Run the test matrix at the end of this guide on that link first.

Detection Methods Compared: What Works and Where It Breaks

navigator.maxTouchPoints returns how many simultaneous touches the device supports. MDN gives the values: desktop computers without a touchscreen, Macs included, report 0, while phones typically report 5. An iPad reports more than 1, so the test navigator.maxTouchPoints > 1, the multi-touch test MDN's own detection guide shows, separates an iPad from a Mac. Safari has supported it since version 13, the release that changed the user agent.

  • Strength: it reflects the hardware, not a string the browser chooses to send.
  • Limits: it exists only in JavaScript, so a server redirect never sees it, and it belongs next to the Mac-like Safari string, never alone, because a touchscreen Windows laptop reports touch points too.
Side by side cards: a Mac in Safari reporting navigator.maxTouchPoints 0 and an iPad in Safari reporting 5, both under the same Macintosh user agent, with the test maxTouchPoints greater than 1 splitting themTap to enlarge
Same user agent, different hardware: the touch point count tells them apart, and only the page can read it.

CSS pointer and hover media queries

The pointer media feature reports how accurate the primary pointing device is, coarse for a finger and fine for a mouse, and hover says whether that device can hover. On an iPad, WebKit keeps touch as the primary pointer even with a mouse or trackpad attached, so Safari reports pointer: coarse and hover: none where a Mac reports fine and hover; a mouse changes only any-pointer and any-hover, as WebKit settled in 2020 (bug 209292). That makes pointer: coarse a usable iPad hint, but only the page can read it and WebKit overrides both answers on specific sites, so the touch count stays the plainer test. Keep media queries for tap targets and hover menus.

Screen size

A big screen does not mean a Mac. Apple's spec pages list the 13-inch iPad Pro at 2752 by 2064 pixels and the 13-inch MacBook Air at 2560 by 1664 native pixels, so the tablet has the bigger panel. A Mac can also report a different screen size depending on the scaling its owner picks. Screen size is good for one narrow job: telling a phone from a tablet once you already know the device has touch.

Client hints and navigator.platform

Safari implements neither the client hint headers nor navigator.userAgentData, so there is nothing to read, and a missing hint is weak evidence because Firefox sends none either. Older snippets check navigator.platform; MDN calls platform based detection unreliable, and its browser detection guide warns against using the OS token to decide between mobile, tablet and desktop.

MethodWhere it runsTells an iPad from a Mac?Main limit
User agent stringServer and pageNoIdentical in Safari's default iPad mode
Client hints (Sec-CH-UA-Platform, userAgentData)Server and pageNoNot implemented in Safari
navigator.maxTouchPointsPage only (JavaScript)Yes, with a Mac-like Safari stringCannot run inside a 302
pointer and hover media queriesPage only (CSS or matchMedia)Usually, with a Mac-like Safari stringWebKit overrides them on specific sites; any-pointer and any-hover change with a mouse
Screen sizePage onlyNoiPad and Mac sizes overlap
navigator.platformPage onlyNoMDN calls it unreliable for detection

A JavaScript Check or a Server 302: The Tradeoff

If only the page can tell an iPad from a Mac, you have two designs, each with a real cost.

  • A plain 302 is one round trip, needs no JavaScript, and gives every client that sends the same headers the same answer, which keeps testing simple. The price is that it decides blind: an iPad in Safari gets whatever a Mac gets. Why a short link answers with a 302 rather than a 301 is covered in 301 vs 302 redirects.
  • A check page adds one hop: the browser loads a small blank page, runs a script, then requests the link again. It needs a sensible answer for when scripts are off, and care with data, because the second request must not count a second click, lose the original referrer, or drop the query string.
The server cannot see a fingertip. Only the page can, and only if you give it a moment to look.

Run the check only where it changes the answer

The sensible rule is narrow. Run the check only for visitors the server cannot place, meaning Safari or another WebKit view presenting a Mac user agent with no platform hint, and only on links where a Mac and an iPad would go to different places. Everyone else keeps the plain 302, so the extra hop never touches Windows, Android, default mode iPhones, or Chrome on a Mac. Referrer handling matters here too, for the reasons in what referrer a short link sends.

A Test Matrix for iPad, Mac and iPhone

Device routing fails quietly, so test each branch before the link goes on a poster or into an ad. Here is what to expect on a link with iOS and Mac URLs, on the same link without the Mac URL, and what analytics record:

Device and browserLink with a Mac URLLink without a Mac URLRecorded as
Mac, SafariCheck page, then the Mac URLCountry rules, A/B split, defaultDesktop, macOS
Mac, Chrome or EdgeMac URL, no checkCountry rules, A/B split, defaultDesktop, macOS
Mac, FirefoxMac URL, no checkCountry rules, A/B split, defaultDesktop, macOS
iPad, Safari, default modeCheck page, then the iOS URLCountry rules, A/B split, defaultWith a Mac URL: tablet, iOS. Without: desktop, macOS
iPad, Safari, mobile siteiOS URL, no checkiOS URLTablet, iOS
iPhone, SafariiOS URL, no checkiOS URLPhone, iOS
iPhone, Request Desktop WebsiteCheck page, then the iOS URLCountry rules, A/B split, defaultWith a Mac URL: phone, iOS. Without: desktop, macOS
Mac or iPad, Safari, JavaScript offMac URLCountry rules, A/B split, defaultDesktop, macOS
Test matrix card with five checks: iPad in Safari, Mac in Safari, Mac in Chrome, iPhone with Request Desktop Website, and an iPad camera scanning the link's QR code, each with the destination to expectTap to enlarge
Five checks on a link with a Mac URL, and what each one should do.

How to run it

  1. Open the link on an iPad in Safari without changing any settings.
  2. Open it on a Mac in Safari and in Chrome. Only the Safari run shows the blank page.
  3. On an iPhone, open it normally, then again with Request Desktop Website on.
  4. Scan the link's QR code with the iPad camera, since scans follow the same rules. The free QR code generator makes a test code.
  5. Compare each result with what the What Is My User Agent tool reports on the same device.

If a result surprises you

  • An iPad on the default page of a link with a Mac URL usually means the link has no iOS URL, so the iPad fell through as described above.
  • A Mac in Safari landing on the iOS URL is worth a closer look: open the user agent tool on that Mac and check the touch verdict.
  • The redirect checker shows the plain redirect chain a script sees, useful for ruling out a wrong default, and the deep link tester checks an app link on a real phone.

For the wider picture, read one link, different destinations by device, and for tool by tool scores, the device routing shortener comparison.

Frequently Asked Questions

Why does my iPad say Macintosh in its user agent?
Because Safari on iPad asks for desktop websites by default. Since Safari 13 and iPadOS 13 in 2019, Apple has had iPad Safari present itself to websites as a Mac so that sites serve their full desktop version instead of a phone layout. The WebKit team described the new iPad string as identical to Safari on macOS. That is intended behavior, not a fault in your device or your site. You can switch it off per site, or for all sites with Request Desktop Website in Safari settings, and the iPad then sends a user agent that names the iPad again. Most visitors leave the default on.
How do I detect an iPad in Safari with JavaScript?
Combine two checks in the page. First, the user agent looks like Mac Safari: it contains Macintosh and AppleWebKit and no Chrome token. Second, navigator.maxTouchPoints is greater than 1. MDN documents that desktop computers without a touchscreen, Macs included, report 0, while touch devices report more, and Safari has supported the property since version 13. Together the two checks separate an iPad from a Mac. Use the touch test only with the Mac-like string, since a Windows laptop with a touchscreen also reports touch points. The pointer media query can back it up, since iPad Safari normally reports a coarse pointer even with a trackpad attached, but any-pointer and any-hover change once a mouse is connected.
Can a server tell an iPad from a Mac?
Not from Safari's request alone. In its default mode Safari on iPad sends the same user agent as Safari on a Mac, and Safari implements no User-Agent Client Hints, so there is no platform header to read either. Screen size never reaches the server, and it would not settle the question if it did, because a 13-inch iPad Pro has more pixels than a 13-inch MacBook Air. The practical answer is to let the page decide: serve a small page that reads navigator.maxTouchPoints and continues with the result, as Flyn does on links with a Mac URL. Anything that never runs JavaScript, such as a plain 302, has to treat both as a Mac.
Why does my device redirect send iPads to the desktop page?
Because the redirect reads the user agent, and an iPad in Safari's default mode presents a Mac user agent, so a rule for iOS does not match it. On a Flyn link without a Mac URL, that iPad skips the iOS rule and moves on to your country rules, then the link's A/B split if it has one, then the default destination, which is usually your desktop page. On a link with a Mac URL, Flyn first shows Safari visitors a blank check page that reads touch support, then sends a Mac to the Mac URL and an iPad to the iOS URL. Either way, keep an App Store badge on the default page.
Do User-Agent Client Hints fix iPad detection?
No, not for Safari. Client hints such as the Sec-CH-UA-Platform header and the navigator.userAgentData API give structured platform data in Chrome and Edge, which send a platform value like macOS by default. According to MDN's browser compatibility data, Safari and Safari on iOS implement neither the header nor the API. So hints help you identify Chrome or Edge on a Mac with confidence, and they say nothing about Safari, which is the browser that hides the iPad. Firefox does not send them either, so a missing hint is weak evidence on its own. For Safari, the touch point check in the page remains the dependable signal.
Does Request Desktop Website on an iPhone change the user agent?
Yes. An iPhone using Request Desktop Website sends a Mac style user agent too, so a server reads it as a Mac in the same way it reads an iPad. A WebKit bug fixed in 2022 even made desktop mode on iOS and iPadOS report the same macOS version as a real Mac, closing the last string level difference. In a page, the iPhone still reports touch points, so the same maxTouchPoints check catches it, and its smaller screen tells it apart from an iPad. On a Flyn link with a Mac URL, such an iPhone gets the check page, goes to the iOS URL, and its click is recorded as a phone on iOS.
Why does Flyn show a blank page before some links open in Safari?
That is the device check, and it only appears on links that have a Mac URL. Safari on a Mac and Safari on an iPad send the same user agent, so the server cannot tell which one is asking. For a moment, the blank page reads the device's touch support and requests the link again with the answer: a Mac continues to the Mac URL, an iPad to the iOS URL. The page records no click of its own; the click is counted once. With JavaScript off, the browser continues as a Mac. Chrome, Edge and Firefox on a Mac skip the page, and links without a Mac URL never show it.
Will my analytics count iPad visits as Mac visits?
In most analytics that read only the user agent, yes: an iPad in Safari's default mode is recorded as macOS on a desktop. Flyn's analytics do the same on links without a Mac URL, because they use the same detection code as the redirect. On a Flyn link with a Mac URL, the click is recorded after the device check, so an iPad is recorded as a tablet on iOS. Flyn records no visitor identity and counts clicks rather than unique people. If a link aimed at mobile shows a surprising macOS share, test it on a real iPad before acting on the number.

Ready to try Flyn?

Free plan includes 25 links/month, full analytics, and access to all 30+ free tools above. No credit card required.

Already a member? Log in

Karan Bhakuni
Karan Bhakuni· Founder, Flyn

Karan Bhakuni is the founder of Flyn. He writes about branded links, click analytics, and the link-management tooling growth teams and creators actually need, drawn from building Flyn and reading a lot of user feedback.

Find these guides useful? Add Flyn as a preferred source so more of them show up in your Google results.