Back to all posts

Technical SEO Checklist for Shopify Stores

SEO Shopify

When we audit Shopify stores, technical SEO problems are almost always present, and they are almost always the same problems. The store looks fine on the surface. Traffic is coming in. Ads are running. But organic performance is flat, and nobody has gone looking under the hood. This checklist covers the issues we find most often, the ones that quietly suppress rankings and waste crawl budget without triggering any obvious alarms.

Canonical Tags on Collection Pages

Shopify automatically generates canonical tags, and that sounds helpful until you realize what it actually does with collection pages. When a product appears in multiple collections, Shopify canonicalizes the product URL to a single version, typically the one under the first collection in the site structure. That part is usually fine. The problem is with paginated collection pages.

If your collection has five pages of products, Shopify renders /collections/womens-shoes, /collections/womens-shoes?page=2, /collections/womens-shoes?page=3, and so on. By default, all of those paginated pages carry a canonical pointing back to the root collection URL. Google sees pages two through five and treats them as duplicates. Products buried in pagination effectively disappear from the index.

The fix requires either implementing proper rel="next" and rel="prev" pagination signals through your theme or consolidating your collection structure so fewer pages require deep pagination in the first place. We have seen stores with 200-plus products per collection wonder why their category pages rank for nothing. This is usually why.

Sitemap Structure and What Shopify Generates by Default

Shopify auto-generates a sitemap at /sitemap.xml. It works. It is not the problem. The problem is what ends up inside it and what you assume about it.

By default, Shopify includes products, collections, pages, and blog posts. It does not automatically exclude low-value pages like internal search results, filtered collection URLs, or policy pages that have no business competing for organic traffic. If you are running a third-party app that generates pages, those often get added to the sitemap without any deliberate decision being made.

Submit your sitemap to Google Search Console and actually look at the coverage report. We regularly find stores where hundreds of submitted URLs are marked as excluded or where indexed pages include things like /pages/cookie-policy eating up crawl budget. GSC's "Crawled but not indexed" report is particularly useful here. If Google is crawling a lot of pages but not indexing them, your sitemap and internal link structure are pointing it at the wrong things.

Robots.txt and the Default Shopify Restrictions

Shopify's default robots.txt blocks crawlers from several paths, including /checkout, /cart, /orders, and /account. Those blocks are correct and you should leave them alone. What we see cause problems is when stores start customizing robots.txt through apps or theme edits and accidentally block paths they need indexed.

The more common issue is that stores do not customize robots.txt at all when they should. If you are running a headless setup or using URL parameters for filtering (think size, color, price range), those parameter URLs can get crawled and indexed at scale. A single collection with five active filters can generate dozens of unique URLs that all serve the same thin content.

Shopify gives you direct access to edit robots.txt.liquid in the theme files. Use it deliberately. Disallow your filter parameter patterns. Disallow internal search result pages. Do not treat the default file as a finished product.

Page Speed and the Real Culprits in Shopify Themes

Page speed audits on Shopify stores are almost always the same conversation. Someone runs a Lighthouse report, scores a 45 on mobile, and the team decides to switch themes. The theme is rarely the main problem.

The real culprits are almost always app bloat and render-blocking scripts. The average Shopify store we audit has between eight and fourteen active apps, and most of them are injecting JavaScript into the storefront. Review apps, loyalty apps, upsell tools, quiz funnels, chat widgets, and popup managers all load scripts, often synchronously, often on every page regardless of whether the feature is actually used on that page.

Open Chrome DevTools and look at the network waterfall on your product page. Sort by load time. You will almost certainly find third-party scripts from apps you forgot were installed two years ago. We have found apps that were uninstalled from the Shopify admin but still injecting code through leftover theme edits.

Core Web Vitals are now a confirmed ranking factor. Your Largest Contentful Paint, Cumulative Layout Shift, and Interaction to Next Paint scores show up in GSC's Core Web Vitals report broken down by URL group. Use that report to identify which page templates are underperforming, then go find what is loading on those templates that does not need to be there.

Duplicate Content from Variant URLs and How to Handle It

This is the issue we see least often understood and most often left unaddressed. Shopify creates URLs for product variants in a specific pattern: /products/black-wool-coat?variant=39485729104. When a customer or a crawler hits that URL, it serves a unique URL with unique query parameters, but typically the same page content with a minor color or size difference.

If you have a product with twenty variants, that is twenty crawlable URLs that all point to functionally the same page. Multiply that across a catalog of 300 products and you have thousands of near-duplicate URLs available to crawlers.

Shopify does apply a canonical tag on variant URLs pointing back to the base product URL. In theory, this handles the duplication. In practice, Google does not always respect canonical tags on parameter URLs, particularly when those pages receive internal links or show up in sitemaps. Audit your GSC coverage report for variant URLs appearing as indexed pages. If they are showing up there, your canonical signals are not being respected and you need to look at where those URLs are being linked from internally.

The structured data angle matters here too. If you are running Product schema on your pages, validate it with Google's Rich Results Test for the base product URL and for a variant URL. We frequently find that variant pages pass broken or incomplete schema because the structured data pulls dynamic values that only populate correctly on the default variant.


Technical SEO is not where most Shopify operators spend their time, and we understand why. There are campaigns to run, creative to produce, and conversion problems that feel more urgent. But these issues compound quietly. A crawl budget problem today becomes an indexation problem in six months, and by then it is hard to trace back to the source.

If you want a clearer picture of where your store stands, we run conversion audits that cover both the technical foundation and the on-site experience. You can learn more about what that looks like on our services page.