Just 48% of Shopify stores pass Google’s Core Web Vitals thresholds on mobile. Not 48% of poorly managed stores: 48% of all Shopify stores, including those run by recognisable brands with technical teams in place. That figure comes from Shero Commerce’s benchmark analysis of 1,000 Shopify stores published in 2025, and it reveals something the platform’s marketing does not: Shopify has real structural SEO advantages, but also concrete technical limitations that a large proportion of stores never address.
Shopify holds 26.2% of the global ecommerce software market according to W3Techs in 2026. It is the platform of choice for millions of businesses because it radically simplifies the technical management of running a store: hosting, security, SSL certificates, payments and updates are all handled by the platform. For SEO, this means that certain technical problems common in WordPress or self-hosted solutions do not exist in Shopify at all. It also means that certain architectural decisions are fixed by the platform and outside your control. This guide explains which ones matter, why they matter, and what you can do within Shopify’s constraints.
Why Shopify has structural SEO advantages that WordPress does not
The standard conversation about Shopify and SEO focuses on its limitations. Its structural advantages get less attention, but they are real and deserve an honest assessment.
HTTPS by default from day one. Shopify includes SSL certificates on all plans. It is not an optional configuration and requires no technical intervention. A 2025 Sucuri analysis of the WordPress ecosystem found that 23% of scanned WordPress sites had issues related to mixed HTTP/HTTPS configurations or misconfigured SSL certificates. In Shopify, this entire category of problem does not exist.
Fastly CDN and server-side performance. Shopify serves all stores through Fastly, one of the highest-performing content delivery networks in the industry. The Time to First Byte (TTFB) for a standard Shopify store, measured from multiple locations across Europe and North America, consistently sits below 200 ms. In WordPress, TTFB depends on the hosting provider chosen and can range from 80 ms on a well-configured VPS to over 2.5 seconds on budget shared hosting. Shopify eliminates that variability entirely.
Automatically generated and updated XML sitemap. Shopify generates and maintains the store’s XML sitemap at /sitemap.xml automatically, including products, collections, pages and blog posts. Unlike WordPress, where the sitemap can include low-value taxonomy archives or date-based pages if not configured carefully, Shopify’s default sitemap contains only commercially relevant content by default.
Automatic canonical tags on product pages. Shopify adds a canonical tag to every product page pointing to /products/slug as the canonical URL. This is the platform’s technical answer to the duplicate URL problem. The issue, as we will see, is that Google does not always honour canonical tags when other page signals contradict that directive.
That said, WordPress has advantages Shopify cannot match: full control over URL structure, greater flexibility for editorial content architecture, and unrestricted code access for advanced schema implementations. For stores that need a complex content strategy or a highly specific category architecture, those advantages can be decisive. The SEO for WordPress guide covers that ecosystem in detail.
Shopify URL architecture: what you cannot change and how to handle it
Shopify has a fixed URL architecture. Understanding it before launching the store — not six months after publishing hundreds of products — is the right approach.
The prefixes are immovable. All products live under /products/, all collections under /collections/, all static pages under /pages/ and all blog posts under /blogs/[blog-name]/[post-slug]/. There is no option in the admin panel to change these prefixes. If you need URLs like /clothing/t-shirts/ without the /collections/ segment, Shopify is not the right platform without third-party workarounds that carry their own risks.
What you can control is the handle. The handle is the final slug of each URL: the part after the fixed prefix. You can — and should — edit it to be descriptive and contain the product or collection’s primary keyword. A handle like /products/model-x-2024-navy-blue-size-m is worse than /products/organic-cotton-t-shirt-navy for both users and crawlers.
The practical rule for handles: keep product handles to 3-5 words, use only lowercase letters and hyphens, include the primary keyword but avoid stuffing. For collections, the handle should reflect the navigation category exactly: /collections/mens-clothing, /collections/running-shoes.
What many store owners do not know: when you change the handle of a product or collection in Shopify, the platform automatically creates a 301 redirect from the old URL to the new one. This protects your ranking history. However, if you are migrating from another platform to Shopify and need to preserve specific product URLs, Shopify’s fixed prefixes may make an exact URL match impossible. In that case, a 301 redirect plan is mandatory from day one. The ecommerce platform migration guide covers this process in detail.
Shopify SEO apps: which one to install for your use case
The Shopify App Store has over 200 apps tagged as “SEO”. Most overlap in functionality and some introduce more problems than they solve, particularly on performance. Here is the practical classification:
For schema markup (high priority):
JSON-LD for SEO by Ilana Davis is the industry reference for implementing structured data in Shopify without touching theme code. It automatically generates Product schema (with price, availability, currency and reviews if you have them), Organisation, BreadcrumbList and WebSite. The app costs $12.99 per month, a price justified if the resulting schema is accurate: product rich results with price and rating can increase CTR by 20-40% according to Google Search Central’s own data. Validate the output in Google’s Rich Results Test after installation.
Smart SEO offers broader coverage: JSON-LD schema, automated meta tag generation, bulk alt text for images missing alternative text, and multilingual support. The paid plan starts at $9.99 per month. If you need to manage meta tags at scale alongside schema, Smart SEO solves both in one app. (Yes, missing alt text on product images is genuinely one of the most common issues in audits of Shopify stores with more than 500 products.)
For continuous technical auditing:
Plug In SEO detects active technical issues: missing or duplicate meta tags, absent alt text, broken links and heading structure problems. The free plan covers basic functionality; the SEO Plus plan at $20 per month adds structured data and speed analysis. It works well as an early-warning system, particularly in stores where products are added continuously by teams without SEO training.
For speed and Core Web Vitals:
The landscape here is more complex. Apps like TinyIMG, Crush.pics or Imagify focus on image optimisation (WebP conversion, lossless compression). They are useful if your theme does not handle this automatically, but they each add a script to the storefront. Before installing any performance app, measure your store with PageSpeed Insights. If your LCP is already below 2.5 seconds, you probably do not need an additional image app — the risk of degrading performance by adding another script outweighs the potential benefit.
The general rule: every active app injecting JavaScript into the storefront has a performance cost. Shero Commerce documents that stores with 3 or fewer app scripts maintain a median mobile LCP of 1.9 s; stores with 5-8 scripts rise to 2.4 s; stores exceeding 8 scripts reach a median of 3.1 s. Install only what solves a specific problem and audit performance after each installation.
Duplicate content in Shopify: the /products vs /collections problem
This is Shopify’s most widely known technical SEO problem — and simultaneously the most misunderstood one.
The mechanism: Shopify generates two accessible URLs for the same product when that product belongs to a collection. If you have a product with the handle blue-t-shirt in the collection mens-clothing, that product is accessible at both /products/blue-t-shirt and /collections/mens-clothing/products/blue-t-shirt. Both URLs serve identical content.
What Shopify does: it adds a canonical tag on the collection URL pointing to /products/blue-t-shirt as the canonical URL. Technically correct.
The real problem: the majority of Shopify themes — including many premium themes — include the following Liquid code in their template files: {{ product.url | within: current_collection }}. This filter dynamically generates URLs with the /collections/[name]/ segment for all product links within collection pages. The result is that most of the store’s internal link equity flows to collection URLs, not to the canonical URL. Google receives a canonical tag saying “the primary URL is /products/slug” but thousands of internal links pointing to /collections/name/products/slug. According to research published by Amsive in 2025, Google ignores canonical tags in 30-40% of cases when contradictory signals of this magnitude exist.
The fix: remove the | within: current_collection filter from the theme templates. In most themes, this means editing the collection template file (typically collection.liquid or product-grid-item.liquid) and changing:
<a href="{{ product.url | within: current_collection }}">
to:
<a href="{{ product.url }}">
This single change makes all internal store links point to the canonical product URL, reinforcing the canonical tag signal rather than contradicting it. The impact on rankings can be substantial: Infinity Nation documented cases where this change reduced the number of indexed pages by 40-60% and concentrated link authority on the primary product URLs.
A caveat: on some themes with advanced filtering or collection-based breadcrumb functionality, removing this filter can affect the user navigation experience. Test the change on a duplicated theme before applying it in production, and verify that breadcrumbs and “back to collection” functionality continue to work correctly.
Core Web Vitals on Shopify: themes and apps that destroy performance
The median Shopify store LCP on mobile is 2.26 seconds, according to Shero Commerce’s 1,000-store analysis in 2025. That median sits at the edge of Google’s “good” threshold of 2.5 s. The problem is that median includes well-optimised stores statistically compensating for those failing with LCP scores of 4-6 seconds.
The factors with the greatest impact on Shopify LCP:
Heavy themes. The theme is the single most important variable in baseline performance before any apps are installed. Dawn, Shopify’s free theme, is built specifically for Core Web Vitals and consistently produces LCP below 2.0 s on clean installations. Multipurpose themes from ThemeForest and similar marketplaces can load 18-25 JavaScript and CSS files, generate a DOM of 2,000-3,500 nodes, and feature hero sections built with background videos or JavaScript carousels that block the rendering of the LCP image.
Think of a heavy Shopify theme as an airport designed for 40 boarding gates serving a terminal that only needs 8: the infrastructure exists, but the overhead of keeping it running penalises every passenger even if they only use a fraction of the space.
Apps with global JavaScript injection. Certain apps — particularly live chat, notification bars, pop-ups and reviews — inject scripts that load on every page regardless of whether they are needed there. A live chat app loading 180 KB of JavaScript on every product page before the user has interacted with it can cost between 0.3 and 0.8 seconds of LCP on its own.
Hero image not prioritised. The LCP element on most Shopify home pages is the hero image in the primary section. If that image is set as a CSS background (background-image:) rather than an explicit <img> tag, the browser cannot preload it with high priority. If it is inside a JavaScript carousel, the problem compounds because the carousel script must execute before the image is visible. The optimal implementation for the LCP element is an <img> tag with loading="eager" and fetchpriority="high" in the theme markup.
The secondary metrics (INP and CLS):
INP (Interaction to Next Paint) on Shopify degrades primarily from third-party JavaScript running on the main thread during user interaction. On stores with analytics, remarketing and chat apps all active simultaneously, main thread work can exceed 8 seconds on mid-range devices, producing INP values above 500 ms — Google’s “poor” threshold.
CLS (Cumulative Layout Shift) on Shopify has one common cause: web fonts loaded without font-display: swap or font-display: optional, which produce a flash of invisible text (FOIT) followed by a layout reflow when the font loads. Most well-built Shopify themes handle this correctly, but fonts loaded through third-party branding or typography apps frequently do not.
(Mental note: check LCP and INP in PageSpeed Insights every time you install a new app. The impact may not immediately appear in Google’s field data, but it is detectable in lab data before it affects rankings.)
Schema markup on Shopify: Product, Organisation and BreadcrumbList
Shopify generates some structured data natively in modern themes, but coverage varies widely between themes, and native implementation rarely includes all the fields Google needs to generate product rich results.
Product schema:
Product schema is the most important type for Shopify stores from a click impact perspective. A product with correct schema can appear in Google results with price, availability, review rating and image in rich snippet format. The fields required by Google Search Central for product rich results are: name, image, description, and offers (with price, priceCurrency, availability and url). The recommended fields that increase eligibility for additional rich results are aggregateRating and review.
Many Shopify themes generate basic Product schema, but with common errors: price formatted as a string rather than a number, availability using values that do not follow schema.org vocabulary (inStock instead of https://schema.org/InStock), or image fields pointing to thumbnails rather than full-resolution images. Validate your store’s schema in Google’s Rich Results Test regularly, particularly after theme changes or Shopify platform updates.
Organisation schema:
Organisation schema establishes brand identity for Google: legal name, site URL, logo, social media accounts and contact details. In Shopify, this schema should appear on the home page and about pages. Schema apps like JSON-LD for SEO generate it automatically from store configuration settings; if implementing it manually, place it in the theme.liquid file so it appears across all relevant pages.
BreadcrumbList:
BreadcrumbList schema tells Google the position of a page within the site hierarchy. In Shopify it is particularly relevant for product pages within collections: a correct breadcrumb communicates that /products/blue-t-shirt belongs to the /collections/mens-clothing category within the store, reinforcing the semantic structure. Dawn and well-built Shopify 2.0 themes generate BreadcrumbList automatically; older themes rarely do.
A note on Local Business schema for stores with a physical presence: if your Shopify store also has a physical location in London, Manchester, or another UK or US city, adding LocalBusiness schema with address, phone, hours and geographic coordinates is a high-impact action that 70% of stores with physical locations overlook. The LocalBusiness schema guide covers the implementation step by step.
Basic SEO audit for Shopify stores: 8 critical points
This checklist is ordered by potential impact, not by ease of implementation. Work through the first items before moving on.
1. Check /products vs /collections duplicates. Open your browser developer tools on a collection page. Examine the href attributes of product links in the grid. If they contain /collections/[name]/products/ rather than /products/, the | within: collection filter is active and needs removing from the theme code.
2. Unique meta titles and descriptions. In the Shopify admin panel, review the SEO sections of products and collections (accessible from the product or collection editor, at the bottom of the page). The defaults are the product or collection name, unoptimised. An optimised product meta title includes: primary keyword + differentiating attribute + brand name, within 50-60 characters. A meta description describes the primary benefit of the product and includes an implicit call to action, within 150-160 characters.
3. Speed with PageSpeed Insights. Measure the URL of your home page and your most important product page. If mobile LCP exceeds 2.5 seconds, identify the LCP element (PageSpeed Insights displays it) and check whether it is an image, a video or a text element. For images: confirm it is not set as a CSS background, and that it does not have loading="lazy".
4. H1 heading structure. Every product and collection page should have exactly one H1, which is the product or collection name. Check with the Detailed browser extension or the browser’s accessibility heading tool that there are no multiple H1s or skipped heading levels (for example, H1 followed by H3 without an H2 in between).
5. Alt text on product images. Shopify lets you add alternative text to each image from the admin panel (Product editor > images section > edit icon on each image). Alt text should describe the product accurately, including the primary keyword if it fits naturally. For stores with hundreds of products, Smart SEO or Plug In SEO can audit and complete alt text in bulk.
6. Schema markup validated. Paste the URL of your home page and a product page into Google’s Rich Results Test (https://search.google.com/test/rich-results). Confirm that the expected schema types appear and that there are no critical errors. Warnings are acceptable; errors prevent eligibility for rich results.
7. Sitemap in Google Search Console. In Google Search Console, go to Indexing > Sitemaps and submit https://your-store.myshopify.com/sitemap.xml. Check the ratio between submitted and indexed URLs. If the indexing ratio is below 60%, pages in the sitemap are being treated as low quality or are difficult for Google to crawl.
8. Robots.txt (Shopify 2.0). Shopify added robots.txt editing capability in Shopify 2.0. The default file is appropriate for most stores, but if you have policy pages, terms pages or test pages that should not appear in Google, you can add specific Disallow rules. Access it from the admin panel under Online Store > Pages > robots.txt.
To extend this audit with deeper analysis of crawl budget, collection pagination and faceted navigation, see the technical SEO for online stores guide.
Three actions you can take today before closing this page:
1. Open PageSpeed Insights, measure your most important product page on mobile, and note the current LCP. If it is above 2.5 s, count how many apps have active JavaScript in the storefront.
2. Go to your theme code editor in Shopify and search for the string within: current_collection. If you find it, the duplicate content problem is active. Assess whether you can make the fix directly or need a Shopify developer.
3. Validate your main product page schema at https://search.google.com/test/rich-results. If there are errors in the Product schema — especially in price or availability fields — correcting them is the single highest-impact action for immediate improvement in organic CTR.