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.
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?
Most common in our Shopify audit data
Measured across the 8 Shopify siteswe've audited — this list re-ranks itself as we scan more.
- SEOCatalog coverage100%of sites
- SEOMeta description too short100%of sites
- SEOMissing meta description100%of sites
- AEOMissing schema faqpage100%of sites
- SEOSeo product description missing100%of sites
- SEOSeo product no images100%of sites
- SEOSeo product no spec table100%of sites
- SEOTitle too short100%of sites
Data as of July 2026
Why these happen on Shopify
Specific to how Shopify is built — not generic checklist advice.
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.
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.
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 →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.
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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
{% 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.
Eliminate unexpected layout shifts by reserving space for every image, video, embed, and dynamically injected element so nothing jumps when the page loads.
- 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.
- 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.
- 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.
- 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.
- 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.
- 6Verify: Use PageSpeed Insights on your homepage and top product pages; confirm CLS < 0.1 on both mobile and desktop.
{%- 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.
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.
- 1Go to Online Store → Themes → (your theme) → Edit code.
- 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>`.
- 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).
- 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.
- 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.
- 6Use Shopify's Speed Score (Online Store → Themes) and PageSpeed Insights to verify improvement after each change.
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.
- 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).
- 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).
- 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.
- 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'.
- 5DEFER JS: In theme.liquid, add 'defer' to non-critical <script src='...'> tags that appear in <head>.
- 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.
- 7VERIFY: Re-run PageSpeed Insights and check Google Search Console › Experience › Core Web Vitals.
{%- 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 on the open web
4.7% of the crawled web runs Shopify
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.
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
Accessibility gaps — share of sites
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 SEO | 85 | +4 above average | |
| Avg AEO | 61 | +20 above average | |
| Avg WCAG | 94 | +4 above average | |
| Avg Security | 72 | ≈ average | |
| Avg GEO | 53 | +5 above average | |
| Avg Composite | 75 | +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.
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 →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 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 →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 →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 →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 →| Platform | |||||||
|---|---|---|---|---|---|---|---|
| ▶ Shopify | 8 | 85 | 61 | 94 | 72 | 53 | 75 |
| WordPress.org | 7 | 89 | 50 | 86 | 73 | 53 | 73 |
| BigCommerce | 5 | 79 | 20 | 89 | 66 | 50 | 64 |
Averages across audited sites · data as of October 2026. Updated as new audits complete. Platforms with fewer than 5 audits aren't shown.
Start free. Upgrade when ready.
- ✓Composite + pillar scores
- ✓Issue counts
- ✓Recurring five-pillar re-scan
- ✓Free forever
- ✓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
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