Shopify · Hosted ecommerce

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

A Shopify SEO audit checks your store across search, AI visibility, accessibility and security — with a fix for each issue we find.

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. Linked stacks have fix guides.

How does Shopify's architecture shape 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 →

What issues show up most on Shopify sites?

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.

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 182 Shopify fixes — exact steps for Shopify's admin and theme, each with a link to the official docs.

Catalog coverageSEO

Audit your XML sitemap and internal linking so that every product and category page is discoverable and crawlable by Google — not hidden behind JavaScript, pagination, or missing links.

On Shopify
  1. 1Admin › Online Store › Preferences: ensure your store is password-protected only while in development. On live stores, remove the password so crawlers can access the site.
  2. 2Shopify auto-generates a sitemap at yourstore.com/sitemap.xml that includes products and collections. Verify it in Admin › Online Store › Themes › Actions › Edit code — check theme.liquid for any accidental noindex tags on collection or product templates.
  3. 3In Google Search Console, go to Indexing › Sitemaps, enter yourstore.com/sitemap.xml and click Submit. Monitor the 'Discovered URLs' count against your actual product count.
  4. 4Check navigation: Admin › Online Store › Navigation. Ensure every collection (category) is reachable from a menu. Products without a collection link may only be reachable via the sitemap.
  5. 5For large catalogs using Shopify's built-in pagination, confirm each paginated collection page URL (e.g., /collections/shoes?page=2) is linked via the 'Next' button rendered as a standard <a> tag — Shopify's default themes do this correctly, but custom themes may break it.
  6. 6Install a sitemap or SEO app (e.g., Plug In SEO or SEO Manager) to audit which products are missing from the sitemap or carry noindex tags.
Code · Shopifyliquid
{% comment %}
  CORRECT: Only noindex pages that should be hidden (e.g., search, cart).
  Do NOT noindex product or collection templates.
{% endcomment %}
{% if template == 'search' or template == 'cart' %}
  <meta name="robots" content="noindex, follow">
{% else %}
  <meta name="robots" content="index, follow">
{% endif %}

In theme.liquid (Online Store › Themes › Edit code › Layout › theme.liquid), check the <head> for any conditional noindex logic and remove it for product/collection templates.

Shopify docs →
Cwv clsSEO

Eliminate unexpected layout shifts by reserving space for every image, video, embed, and dynamically injected element so nothing jumps when the page loads.

On Shopify
  1. 1Images: In your theme editor (Online Store → Themes → Edit code), open the Liquid snippet that renders product/collection images — typically sections/product-template.liquid or snippets/product-image.liquid. Find every <img> tag and add width and height attributes matching the rendered dimensions, e.g. width='800' height='800'. Alternatively install the free 'Booster SEO' or 'TinyIMG' app which patches image dimensions automatically across your theme.
  2. 2Lazy-loading: Shopify's Dawn and most modern themes already add loading='lazy' and explicit dimensions via Liquid's | image_url filter with width parameter. If yours does not, update image_url calls to use: {{ image | image_url: width: 800 }} and render the img tag with width and height set.
  3. 3Announcement bar / cookie banner: In the theme editor (Customize → Header), move any announcement bar to a server-rendered position rather than injecting it via JavaScript after load. For third-party cookie apps, choose ones that render as fixed overlays (bottom of viewport), not top-push banners.
  4. 4Fonts: In your theme's layout/theme.liquid, add font-display: optional to any @font-face declarations. If using Shopify's font picker, edit the generated CSS in assets/base.css to add the descriptor.
  5. 5Ads / embeds: Wrap any review widgets (e.g. Judge.me, Yotpo) or social feed apps in a <div style='min-height:200px'> container in the relevant section file so space is reserved before the widget JS loads.
  6. 6Verify: Use PageSpeed Insights on your homepage and top product pages; confirm CLS < 0.1 on both mobile and desktop.
Code · Shopifyliquid
{%- liquid
  assign img_width  = 800
  assign img_height = 800
  assign img_src    = product.featured_image | image_url: width: img_width
-%}
<img
  src="{{ img_src }}"
  alt="{{ product.featured_image.alt | escape }}"
  width="{{ img_width }}"
  height="{{ img_height }}"
  loading="lazy"
  decoding="async"
>

In your theme's image snippet (e.g. snippets/responsive-image.liquid or inline in a section file), use Shopify's image_url filter with explicit width and height to output a properly sized img tag.

Shopify docs →
Cwv inpSEO

Reduce Interaction to Next Paint (INP) to under 200 ms by breaking up long JavaScript tasks, deferring non-critical third-party scripts, and lightening event handlers so the page feels fast and responsive after every tap or click.

On Shopify
  1. 1Go to Online Store → Themes → (your theme) → Edit code.
  2. 2Open theme.liquid (or layout/theme.liquid). Find any render-blocking `<script>` tags for third-party apps (chat, reviews, pop-ups) and add the `defer` or `async` attribute, or move them just before `</body>`.
  3. 3In the Shopify admin, go to Online Store → Preferences and disable any built-in scripts you don't need (e.g., welcome pop-up overlays).
  4. 4Go to Apps and review every installed app. Remove apps whose scripts are not actively driving revenue — each app injects JavaScript that can inflate INP. Check the App Blocks in the theme editor and remove unused ones.
  5. 5For custom JavaScript in assets/theme.js or assets/global.js, open those files and refactor heavy click/submit handlers: extract expensive work into a `setTimeout` or use `scheduler.yield()` so the browser can paint between steps.
  6. 6Use Shopify's Speed Score (Online Store → Themes) and PageSpeed Insights to verify improvement after each change.
Shopify docs →
Cwv lcpSEO

Reduce Largest Contentful Paint (LCP) to under 2.5 seconds by serving the hero image in a next-gen format (WebP/AVIF), preloading it, and eliminating render-blocking resources.

On Shopify
  1. 1IDENTIFY LCP IMAGE: Run PageSpeed Insights on your storefront URL. Note the filename of the LCP image (usually the first banner/hero in your theme's index section).
  2. 2CONVERT TO WEBP: Shopify automatically serves WebP when you upload a standard JPEG/PNG — verify by right-clicking your live hero image and checking the URL ends in .webp or contains 'format=webp'. If not, ensure you are using a modern theme (Dawn or equivalent).
  3. 3PRELOAD: Go to Online Store › Themes › your active theme › Edit code. Open 'layout/theme.liquid'. Inside the <head> tag, add: <link rel='preload' as='image' href='{{ section.settings.image | image_url: width: 1500 }}' fetchpriority='high'>. For a hardcoded URL use your CDN path directly.
  4. 4NO LAZY-LOAD: In your hero section's Liquid file (e.g., sections/image-banner.liquid), find the <img> tag for the hero and remove loading='lazy' or change it to loading='eager'. Also add fetchpriority='high'.
  5. 5DEFER JS: In theme.liquid, add 'defer' to non-critical <script src='...'> tags that appear in <head>.
  6. 6APPS: Install a performance app such as 'Crush.pics' or 'TinyIMG' for bulk WebP conversion, or 'Booster: Page Speed Optimizer' for automatic render-blocking JS deferral.
  7. 7VERIFY: Re-run PageSpeed Insights and check Google Search Console › Experience › Core Web Vitals.
Code · Shopifyliquid
{%- comment -%} Preload LCP hero image — place high in <head> in layout/theme.liquid {%- endcomment -%}
{%- if section.settings.image -%}
  {%- assign hero_url_1x = section.settings.image | image_url: width: 1500 -%}
  {%- assign hero_url_2x = section.settings.image | image_url: width: 3000 -%}
  <link
    rel="preload"
    as="image"
    href="{{ hero_url_1x }}"
    imagesrcset="{{ hero_url_1x }} 1500w, {{ hero_url_2x }} 3000w"
    imagesizes="100vw"
    fetchpriority="high"
  >
{%- endif -%}

Paste inside <head> in layout/theme.liquid, as early as possible. Adjust the section/setting variable to match your theme's hero image setting.

Shopify docs →

Browse all 182 Shopify fixes →

Shopify on the open web

4.7% of the crawled web runs Shopify

729,553
live Shopify sites
#2
of 6 ecommerce platforms
4.7%
share of all crawled sites

Gaining share — +9.9% over the last 6 monthly crawls

Source: HTTP Archive — a real-Chrome crawl of 15.5M origins (2026-09-01). Share of all crawled sites, not just ecommerce.

How AI reads Shopify sites · AEO

77% of Shopify sites publish structured data

JSON-LD is the schema.org markup AI answer engines read to understand — and cite — a page. But 0.4% of Shopify sites add it only after JavaScript runs, so non-JS AI crawlers never see it. SEOLZ checks whether your structured data is present, valid, and visible to AI.

77%
publish JSON-LD
97%
have Open Graph
0.4%
JSON-LD only via JS

Source: HTTP Archive — structured-data probes on static + rendered HTML across 706,482 Shopify sites.

The typical Shopify site · HTTP Archive

How Shopify sites measure up

Performance — median

3.6 MB
page weight
284
requests
11.1s
load time

Accessibility gaps — share of sites

87%
empty image alt
22%
unlabelled fields
27%
non-semantic controls

Source: HTTP Archive lab performance + accessibility probes across 706,482 Shopify sites. SEOLZ measures your site against these.

Based on 8 Shopify sites swept on SEOLZ

vs all-platform average

Avg SEO85
+4 above average
Avg AEO61
+20 above average
Avg WCAG94
+4 above average
Avg Security72
≈ average
Avg GEO53
+5 above average
Avg Composite75
+7 above average

Shopify sites score above average overall — but AI visibility is the common weak point.

Data as of July 2026 · SEOLZ audits

⚠ 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

You can't rank what AI can't read. SEO, AEO, and GEO tell you where you rank; WCAG, OWASP, and Lifecycle determine whether search and AI can read and trust you at all. SEOLZ scores all six as one system.

🔍
SEO

Your catalog pages may be invisible to Google right now and you'd have no way to know. Indexability gaps, canonical conflicts, and faceted navigation issues silently kill organic traffic — we surface every one and tell you which to fix first.

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

When someone asks ChatGPT to recommend a product in your category, is your store in the answer? Often it isn't. We check the structured data, page structure, and brand signals that help search and AI understand your products and describe them accurately — and we measure whether they actually cite you, or a competitor.

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

AI search is eating traditional organic traffic. We track your actual brand mentions across ChatGPT, Perplexity, and other AI engines — and tell you what's pushing you down in the results.

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

Ecommerce stores are among the most frequent recipients of ADA accessibility demand letters. We run WCAG 2.1 AA checks across your catalog, surface the barriers that most often appear in demand letters, and track each one through to a verified fix.

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

A missing security header exposes your customers, and a compromised or flagged site loses search visibility fast. We check the server configuration, HTTPS setup, and email authentication issues that erode trust — before they become an incident.

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

SSL expires. Plugin versions fall behind. GTM containers go unverified. These aren't hypothetical risks — they're the operational failures that cause outages, ranking drops, and security incidents. We catch them before they happen.

Learn how to fix Site Lifecycle issues →

Start free. Upgrade when ready.

Scout
Free
1 site · 50 pages/audit · monthly audits
6-pillar welcome scan
  • ✓Composite + pillar scores
  • ✓Issue counts
  • ✓Recurring five-pillar re-scan
  • ✓Free forever
Start free
Starter
$49/mo
1 site · 500 pages/audit · weekly audits
All 6 pillars
  • ✓Every finding across all 6 pillars, with step-by-step fixes for your platform
  • ✓Template fixes: fix it once, clear it on every page built from that template
  • ✓Fix tracking: mark it fixed and the next audit confirms it
  • ✓Email alerts for score drops, new security issues, and SSL / domain expiry
  • ✓Report builder with PDF, HTML and Markdown export
  • ✓GTM & tracking audit, plus Search Console topic gaps
Choose Starter

Questions about Shopify audits

Does SEOLZ work with Shopify?+

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.

Can I even edit SEO settings on Shopify?+

More than most people realise. Since 2021 you can edit robots.txt.liquid and theme.liquid directly, control canonical tags and JSON-LD in your theme, and set per-page meta in the admin. We tell you exactly which file or screen each fix lives in.

Why do my Shopify collection pages have duplicate URLs?+

Shopify exposes products under both /products/ and /collections/.../products/ paths. It canonicals to the clean URL automatically, but internal links and apps can still surface the duplicates — which is what we flag and tell you how to clean up.

Do I need a developer to fix Shopify SEO issues?+

Most are admin- or theme-editor-level. Where Liquid edits are needed, we give you the exact snippet and the file it goes in (usually theme.liquid or a section file).

See what's holding back your Shopify site

Free scan, no credit card, results in minutes. We've got you.

Scan My Shopify Site Free