Mobile is now the primary shopping channel, with over 70% of Shopify traffic coming from smartphones. Yet mobile display issues remain common, often caused by theme edits, app conflicts, or image rendering errors. These glitches can hurt both conversions and SEO. This guide, NextSky, covers the most common Shopify mobile display issues and how to quickly identify and fix them.

Why Shopify themes break on mobile

A Shopify theme that looks flawless on desktop can fall apart on mobile for several reasons, and it rarely announces itself clearly. Understanding the root causes saves you hours of guesswork.

  • Hard-coded pixel values (e.g., width: 960px) that prevent layouts from adapting to smaller screens, causing overflow or broken designs.
  • Third-party app scripts that inject CSS or JavaScript, leading to rendering conflicts, unresponsive buttons, or missing sections on mobile.
  • Missing or outdated media queries, leaving themes without proper instructions for smaller screen sizes.
  • Oversized, unoptimized images, slow loading times and force containers beyond the viewport, creating horizontal scrolling.
  • Outdated theme codebases, especially pre-Online Store 2.0 themes, which lack modern responsive architecture and section rendering support.
  • Missing or incorrect viewport meta tags, causing mobile browsers to display pages at desktop scale and shrink them down, resulting in tiny, hard-to-use content.

Step 1: Diagnose before you fix

The biggest mistake store owners make is jumping straight to CSS edits without confirming what is actually broken and where. A structured diagnosis takes 15 minutes and saves hours later.

Use Shopify's built-in mobile preview

In the Shopify Admin, go to Online Store → Themes → Customize. Toggle the preview to mobile view using the device icons at the top of the editor. Check every template: homepage, collection page, product page, cart, and any landing pages. Pay attention to:

  • Navigation menu collapse behavior
  • Button sizes and tap target spacing
  • Image scaling and aspect ratios
  • Font legibility (minimum 16px base size)
  • Form fields and popup overlays

This preview is a simulator, not a real device—it is a starting point, not a final test.

Test on a real device

Simulators miss real-world rendering quirks. Open your store on an actual iPhone (Safari) and an Android phone (Chrome). Load it on mobile data, not Wi-Fi—this reveals performance bottlenecks that a fast connection hides. The experience you find here is what your customers experience.

Run Google's mobile-friendly test

Visit search.google.com/test/mobile-friendly and enter your store URL. The report flags:

  • Touch elements positioned too close together
  • Text rendered too small to read without zooming
  • Content wider than the screen
  • Missing viewport configuration

These results directly reflect how Google evaluates your store for mobile-first indexing.

Use Chrome devtools for precision

Open your store in Chrome, press F12, and switch to the Device Toolbar (Ctrl+Shift+M). Test at several common breakpoints:

Breakpoint

Target Device

375px

iPhone SE / small Android

390px

iPhone 14/15 Pro

430px

iPhone 14/15 Plus

360px

Many Android mid-range

768px

iPad / tablet

In the Console tab, look for JavaScript errors (red entries). These often point directly to the app or script causing a layout conflict. In the Elements panel, you can inspect specific containers and see which CSS rules are applying or being overridden.

Check your core web vitals

Google evaluates mobile performance through Core Web Vitals, with Interaction to Next Paint (INP) now the key responsiveness metric for Shopify stores. Since every app script adds to the JavaScript workload, excessive apps can slow user interactions. Use PageSpeed Insights to test your homepage, collection, product, and cart pages, these templates uncover most performance issues. 

Step 2: Fix layout and container scaling

Once you have confirmed what is broken, start with the structural CSS issues before touching anything else.

Replace fixed widths with flexible units

Any CSS rule that uses a fixed-pixel width for a container is a candidate to break on mobile. Replace it with percentage-based or max-width logic:

css

/* Before – breaks on mobile */

.section-wrapper {

  width: 1200px;

}

/* After – scales correctly */

.section-wrapper {

  width: 100%;

  max-width: 1200px;

  padding: 0 16px;

  box-sizing: border-box;

}

The box-sizing: border-box declaration is critical—without it, padding adds to the total width and causes overflow on narrow screens.

Write mobile-first media queries

The most reliable approach is to write your base CSS for mobile first, then expand for larger screens. This is the opposite of how many older Shopify themes were built.

css

/* Mobile base */

.product-grid {

  display: grid;

  grid-template-columns: 1fr;

  gap: 16px;

}

/* Tablet and up */

@media (min-width: 768px) {

  .product-grid {

    grid-template-columns: repeat(2, 1fr);

  }

}

/* Desktop */

@media (min-width: 1024px) {

  .product-grid {

    grid-template-columns: repeat(4, 1fr);

  }

}

This approach ensures your layout works on mobile by default, rather than trying to undo desktop styles at smaller sizes.

Use flexbox and css grid instead of floats

Older Shopify themes relied on float-based layouts, which require complex clearfix hacks and break unpredictably on mobile. Modern layouts should use Flexbox or CSS Grid:

css

.banner-content {

  display: flex;

  flex-direction: column;

  align-items: center;

  gap: 24px;

}

@media (min-width: 768px) {

  .banner-content {

    flex-direction: row;

    justify-content: space-between;

  }

}

Step 3: Fix image display issues

Images cause two distinct types of mobile problems: layout breaks and slow load times. Both need to be addressed separately.

Fix image scaling

Every image in your theme should have these CSS rules:

css

img {

  max-width: 100%;

  height: auto;

  display: block;

}

The max-width: 100% rule prevents images from overflowing their containers. The height: auto rule maintains the aspect ratio as the image scales down. The display: block rule removes the small gap that inline images create below themselves.

Fix aspect ratio inconsistencies in product grids

If your collection grid shows images at different heights, it is almost always because products have different aspect ratios. Fix this at the CSS level rather than forcing every product image to be the same dimensions:

css

.product-card__image-wrapper {

  aspect-ratio: 1 / 1;

  overflow: hidden;

}

.product-card__image-wrapper img {

  width: 100%;

  height: 100%;

  object-fit: cover;

}

This forces all product thumbnails to a consistent square ratio regardless of the original image dimensions.

Optimize image file sizes

Large images slow mobile load times significantly. Shopify automatically serves responsive image sizes through its CDN when you use the image_url filter in Liquid correctly:

liquid

{{ product.featured_image | image_url: width: 800 | image_tag: loading: 'lazy' }}

Google evaluates mobile performance through Core Web Vitals, with Interaction to Next Paint (INP) now the key responsiveness metric for Shopify stores. Since every app script adds to the JavaScript workload, excessive apps can slow user interactions. Use PageSpeed Insights to test your homepage, collection, product, and cart pages, these templates uncover most performance issues. 

Step 4: Fix Typography and Tap Targets

Google's mobile usability guidelines require a minimum base font size of 16px and tap targets of at least 48×48 pixels. Stores that fall below these thresholds see higher bounce rates from mobile users and lower scores in Google Search Console's mobile usability report.

Set a scalable type system

Use rem units for typography so the entire type scale adjusts relative to the browser's root font size:

css

html {

  font-size: 16px;

}

h1 { font-size: 2rem; }       /* 32px */

h2 { font-size: 1.5rem; }     /* 24px */

h3 { font-size: 1.25rem; }    /* 20px */

p  { font-size: 1rem; }       /* 16px */

small { font-size: 0.875rem; } /* 14px */

On mobile, you may want to reduce heading sizes:

css

@media (max-width: 768px) {

  h1 { font-size: 1.75rem; }

  h2 { font-size: 1.25rem; }

}

Fix button and link tap targets

Buttons that are sized for mouse clicks are often too small for fingers. The minimum recommended tap target is 48×48px, with adequate spacing between adjacent targets so users do not tap the wrong element:

css

.btn,

button,

a.nav-link {

  min-height: 48px;

  min-width: 48px;

  padding: 12px 20px;

  font-size: 1rem;

  display: inline-flex;

  align-items: center;

  justify-content: center;

}

This is especially important for your Add to Cart button, navigation links, and any filter or sorting controls.

Step 5: Isolate and resolve app conflicts

App conflicts are responsible for a large percentage of mobile-only display issues, precisely because apps are rarely tested thoroughly on mobile before being installed.

Systematically disable apps to isolate the problem

The fastest diagnostic technique is binary elimination:

  1. Disable all apps
  2. Test your store on mobile
  3. If the issue is gone, re-enable apps one by one, testing after each one
  4. The last app you re-enable before the problem returns is the source

This takes 20–30 minutes but definitely identifies the conflicting app without any guesswork.

Check the console for javascript errors

Once you've identified a suspected app, use Chrome DevTools (F12) to check the Console for JavaScript errors. A common error like Cannot read properties of null (reading 'addEventListener') indicates the app is trying to interact with an element that doesn't exist, often because the mobile layout differs from the desktop version the app was designed for. 

Control script loading in theme.liquid

If you need to keep a conflicting app but limit where it loads, Shopify's Liquid templating lets you conditionally load scripts:

liquid

{% unless template == 'cart' or template == 'checkout' %}

  {{ 'app-widget.js' | asset_url | script_tag }}

{% endunless %}

This prevents the script from loading on pages where it causes conflicts while keeping it active where it is needed.

Prefer apps built on Shopify app extensions

Apps built with Shopify's App Blocks framework integrate through the theme editor instead of injecting code into Liquid files, making them less likely to cause mobile display issues. When choosing new apps, prioritize those that use App Blocks, as they offer better compatibility, easier management, and fewer theme conflicts.

Step 6: Fix navigation on Mobile

Navigation is one of the most commonly broken elements on mobile Shopify stores. A menu that works perfectly as a horizontal desktop nav can render as an unusable stack of overlapping links on a phone.

Ensure your hamburger menu triggers correctly

If the mobile hamburger icon does not open the menu, the cause is almost always one of three things: a JavaScript error preventing the click handler from attaching, a z-index conflict where an element is covering the icon, or a CSS display conflict hiding the button on mobile.

Check the icon's visibility:

css

@media (max-width: 768px) {

  .header__hamburger {

    display: flex;

    align-items: center;

    justify-content: center;

    width: 48px;

    height: 48px;

    cursor: pointer;

  }

}

And ensure no other element has a higher z-index positioned over it.

Test dropdown menus on touch devices

Touch devices have no hover state, they have tap. Dropdown navigation menus that rely on :hover CSS to reveal sub-menus will not work on mobile. If your theme uses hover-triggered dropdowns, the mobile version should convert them to tap-to-expand accordions. Most modern Shopify themes handle this automatically, but it breaks when custom CSS accidentally removes the touch-specific styles.

Step 7: Improve mobile page speed

A fast mobile experience is not just a UX concern, it directly affects your Google ranking through Core Web Vitals. The most impactful changes you can make require no coding.

Reduce your app count

Every Shopify app adds scripts and often CSS that increase page load weight, especially on mobile devices. Many stores accumulate unused apps over time, hurting performance. Review your apps regularly and remove any that no longer deliver measurable value. Uninstall them completely rather than simply disabling them, as inactive apps can still leave code behind and slow your store. 

Defer non-critical scripts

Scripts that load in the of your document block rendering until they finish downloading and executing. Move non-critical scripts to load with defer or async:

liquid

Scripts that must run on page load (like your theme's core interactivity) should stay synchronous, but analytics pixels, chat widgets, and marketing tools should almost always be deferred.

Enable browser caching and CDN optimization

Shopify serves all theme assets through its global CDN automatically, so static assets like images, CSS, and JavaScript are already cached at edge nodes near your customers. However, you can improve perceived performance further by preloading above-the-fold resources:

liquid

Step 8: Update or replace your theme

If you have been patching an older theme for years, there comes a point where the maintenance cost exceeds the value. Signs that a theme replacement makes sense:

  • The theme was last updated before 2022.
  • It is not built on Online Store 2.0 architecture.
  • You have accumulated layers of custom CSS overrides that conflict with each other.
  • Core Web Vitals scores remain poor despite optimization efforts.
  • The theme developer no longer provides support.

Modern Shopify OS 2.0 themes like Dawn, Impulse, and Prestige use mobile-first architecture and App Blocks, eliminating many common mobile issues without custom development. Before migrating, back up your custom code and use Shopify’s Recent Changes tool to reapply only the modifications that still matter.

Mobile product page issues: A specific checklist

Product pages have their own set of mobile display problems that appear frequently after customization. Run through this checklist on a real mobile device:

Add to Cart button visibility: Is the ATC button fully visible and tappable without scrolling? A common issue occurs when a sticky header, cookie banner, or app overlay covers the top of the screen and the ATC button sits behind it due to a z-index conflict.

Image gallery swiping: Can you swipe through product images naturally? This breaks when a third-party image zoom app conflicts with the theme's native touch event handlers. If swiping stopped working after an app install, that app is the likely cause.

Variant selectors: Are color swatches and size buttons large enough to tap accurately? At minimum, each option should be 44×44px with adequate spacing. Cramped selectors cause wrong-variant purchases and increase returns.

Description tabs and accordions: Do tabs open and close when tapped? Tab components that use JavaScript toggle classes sometimes conflict with app scripts, or the tap area is too small to register reliably.

Sticky add-to-cart bars: If your theme or an app adds a sticky bottom bar on mobile, test whether it covers the page content below the fold in a way that makes text unreadable or other buttons untappable.

When to bring in a developer

Most mobile display issues described in this guide can be fixed without professional help if you are comfortable with basic CSS and the Shopify admin. However, some situations genuinely call for an experienced Shopify developer:

  • Persistent JavaScript errors you cannot isolate to a specific app
  • Core Web Vitals scores that do not improve despite removing apps and optimizing images
  • Complex custom functionality (custom filters, AJAX cart, multi-currency display) behaving differently on mobile
  • A theme migration that involves significant custom Liquid logic

When engaging a developer, provide them with screenshots, the specific URLs affected, your browser console errors (exported as a HAR file if possible), and a list of installed apps. This information significantly reduces diagnostic time and the cost of the engagement.


Comments

Looking for Help?
Get support from our team

If you can't find the answer you're looking for, our support team is here to help.