The Mobile Web Experience That Converts
The mobile web experience that converts is a web application that loads fast on cellular connections, is comfortable to use with thumbs, responds immediately to touch, and does not require the user to zoom or scroll horizontally to access content. The technical decisions that produce this experience -- image optimization, font loading strategy, tap target sizing, layout design -- are different from the decisions that produce a good desktop experience, and they matter more because the majority of web traffic comes from mobile devices.
Written by Yashveer Singh, founder of Yashveer Labs.
What you actually need to know
- More than 60 percent of web traffic is mobile. Optimizing for desktop first and adapting for mobile produces an experience designed for the minority of users.
- LCP under 2.5 seconds on a 3G connection is the threshold that correlates with acceptable mobile conversion. Images are the primary LCP culprit.
- Form inputs smaller than 16px font size trigger iOS auto-zoom. This is the most common and most disruptive mobile form problem.
- Tap targets smaller than 44x44 CSS pixels produce interaction failures. This affects buttons, links, and any interactive element.
font-display: swapprevents invisible text during font loading. Every production web app should have this configured.
| Mobile Performance Issue | User Impact | Technical Fix |
|---|---|---|
| Images not sized/compressed | Slow LCP, high bandwidth | next/image with WebP/AVIF |
| Font loading delay (FOIT) | Invisible text for 1-3 seconds | font-display: swap |
| Small tap targets (<44px) | Tap errors, poor INP score | Minimum 44x44px touch targets |
| Input font size <16px | iOS auto-zoom on focus | Min 16px on form inputs |
| Render-blocking scripts | Delayed interactivity | defer or async attributes |
| Horizontal scroll | Broken layout on small screens | No fixed widths wider than viewport |
The core argument
The mobile web experience gap is not a design problem -- it is an engineering problem. The specific technical decisions that produce a fast, usable mobile web experience are different from the decisions that produce a good desktop web experience, and they require deliberate implementation.
Most web applications are designed and developed primarily on desktop hardware with fast internet connections. The result is a web application that works well under the conditions where it was built and tested, and underperforms on the devices that actually drive the majority of its traffic. A Next.js application with unoptimized images, render-blocking font loading, and desktop-proportioned interactive elements will score poorly on Core Web Vitals for mobile, convert mobile visitors at a lower rate than desktop visitors, and be ranked lower in Google's mobile search results.
The gap between "works on desktop" and "converts on mobile" is primarily technical: image optimization, font loading strategy, tap target sizing, input behavior, layout constraints. None of these require a full redesign. All of them require specific engineering decisions that are different from the desktop default.
Image optimization for mobile
Images are the most common source of poor mobile LCP. The fix in Next.js:
```tsx import Image from 'next/image';
// Replaces <img src="hero.jpg" /> with: <Image src="/hero.jpg" alt="Hero image" width={800} height={600} priority // adds preload link for above-fold images sizes="(max-width: 768px) 100vw, 50vw" /> ```
The sizes attribute tells the browser which image size to download based on the viewport. A user on a 375px-wide phone does not need a 1600px image -- they need a 375px image. Without sizes, the browser downloads the largest image and scales it down. The priority prop adds a <link rel="preload"> tag for the image, ensuring it starts downloading before the browser has finished parsing the HTML -- this directly reduces LCP.
Next.js's Image component automatically serves WebP and AVIF formats to browsers that support them, reducing image file sizes by 25-50 percent over JPEG without visible quality loss.
For images outside of Next.js's Image component (OG images, user-uploaded content served directly), configure aggressive caching headers and consider CDN delivery.
Font loading strategy
The default web font loading behavior is FOIT -- text is invisible until the font file downloads. On mobile cellular connections, this can mean 1-3 seconds of invisible text.
Next.js with next/font:
```typescript // app/layout.tsx import { Inter } from 'next/font/google';
const inter = Inter({ subsets: ['latin'], display: 'swap', // show fallback text immediately preload: true, });
export default function RootLayout({ children }) { return ( <html lang="en" className={inter.className}> <body>{children}</body> </html> ); } ```
next/font handles: downloading and self-hosting the font (eliminating the Google Fonts DNS lookup), subsetting to only the characters needed (reducing file size), adding font-display: swap (showing fallback text immediately), and preloading the primary font weight.
The cumulative effect: the user sees text immediately (with a brief flash when the web font loads and replaces the fallback), the font file downloads faster because it is smaller and served from the same domain, and the DNS lookup for Google Fonts is eliminated.
Tap target sizing
Every interactive element -- button, link, form input -- should have a minimum touch target of 44x44 CSS pixels. The visual element does not need to be 44px; the touch target (including padding) does.
```css /* Too small: */ .nav-link { font-size: 14px; padding: 4px 8px; /* Total height: ~22px -- half the required size */ }
/* Correct: */ .nav-link { font-size: 14px; padding: 16px 12px; /* Total height: ~46px -- adequate touch target */ } ```
For icon buttons that are visually small, use padding to extend the touch target without changing the visual size:
``css .icon-button { display: flex; align-items: center; justify-content: center; padding: 12px; /* extends touch target while keeping icon visible size */ } ``
The INP (Interaction to Next Paint) Core Web Vital captures this problem: elements with insufficient touch targets produce interactions where the user taps a target but activates an adjacent one, causing a confused interaction pattern. Google's PageSpeed Insights and Lighthouse both flag tap target issues.
Form input behavior on mobile
Two input behaviors that produce poor mobile form experiences:
Font size below 16px triggers iOS auto-zoom. When an input has a font size smaller than 16px, iOS Safari zooms the page in when the input is focused. The user must manually zoom back out after entering the field. This is surprising, disruptive, and increases form abandonment.
``css input, textarea, select { font-size: 16px; /* minimum to prevent iOS auto-zoom */ } ``
Missing inputmode causes wrong keyboard. The default keyboard on mobile has letters, not numbers. A field for a phone number or zip code should show the numeric keyboard.
``tsx <input type="text" inputMode="numeric" pattern="[0-9]*" placeholder="ZIP code" /> <input type="email" inputMode="email" autoComplete="email" /> <input type="tel" inputMode="tel" autoComplete="tel" /> ``
The inputMode attribute tells the browser which keyboard to show without changing the input's validation behavior (type='number' has additional behavior that is often undesirable; inputMode='numeric' only changes the keyboard).
Mobile layout constraints
Two layout properties that break mobile web experiences:
Fixed widths wider than the viewport. An element with width: 900px on a 375px viewport creates horizontal scroll. Audit all fixed-width elements with widths in the hundreds of pixels and replace with responsive alternatives (max-width: 900px; width: 100%).
Overflow: hidden on parent elements that clip content. A common pattern: a container with overflow: hidden for visual reasons that also clips dropdown menus, tooltips, or scroll indicators that should extend beyond the container bounds. On mobile, clipped interactive elements are inaccessible.
The audit: set the viewport to 375px width in browser DevTools and scroll through every page looking for horizontal overflow. Chrome DevTools' Rendering > Emulate a Mobile Device provides the correct viewport and touch simulation.
Common mistakes teams make with mobile web
- Not testing on a real device (or at minimum, on DevTools mobile simulation) during development. Desktop development environments are not representative of mobile performance. The $200 Android phone on a 3G connection is the correct test environment for understanding actual mobile user experience.
- Not setting the viewport meta tag. Without
<meta name="viewport" content="width=device-width, initial-scale=1">, mobile browsers render the page at a desktop width and scale it down. This is a basic omission that makes the page unusable on mobile. - Using hover-dependent UI on mobile. Hover states (dropdown menus triggered by hover, tooltips shown on hover) do not work on touch devices. Any UI that requires hover to access functionality must have an alternative for touch.
- Not running Lighthouse mobile audits before shipping. Lighthouse's mobile mode simulates a slower CPU and connection and surfaces mobile-specific issues. Run it before every release on the highest-traffic pages.
- Treating Core Web Vitals as a SEO metric rather than a UX metric. LCP, INP, and CLS are measured because they correlate with user experience. Improving them produces real improvements in conversion rate, session length, and return visits -- not just search ranking.
Where to start: a 3-step mobile web audit
Step 1: Run PageSpeed Insights on the three highest-traffic pages in mobile mode. The tool shows the LCP element (usually an image), INP score, CLS, and specific recommendations. The highest-priority recommendations are the ones to address first.
Step 2: Open the site in Chrome DevTools with a 375px viewport and touch mode enabled. Check for horizontal scroll, tap targets smaller than 44px, and form inputs with font size below 16px. These three checks find the most common mobile usability failures.
Step 3: Verify all images use next/image (for Next.js) with correct sizes prop and priority on above-fold images. Image optimization is the highest-impact single change for most applications. Convert unoptimized images to next/image and measure the LCP improvement in PageSpeed Insights.
The Web That Works on the Device in Their Pocket
Yashveer Singh. Founder of Yashveer Labs. The Expert Tutorials marketing site was not mobile-optimized when it launched. The Lighthouse mobile score was 41 -- failing LCP (4.2 seconds on simulated 3G from unoptimized images), failing INP (navigation links at 32px height), and a warning on font loading. The optimization took three days: converting all images to next/image with correct sizes, adding font-display: swap via next/font, and updating navigation and CTA button heights to 48px. The Lighthouse mobile score went to 87. The mobile conversion rate (trial sign-ups per mobile session) increased 19 percent in the four weeks following the optimization, compared to the four weeks before. That is the return on three days of mobile web optimization work: measurable business improvement from technical decisions that had nothing to do with the product's value proposition.
Related reading
Frequently asked
Why you should skip the agency and hire me instead
Agencies markup engineering work by three to five times. Yashveer Singh, founder of Yashveer Labs. I do the work directly. No project manager, no account manager, no overhead. The engineer you talk to is the engineer who writes the code. That changes the math on price, speed, and quality at the same time. If that sounds like the shape of project you have, we should talk.
Posts that line up with this one.
- Web App and Frontend Development
Settings and Preferences: A Common Pattern Done Badly
Settings pages reveal how well an app is architected. Most of them reveal the opposite.
- Web App and Frontend Development
The Frontend Build System: Why It Matters More Than Founders Think
How your JavaScript build system affects developer velocity, deployment reliability, and application performance -- and what founders need to know about it.
- Web App and Frontend Development
The Modern Three D on the Web: Three.js and Beyond
Three.js, React Three Fiber, and WebGPU: when 3D on the web is worth the complexity, and when a CSS animation is the right answer.
- Web App and Frontend Development
Loading States, Skeletons, and Optimistic UI
How you handle loading states is one of the most visible indicators of product quality. Here is the decision framework for when to use spinners, skeletons, and optimistic updates, and the common mistakes that make apps feel slow.