Shopify · Hosted ecommerce

Shopify SEO Audit: the issues built into Shopify — and how to fix them

The largest hosted ecommerce platform — fast to launch, but its fixed URL structure and app-driven theming create a recurring set of SEO and performance issues.

Common Shopify stacks SEOLZ recognizes

Shopify + Recharge · Shopify + Klaviyo · Shopify Headless · Shopify + Yotpo · Shopify + Gorgias

Your platform & cart configuration is auto-detected during your audit.

How Shopify's architecture shapes your SEO

Shopify is fully hosted: you control the storefront through Liquid templates and the theme editor, but not the server, the URL prefixes, or the checkout domain. That trade-off is what shapes its SEO profile. Every page lives under a forced path (/products/, /collections/, /pages/, /blogs/), the same product is reachable from multiple collection URLs, and most structured data and meta logic lives in theme Liquid — so two stores on the same theme can ship the same bugs. Most fixes are theme-level (robots.txt.liquid, theme.liquid, JSON-LD snippets) rather than server config.

Reference: Shopify SEO & Liquid docs

The issues we see most on Shopify stores

Why these happen on Shopify

Specific to how Shopify is built — not generic checklist advice.

SEO

Duplicate product URLs from collection paths

Every product is reachable at /products/handle and at /collections/name/products/handle. Shopify auto-points the canonical to the clean /products/ URL, but many themes still internally link the collection-scoped version, and apps can expose them in sitemaps — wasting crawl budget and splitting signals. Audit your internal links and sitemap to ensure only the canonical /products/ form is surfaced.

Full fix guide →
SEO

Faceted collection URLs flood the crawl

Filter and sort parameters (?sort_by=, tag filters, ?grid_list) generate near-infinite low-value URL variants of the same collection. Without parameter handling these get crawled and can dilute the collection's ranking. Control them in robots.txt.liquid and keep canonicals pointing to the unfiltered collection.

AEO

Theme-dependent Product schema

Shopify does not emit Product/Offer JSON-LD for you — it comes from the theme, and quality varies wildly. Missing price, availability, or review markup means your products won't qualify for rich results or get pulled into AI shopping answers. Validate the JSON-LD your theme actually outputs against Schema.org Product.

Full fix guide →
SEO

App scripts drag down Core Web Vitals

Each installed app typically injects its own JavaScript into every page. A store with 15+ apps often ships a render-blocking bundle that tanks LCP and INP on mobile. Audit installed apps, remove unused ones, and defer non-critical scripts in theme.liquid.

Fixes written for Shopify

We catalog 167 Shopify fixes — exact steps for Shopify's admin and theme, each with a link to the official docs.

Catalog coverageSEO

Ensure every product and category page is crawlable and discoverable by submitting a complete XML sitemap, fixing internal links, and removing any crawl blocks so Google can index your full catalog.

On Shopify
  1. 1Sitemap: Shopify auto-generates /sitemap.xml including product and collection pages. Submit it in Google Search Console: Settings → Sitemaps → enter 'sitemap.xml'. If products are missing, ensure they are 'Active' (not draft) under Products.
  2. 2robots.txt: In Online Store → Themes → (your theme) → Edit code → 'robots.txt.liquid'. Check for any Disallow rules blocking /products/ or /collections/ and remove them.
  3. 3Noindex: In Online Store → Preferences, confirm 'Password protection' is off. For individual pages, third-party SEO apps (e.g. Yoast for Shopify, SEO Manager) can accidentally add noindex — audit via the app's settings.
  4. 4Internal linking: In Online Store → Navigation, ensure your main menu links to all top-level collections. Within collection pages, confirm products are actually assigned to collections (Products → Collections → [collection] → add products).
  5. 5JavaScript navigation: Shopify's default themes use standard <a href> links in menus — safe for crawlers. If you use a custom or third-party theme with JS-only dropdowns, edit theme.liquid or the navigation Liquid snippet to ensure real href attributes.
Shopify docs →
Cwv clsSEO

Eliminate unexpected layout shifts by reserving explicit space for every image, video, embed, ad, and late-loading widget before it loads, so nothing on your page jumps around as it renders.

On Shopify
  1. 1Images: In Online Store > Themes > Edit Code, open the Liquid template(s) for your sections (e.g. sections/image-banner.liquid, snippets/product-image.liquid). Find every <img> tag and ensure width='{{ image.width }}' height='{{ image.height }}' attributes are set. Dawn and other modern Shopify themes include these by default — verify yours does too.
  2. 2Responsive aspect ratio: In your theme's CSS file (assets/theme.css or base.css), add .media { aspect-ratio: var(--ratio-width) / var(--ratio-height); overflow: hidden; } and make sure image wrappers use this class.
  3. 3Announcement bar: In the Theme Customizer (Customize > Announcement Bar section), the bar is rendered server-side and reserves space by default in modern themes. If you added a third-party announcement bar via a Script Tag or app, replace it with a theme section so the height is pre-reserved.
  4. 4Fonts: In Online Store > Themes > Edit Code > assets/base.css (or theme.css), find @font-face rules and add font-display: swap;. If using Google Fonts loaded via a <link> tag, add &display=swap to the Google Fonts URL in theme.liquid.
  5. 5Third-party widgets and chat: Go to Online Store > Themes > Edit Code > layout/theme.liquid. Move any injected widget <script> tags to just before </body> so they load last and cannot shift above-the-fold content. Wrap each widget's mount point in a min-height container.
  6. 6Cookie/consent banners: If using a Shopify app for GDPR consent, check the app's settings for 'banner position' and set it to a bottom-fixed bar. Apps like Pandectes GDPR or Consentmo have this option in their app dashboard.
Shopify docs →
Cwv lcpSEO

Reduce Largest Contentful Paint (LCP) to under 2.5 seconds by serving your hero image in a modern format, preloading it, and eliminating render-blocking resources.

On Shopify
  1. 1Convert your hero image to WebP before uploading: go to Online Store → Themes → Customize → the section containing your hero banner (e.g., 'Image banner' or 'Slideshow') → click the image picker and upload a WebP version of the image.
  2. 2Shopify's CDN automatically serves images via its Imgix-powered CDN, but you must request WebP explicitly in Liquid. In your theme code (Online Store → Themes → Edit code), find the hero section's Liquid file (e.g., sections/image-banner.liquid) and change the image_url filter to include format: 'webp' — e.g., {{ section.settings.image | image_url: width: 1500, format: 'webp' | image_tag: loading: 'eager', fetchpriority: 'high' }}.
  3. 3Add a preload link: in layout/theme.liquid, inside the <head> tag, add: <link rel='preload' as='image' href='{{ section.settings.image | image_url: width: 1500, format: 'webp' }}' fetchpriority='high'>. For Dawn and similar themes, look for an existing hero preload block and update it.
  4. 4Ensure the hero <img> tag does NOT have loading='lazy'. In the same section Liquid file, confirm the image_tag call uses loading: 'eager' (or omits loading entirely).
  5. 5Defer non-critical JS: in layout/theme.liquid, add 'defer' to any non-essential <script> tags. Remove any unused apps via Online Store → Apps to reduce JS payload.
  6. 6Verify the fix: re-run PageSpeed Insights on your homepage and confirm LCP drops below 2.5s on mobile.
Shopify docs →
Duplicate meta descriptionSEO

Write a unique, page-specific meta description for every page on your store so Google can display a relevant snippet in search results.

On Shopify
  1. 1For individual product pages: Admin → Products → click the product → scroll to 'Search engine listing' at the bottom → click 'Edit' → fill in the 'Meta description' field (max 320 chars; aim for 150–160) → Save.
  2. 2For collection pages: Admin → Products → Collections → click the collection → scroll to 'Search engine listing' → Edit → fill in unique Meta description → Save.
  3. 3For blog posts: Admin → Content → Blog posts → click the post → 'Search engine listing' → Edit → fill in Meta description → Save.
  4. 4For the homepage: Admin → Online Store → Preferences → 'Homepage meta description' field → Save.
  5. 5For bulk updates across many products, use the Shopify bulk editor (Admin → Products → select all → Edit products) and add 'Meta description' as a column, or export/import via CSV (column: 'Metafields: global.description_tag').
  6. 6Theme-level fallback: if a description field is left blank the theme may output a template default. Open Online Store → Themes → Edit code → search your theme's `product.liquid` / `collection.liquid` for `meta name="description"` and ensure it references `{{ product.metafields.global.description_tag }}` rather than a hard-coded string.
Shopify docs →

Browse all 167 Shopify fixes →

Based on 6 Shopify stores audited on SEOLZ

vs all-platform average

Avg SEO88
+7 above average
Avg AEO51
+9 above average
Avg WCAG92
≈ average
Avg Security71
-5 below average
Avg GEO55
+7 above average
Avg Composite73
+9 above average

Shopify stores score above average overall — but AEO is the common weak point.

⚠ What SEOLZ can't modify on Shopify

We still flag these issues — but the fix lives outside what Shopify lets you change.

Checkout pages

Checkout pages (/checkout, /thank_you) are hosted on Shopify's own servers. SEOLZ flags issues there, but fix steps require Shopify Plus (checkout.liquid access) or Shopify's Checkout Extensibility.

robots.txt

Shopify's robots.txt is partially managed by Shopify. You can add custom rules via the robots.txt.liquid template, but some Shopify-generated directives can't be removed.

Server-level headers

Security headers like CSP must be set via your theme or a Shopify app — you can't configure them at the server level.

Every scan checks all six pillars

🔍
SEO

Search engines need to crawl and understand your catalog. We check every page for indexability, metadata, canonical tags, Core Web Vitals, internal linking, and faceted navigation — the issues that silently kill organic traffic.

Learn how to fix SEO issues →
Answer Engine (AEO)

AI tools like ChatGPT and Google's AI Overviews pull from structured data. We audit your product schema, FAQ markup, brand signals, and E-E-A-T indicators — so your products show up where shoppers are increasingly searching.

Learn how to fix Answer Engine (AEO) issues →
🌐
AI Visibility (GEO)

Is your brand mentioned when someone asks an AI assistant for product recommendations? We track your presence across ChatGPT, Perplexity, and other AI engines — and tell you what's driving mentions up or down.

Learn how to fix AI Visibility (GEO) issues →
Accessibility (WCAG)

1 in 4 adults has a disability. Inaccessible sites face ADA lawsuits — and lose customers. We run WCAG 2.1 AA checks across your catalog pages and tell you exactly what to fix.

Learn how to fix Accessibility (WCAG) issues →
🛡️
Security (OWASP)

Security headers, SSL configuration, email authentication, and server misconfigs — issues that erode customer trust and tank your search rankings if Google flags you.

Learn how to fix Security (OWASP) issues →
Site Lifecycle

SSL expiry, outdated CMS versions, unverified GTM containers. The operational health checks that fall through the cracks — until they cause an outage or a ranking drop.

Learn how to fix Site Lifecycle issues →

Start free. Upgrade when ready.

Scout
Free
1 site · 50 pages/audit · monthly audits
SEO only
  • Composite + pillar scores
  • Issue counts
  • Free forever
Start free
Recommended
Starter
$49/mo
1 site · 500 pages/audit · weekly audits
All 6 pillars
  • Every finding + platform-specific fixes
  • Action plan & Today's Focus
  • ADA risk + AI visibility
  • Export reports
Choose Starter

Questions about Shopify audits

Yes — we crawl your live Shopify storefront from the outside, no app install or theme code required. Our fix steps are written for Shopify's theme editor, Liquid files, and admin.

See what's holding back your Shopify store

Free scan. No credit card. Results in minutes.

Scan My Shopify Store Free