Skip to main content
TIEMAN.IT

Magento mobile: fast and usable

A mobile Magento store is not a smaller version of desktop. It runs on a different device, with a different input method and a different CPU budget. PSI simulates that with 4x throttle and Slow 4G. If your mobile Lighthouse score is below 50, or your mobile conversion rate consistently lags behind desktop, there is work to be done.

Why mobile is a different discipline than desktop

Most Magento themes are built for desktop. Mobile gets a responsive layer on top, but the underlying JavaScript bundle, image approach and tap interactions stay desktop-first. That has concrete consequences you do not see with a mouse click, but do feel on a phone.

  • CPU budget: PSI lab simulates mobile with 4x CPU throttle. A mid-range Android phone has literally a quarter of the processing power a desktop browser has. JavaScript that parses in 200ms on desktop takes a second or more on mobile.
  • Network context: Slow 4G in PSI lab is 1.6 Mbps download, 750 kbps upload, 150ms RTT. That sounds fast, but a Magento page with 400 kB of JS plus images without mobile-specific variants makes every kilobyte noticeable.
  • Input mode: on mobile you tap, on desktop you click. A 32x20px button is clickable with a mouse. That same button is unusable on a phone. WCAG 2.5.5 defines 44x44px as the recommended minimum for touch targets.
  • Viewport behaviour: a missing or incorrect viewport meta tag causes mobile browsers to simulate a desktop width and zoom out. That gives a desktop layout on mobile, complete with horizontal scroll.
  • CrUX split: Google splits Core Web Vitals into mobile and desktop. The mobile CrUX data weighs more heavily in rankings for mobile searches. A good desktop score does not cover the mobile ranking.

These are not edge cases. On a store with more than 50% mobile traffic, the mobile experience determines the majority of conversion and ranking.

My approach to a mobile Magento audit

I do not start with DevTools on desktop. A mobile audit requires mobile measurement points.

  • Lighthouse mobile via PSI API: I run multiple measurements on the same day, on homepage, category page and product page. Lab variance on mobile is high. Two measurements on the same URL at the same time can differ by 10 to 20 points due to CPU scheduling on the Google server.
  • CrUX mobile dashboard: Google Search Console shows Core Web Vitals per page type, split by mobile and desktop. This is the source of truth. I check whether mobile and desktop show a structural difference, and on which metric (LCP, INP, CLS).
  • Visual flow on a real device: I test on a physical mid-range Android with Chrome. Not on a DevTools emulation. Emulation simulates the screen size but not the GPU performance or touch latency of real hardware.
  • Tap target audit with Lighthouse accessibility checks: I note all elements smaller than 24x24px (WCAG 2.5.8 minimum) or 44x44px (WCAG 2.5.5 recommended). On Magento stores, plus/minus buttons in the cart, filter chips and hamburger menu items are common offenders.
  • Viewport meta tag check: is the tag missing, set to content='width=1024' or incorrectly overridden by a third-party extension? I check per page type.
  • JS execution budget analysis: which scripts run on mobile that are only relevant for desktop? Hover-effect widgets, flyout menus and tooltip handlers consume JS budget on mobile without adding value.

The audit produces a ranked list of mobile-specific bottlenecks, sorted by impact on mobile CrUX, not by how easy they are to fix.

What I typically fix on Magento for mobile

After the audit I implement the fixes with the highest impact. On mobile, it almost always involves a combination of the following:

  • Mobile-specific image variants via picture + srcset: the desktop hero at 1400px wide serves no purpose on a 390px wide screen. I add picture source elements with smaller variants so mobile loads a 600px wide WebP instead of the full desktop version.
  • font-display: swap on all web fonts: if a web font loads on a slow connection, without font-display:swap it blocks text rendering. On mobile with Slow 4G this is noticeable in the user experience.
  • Defer non-essential JS via media query: scripts that are only relevant for desktop (flyout nav, hover-intent, complex tooltip libraries) can be deferred or loaded only on media: (min-width: 1024px). That gives the mobile main thread room to breathe.
  • Sticky cart button with safe-area-inset: on devices with a notch or home indicator (iPhone with Face ID, Android with navigation bar) a sticky call-to-action needs padding-bottom: env(safe-area-inset-bottom), otherwise it overlaps with the system interface.
  • Tap target enlargements: plus/minus buttons in the cart, filter tags, social share buttons. I increase the clickable zone via padding or min-height/min-width without breaking the visual design.
  • Clean up hide-on-mobile patterns: elements with display:none on mobile that are still loaded, parsed and styled. They are invisible but still cost main thread budget. I replace lazy-hidden patterns with conditional loading where the performance gain justifies it.
  • Viewport meta tag correction: check and restore incorrect width or initial-scale values overridden by extensions.

Which fixes apply depends on your theme, extension set and Magento version. I tailor the approach to your stack.

Tap target violations: the invisible conversion problem

On Magento stores I see tap target problems most often in these places: the plus/minus buttons for product quantity in the mini cart, filter checkboxes in layered navigation, the hamburger menu button that is too small or too close to the edge of the screen, and product swatches packed closely together.

WCAG 2.5.8 (new in WCAG 2.2) states that interactive elements must have a minimum touch target of 24x24 CSS pixels. WCAG 2.5.5 recommends 44x44px for better usability. Lighthouse reports violations as 'Tap targets are not sized appropriately'. This is not a style issue but a conversion problem: a user who taps three times and misses a magnifier button or a minus button will leave the page.

I fix tap target violations with minimal visual impact. That means adding padding rather than making buttons larger, and increasing whitespace between adjacent interactive elements to reach the recommended 8px spacing. For hamburger menus I evaluate whether a bottom navigation for returning visitors is a better choice than a flyout menu opening from the top left.

-- Client case

CarCare24: mobile Lighthouse 38 to 65, CrUX LCP 2.14 seconds

CarCare24 is a Magento 2 store with around 3,400 products on Hypernode with Cloudflare Free. Infortis Ultimo theme, custom extensions and multiple third-party scripts. The mobile Lighthouse performance score in PSI lab varied significantly: on the same day it could show 38 or 65, depending on CPU scheduling variance on the Google server.

The mobile bottlenecks sat on three layers. At performance level: the hero image loaded as a desktop variant on mobile, without picture srcset for smaller screens. At UX level: several tap targets in the cart and layered navigation were below the 24px boundary. At script level: hover effect handlers and a desktop flyout menu library were fully parsed and executed on mobile, without any conditional check.

38 to 65
Mobile Lighthouse score (PSI lab, range)
2.14s
CrUX LCP mobile (28 days)
111ms
CrUX INP mobile

The mobile fixes were part of waves 6 to 9 of the broader performance programme. Mobile-specific image variants were added via picture source srcset on the hero. Hover-only scripts were deferred with a media query check. Tap target padding was increased on cart buttons and filter tags. The lab score remains variable due to CPU throttle variance on the Google server. That is a property of the measurement tool, not of the store. What matters: CrUX over 28 days shows LCP 2.14 seconds, INP 111ms, CLS 0.05. All Core Web Vitals green on mobile.

What I do not do for mobile Magento

There are approaches that sound easy but do not address the core problem, or introduce new ones.

  • Building AMP pages: AMP is technically valid for specific use cases, but for a Magento store with complex product configuration, cart functionality and extensions, AMP is a parallel platform that doubles maintenance costs without guaranteeing better CrUX scores.
  • Forcing native PWA installs: adding a service worker and web app manifest produces an installable PWA, but does not fix LCP, INP or tap target problems. I do not install a PWA layer as the foundation for performance work.
  • Hybrid app development: building a React Native or Flutter shell over your Magento store is a new-build project, not an optimisation. It falls outside the scope of what I describe here.
  • Mobile-only code branches in Magento core: separate PHP blocks per device via user-agent detection are fragile and hard to maintain. CSS with media queries and conditional JS with matchMedia checks is the right approach.
  • Lab score as the only goal: achieving a mobile PSI score of 90 via tricks that do not help real visitors on mid-range hardware is not a goal. Mobile CrUX is the goal.

I always explain why a particular approach is inadvisable, with the trade-off of cost, impact and risk.

Pricing and scope

Mobile optimisation is part of a broader Magento performance programme or stands as a standalone mobile audit. The price depends on the size of the store, the number of page types audited and fixed, and whether the theme allows mobile adjustments via the admin panel or whether PHP/JS changes are needed.

I do not work with fixed packages for Magento work. Prices are always on request, after an introductory call where I determine the scope based on your PSI data and CrUX reports.

Related pages

-- Veelgestelde vragen

Heb je een vraag?

Cloudflare reduces TTFB by serving cache from an edge location closer to the user. That helps on mobile just as much as on desktop. But Cloudflare does not fix tap target problems, excessive JS bundles or missing mobile image variants. CDN is one layer of the whole, not a replacement for front-end optimisation.
I do not use PWA Studio as an implementation tool for new stores. If your store already runs on PWA Studio, I can perform the performance audit and advise on mobile CrUX improvements. I handle implementation of fixes in a PWA Studio codebase on an advisory basis or in collaboration with your front-end developer.
Apple Pay and Google Pay are available through payment extensions that call the browser's Payment Request API. I do not install and configure payment extensions, but I do check whether existing payment buttons meet tap target requirements and whether they render correctly on the devices you want to support.
Yes. Chrome DevTools emulation simulates the screen size and network throttle, but not the GPU performance or touch latency of real hardware. I always test visual flows and tap target quality on a physical mid-range Android device with Chrome.
A viewport meta tag can be overridden by an extension, a theme update or an inline script. Some Magento extensions add their own viewport definition that overwrites the existing one. I check per page type which viewport values are actually active in the browser, not just what is in the template.
It is common, but not inevitable. The PSI simulation for mobile is considerably heavier than for desktop: 4x CPU throttle versus no throttle, Slow 4G versus Fast 3G. On a Magento store with a heavy JS bundle and no mobile-specific image approach, a score of 30 to 40 is not surprising. With targeted fixes most stores gain 20 to 30 points without a theme rewrite.

Poor mobile score on your Magento store?

Send me the PSI URL of your store. I will look at the mobile lab data and CrUX split and give you an honest picture of what can be improved, without obligation.