Shopify handles a lot of technical SEO for you, and that is exactly why so many stores stall: the platform covers the basics, the theme and apps quietly undo some of them, and nobody checks the gap. This is the Shopify technical SEO checklist we work through on store audits, with each item marked by who owns it: Shopify itself (URL structure, sitemap, default robots.txt, redirects) or your theme and apps (canonicals, internal links, structured data, images, speed).
Shopify duplicate content: the /collections/.../products/ problem
Every Shopify product is reachable at more than one URL. The primary one is /products/blue-hoodie, but Shopify also serves it at /collections/hoodies/products/blue-hoodie for every collection it belongs to, and variant URLs like ?variant=123 add more.
Shopify's answer is the canonical tag. Themes output it using the canonical_url Liquid object, which points collection-scoped product URLs back to /products/blue-hoodie. Most modern themes include it.
The catch: a canonical tag is a hint, not a directive. If your theme links to the collection-scoped URL everywhere, Google gets mixed signals: "this is the canonical page" in the head, and "this other URL matters" in every internal link.
The theme link fix
The usual culprit is the within: collection filter in product card templates: {{ product.url | within: collection }}. Replacing it with plain {{ product.url }} makes every card link to the canonical URL directly. Many current themes already do this; older or heavily customized ones often don't. It's a small change that makes it much easier for Google to consolidate your product pages.
To check, view source on a collection page and inspect the product card links. In Search Console, "Alternate page with proper canonical tag" is normal on its own, but a very large count suggests your internal links are generating duplicates Google keeps having to sort out.
Faceted navigation, filter URLs and tag pages
Collection filtering creates URLs fast. Storefront filters add parameters like ?filter.v.option.color=Blue, sorting adds ?sort_by=price-ascending, and legacy tag filtering creates paths like /collections/hoodies/blue+large. A few filters across a few dozen collections can produce thousands of thin, near-identical pages.
Shopify's default robots.txt already disallows several of these patterns, including sort parameters and multi-tag combinations. Check yourstore.com/robots.txt to see what your store blocks today; the defaults have changed over time.
A practical policy for most stores:
- Index your core collections and a small number of deliberate, high-demand subsets that deserve their own landing pages (for example, "women's waterproof hiking boots").
- Don't index arbitrary filter and sort combinations. Let them work for shoppers, but keep them out of search.
- Build real collections for the filtered views that have actual search demand, instead of hoping a tag URL ranks. A proper collection gets its own handle, title, description and place in your navigation.
Pagination on collection pages
Shopify paginates collections with ?page=2, ?page=3 and so on. Google no longer uses rel="next" and rel="prev" as an indexing signal, so what matters is simpler: each paginated page should be crawlable through plain links, and it should not canonicalize back to page one. If page two points its canonical at page one, the products that only appear on page two lose a discovery path.
Watch for infinite scroll or JavaScript-only "load more" buttons. Without underlying paginated links, products deep in a large collection become hard for crawlers to reach. A load-more button built on top of real ?page= links gives you both.
Customizing robots.txt.liquid (carefully)
Shopify lets you override the default robots.txt by adding a robots.txt.liquid template to your theme. The right way to do it is to keep Shopify's defaults by looping over the robots.default_groups object and append your own rules, rather than replacing the file wholesale. Shopify treats this as an unsupported customization, so keep it minimal and document why each rule exists.
Two common mistakes:
- Using robots.txt to remove pages from Google. Disallowing a URL stops crawling, not indexing. A blocked URL that is linked from elsewhere can still appear in results. If you want something out of the index, it needs a
noindexand it must stay crawlable long enough for Google to see it. - Blocking resources the page needs to render. Disallowing theme asset paths or app scripts can break how Google renders your pages.
Sitemap.xml: what Shopify generates and what you control
Shopify generates /sitemap.xml automatically: an index pointing to child sitemaps for products, collections, pages and blog posts, updated as you publish. You can't edit it directly, and you don't need to.
You do control what gets into it. Only resources published to the Online Store channel appear, and Shopify's documented way to keep a specific page or product out of search and the sitemap is the seo.hidden metafield (check Shopify's current docs for the setup). Submit /sitemap.xml in Search Console once, then compare submitted against indexed over time.
Shopify structured data: Product, Offer, reviews and breadcrumbs
Structured data won't rescue a weak page, but it shapes how your listings look and helps Google understand price, availability and ratings. On Shopify, nearly all of it comes from your theme and apps.
- Product and Offer. Many modern themes output Product JSON-LD using Shopify's
structured_dataLiquid filter or a hand-written snippet. Confirm it includes price,priceCurrency, availability, SKU or GTIN where you have them, and images. If you have meaningful variants, Google supports variant markup throughProductGroup; it's worth reviewing whether your theme handles variants well. - AggregateRating and Review. These usually come from your reviews app. Only mark up reviews that are actually visible on the page, and make sure the theme and the app aren't each outputting their own separate Product entity. Two conflicting Product blocks on one page is a common structured data problem on Shopify stores.
- BreadcrumbList. Frequently missing entirely. If your theme shows visual breadcrumbs, add matching markup; if it doesn't, consider adding both, since breadcrumbs also strengthen internal linking.
- Organization. Usually belongs on the homepage only: name, logo, URL and your official social profiles.
Validate with Google's Rich Results Test, and recheck after any theme update or app install, since either can change markup without anyone noticing.
Shopify collection page SEO: treat collections as category landing pages
Collection pages should be your ranking workhorses. They match broad, high-intent searches like "men's trail running shoes" far better than individual products, yet on many stores they're just a title and a grid.
- Write unique copy. A short, useful intro above the grid and, if you have more to say, a longer section below it. Explain what's in the collection, who it's for and how to choose. Don't paste the same paragraph across collections.
- Set the title tag and meta description in each collection's search engine listing fields instead of leaving the defaults.
- Link deliberately. Main navigation, breadcrumbs, links between related collections, and links from blog posts into the collections they discuss. Internal links are how you tell Google which pages matter most.
- Keep handles clean and stable. Changing a collection handle changes its URL, which means a redirect and some lost momentum.
Image alt text and file size
Add alt text to product media in the admin, describing what the image shows in plain language. It helps accessibility first, and image search second. Rename files before uploading, since Shopify keeps the original filename in the CDN URL.
On file size, Shopify's CDN can resize images and serve modern formats like WebP, but only if the theme requests sensible sizes. The real problems are usually in theme code: a 3000-pixel image requested for a 400-pixel slot, missing srcset and sizes, or lazy-loading on the main hero or product image, which delays Largest Contentful Paint.
301 redirects during migrations and URL changes
Shopify's URL prefixes are fixed: /products/, /collections/, /pages/ and /blogs/[blog-name]/. Migrate from another platform and almost every URL changes, so every old URL with traffic or backlinks needs a 301.
Shopify handles these through URL Redirects in the admin, with CSV import for bulk lists. A few things to know:
- Shopify redirects only fire when the old path doesn't resolve to an existing page. You can't redirect a URL that still serves live content.
- When you change a product or collection handle, Shopify offers to create the redirect automatically. Leave that box checked.
- Map old URLs to the closest equivalent page, not everything to the homepage. Mass homepage redirects are generally treated like soft 404s.
- Avoid chains. If you've migrated more than once, update old redirects to point straight at the final URL.
This is where a lot of replatforming value is won or lost. In our TechStart Shopify Plus rebuild, restructured product and collection URLs, cleaned-up Product/Offer/Review schema, a clean sitemap and a full redirect map were part of the work behind a +212% increase in organic search impressions within 90 days. If you're weighing a platform move, our breakdown of Shopify vs. Shopify Plus covers the business side of that decision.
International SEO with Shopify Markets: en-US and en-CA
Selling to both the US and Canada usually means nearly identical English content with different currencies, prices and shipping. Without clear signals, Google may show US pages to Canadian searchers or treat the two versions as duplicates.
As of 2026, when you set up Shopify Markets with separate domains or subfolders (for example, /en-ca/), Shopify outputs hreflang tags automatically. Confirm in the page source that en-US and en-CA point at each other, plus an x-default.
Avoid forced IP-based redirects between markets. Googlebot mostly crawls from US IP addresses, and an automatic redirect can stop it from ever seeing your Canadian pages. A country-selector prompt is the safer pattern.
Core Web Vitals as a tiebreaker
Core Web Vitals (Largest Contentful Paint, Interaction to Next Paint and Cumulative Layout Shift) are a ranking signal, but a modest one. Relevance and content come first; page experience mostly separates pages that are otherwise close. On Shopify, poor scores usually come from app scripts injected on every page, oversized images and heavy theme JavaScript, not the platform.
Speed pays off beyond rankings, especially on mobile. Our post on mobile checkout abandonment fixes covers that side of it.
Using Google Search Console to find what's actually broken
Search Console is where theory meets reality. Two reports matter most for Shopify stores:
- Pages (indexing) report. Watch "Duplicate, Google chose different canonical than user" (conflicting canonical signals), "Crawled – currently not indexed" (often thin or near-duplicate pages) and "Discovered – currently not indexed" (known but not yet crawled). URL Inspection shows which canonical Google actually picked.
- Core Web Vitals report. It uses real-user data and groups similar URLs, so a slow product template shows up as a whole group. Fix the template, then click "Validate fix."
The Shopify SEO checklist
Work through it in order: early items affect your whole catalog, later ones are refinements.
- Confirm every template outputs a canonical tag using
canonical_url. - Replace
within: collectionproduct links with plainproduct.urllinks. - Review
/robots.txtand decide which filter, sort and tag URLs should stay out of search. - Turn high-demand filtered views into real collections with their own copy.
- Make sure paginated collection pages are linkable and self-canonical.
- Submit
/sitemap.xmlin Search Console and hide low-value pages withseo.hidden. - Validate Product, Offer, review, BreadcrumbList and Organization markup, and remove duplicate Product entities.
- Write unique collection copy, titles and meta descriptions, and link related collections.
- Add alt text, rename image files and fix oversized or lazy-loaded hero images.
- Audit URL Redirects for chains, homepage dumps and old URLs that now 404.
- Verify hreflang for en-US, en-CA and x-default if you use Shopify Markets.
- Review the Pages and Core Web Vitals reports monthly, and after every theme or app change.
Want a second set of eyes on your store?
Most of these issues stay invisible until someone looks, and a theme update or app install can reintroduce them. If you'd like us to run this checklist against your store and tell you which fixes are worth the engineering time, get in touch about a technical SEO audit. You can also see how we approach SEO for Shopify and custom builds.
