Shopify does a lot of technical SEO work for you. It generates your sitemap and robots.txt, adds canonical tags, includes product structured data in its themes and turns on SSL by default. That is a strong base, and it means most Shopify technical SEO is about the parts the platform leaves to you: how products are linked from collections, what happens to variant and filter URLs, whether old addresses are redirected, and what you hide from search.
This guide is for store owners and developers who manage a Shopify store and want to find and fix duplicate-URL and crawling problems without breaking the theme. It works through the checks in order of risk, from read-only audits to edits that need care. You do not need to write much code, but a few steps involve editing theme files, so work on a duplicate of your theme.
By the end you will know which URLs your store exposes for each product, which one is canonical, which ones are kept out of search by default, how to redirect retired products properly, and how to submit the sitemap. Nothing here promises higher rankings. The aim is a clean, consistent set of URLs that search engines can understand.
Before you begin
You need staff access to the Shopify admin with permission to edit the online store and navigation, and a Google Search Console property for the store's domain. See Set Up Google Search Console: Complete Website Owner Checklist if you have not done that yet. Duplicate your live theme before editing any code (Online Store > Themes, then the theme's menu), so you can revert quickly.
Keep a short list of sample URLs: a product, a collection, a filtered collection, a page, a blog post and a product you plan to retire. If the store is in private mode, search engines cannot read your sitemap.
What Shopify handles for you
Shopify's own SEO overview says that the sitemap.xml and robots.txt files are generated automatically, that auto-generated canonical tags are added to pages to prevent duplicate content in search results, that its themes include product schema markup, and that SSL certificates are on by default. The same page lists "set up 301 redirects when moving or discontinuing products" as something you do yourself.
Step-by-step instructions
Step 1: Verify the automatic parts
Open https://yourstore.example/sitemap.xml. Shopify says the main sitemap links to separate sitemaps for products, collections, blog posts and pages, and that it updates as you add content. Then open /robots.txt. The default rules allow public content and disallow the admin, cart, checkout, account and order paths, plus filtered collection URLs (/collections/*+*) and sorted collection URLs (/collections/*sort_by*), which duplicate existing content.
Finally, view the source of a product page and look for <link rel="canonical". Note the address it contains.
What success looks like: The sitemap and robots.txt load, and each sample URL has a canonical tag that points to the address you want indexed.
Step 2: Deal with products reachable through collections
A product can be reached at its own address, such as /products/blue-shirt, and through a collection path, such as /collections/shirts/products/blue-shirt. Shopify's developer documentation for the within Liquid filter, which builds the collection-based address, warns that the standard product page and the collection-context page have the same content on separate URLs, and advises considering the SEO consequences before using it.
Check how your theme links products in collection grids. Hover over a product card and look at the link. If it uses the collection path, there are two URLs for each product in the links shoppers and crawlers follow. The canonical tag is meant to tell search engines which one to prefer, but it is a signal that Google weighs with others, not a command.
Open a collection-path product URL and read its canonical tag. If it points to the /products/ address, the duplication is handled as intended. To reduce it further, ask your theme developer to link collection grids to /products/ addresses where the theme allows it, and make internal links in menus, blog posts and emails use the same form. Google also advises using one URL form in internal links, sitemaps and canonical tags, and reducing the number of alternative URLs that return the same content.
Do not block the collection-path URLs in robots.txt as a quick fix. A crawler that cannot fetch a page cannot read its canonical tag.
What success looks like: Every duplicate product address has a canonical tag pointing to one preferred address, and your grids and menus link to that preferred form.
Step 3: Check variant URLs
When a shopper picks a size or color, many themes add a query parameter to the product address. Open a product, select a variant and watch the address bar. Google's ecommerce guidance says that if you use optional query parameters for variants, the URL without the parameter should be canonical, and that each variant page's canonical should point to the main product URL if variants have separate URLs.
Confirm that the variant address shows the same canonical as the main product page. If it does not, the theme may be outputting a canonical that includes the parameter. Fix this in the theme's canonical tag logic, or with the theme's support.
What success looks like: Variant URLs share the product's canonical address, and internal links use the clean product URL.
Step 4: Review filters, sorting and pagination
Shopify's default robots.txt already disallows sorted and filtered collection paths of the shapes shown in Step 1. That keeps a lot of duplicate content from being crawled. It does not cover every kind of filter or app-created URL, so check the ones your store uses by opening a filtered collection and reading its address and canonical tag.
For paginated collections, Google's guidance is: give each page its own URL, link between pages with normal <a href> links, do not point every page's canonical at page one, and expect that Google no longer uses rel="next" and rel="prev". If a theme loads more products with an infinite scroll or a "load more" button, make sure the paginated links also exist as crawlable links.
For an empty collection, Google's advice is to use a noindex robots meta tag or return a 404 status.
What success looks like: Filter and sort URLs are not in your sitemap and are either disallowed by default rules or canonicalized, and paginated pages each have a self-canonical.
Step 5: Redirect retired and renamed URLs
Shopify's redirect tool is under Content > Menus > View URL Redirects > Create URL redirect. Enter the old address in "Redirect from" and the new one in "Redirect to". Shopify's help page lists limits you should know before planning a migration:
- You can redirect only from URLs that are currently broken (showing Page not found). If the old URL still loads a page, the redirect will not work.
- You cannot redirect some fixed paths, including
/products,/collectionsand/collections/all, or URLs that begin with/cart,/ordersand similar prefixes. - Collection tag filter URLs cannot be redirected.
- A bulk CSV import is available.
- Browsers and search engines cache 301 redirects, so a removed redirect can keep working for some visitors for a while.
Redirect a retired product to the closest replacement, or to its collection if there is no equivalent, rather than to the home page. Google treats permanent redirects as a signal that the target should be canonical, and recommends server-side redirects. Then check that each redirect lands on a 200 page in one step. Redirect Chains, Loops, and Incorrect HTTP Status Codes explains how to detect chains.
What success looks like: Every old product URL on your list reaches a live page through a single 301.
Step 6: Hide pages from search on purpose
Shopify documents three ways to keep an item out of search. A noindex robots meta tag added in theme.liquid, wrapped in a handle condition, hides pages and products from internet search while keeping them active. The seo.hidden metafield (an integer set to 1 on products, pages and blog posts) hides an item from search engines and sitemaps. A product set to Unlisted is hidden from search, sitemaps, collections and recommendations but reachable by direct URL. Shopify's page also notes that an seo.hidden item still appears in storefront collections and recommendations.
Pick the method that matches your intent. Use noindex or seo.hidden for pages that shoppers can reach but search should not list, like a thank-you page or a landing page for a private campaign. Remember that search engines can only see a noindex if they are allowed to fetch the page. See Noindex vs robots.txt: Choose the Right Way to Keep a Page Out of Search.
What success looks like: Hidden items return the intended meta tag or are absent from the sitemap, as the chosen method states.
Step 7: Edit robots.txt only if you must
Shopify supports a robots.txt.liquid template for customizing the file, and its documentation recommends starting from the default rules provided by the robots Liquid object, because plain-text replacements can go out of date. Shopify describes it as an unsupported customization and warns that incorrect use can result in loss of all traffic. Save a copy of your current /robots.txt first, compare the new output against it, and test afterwards. If you added workarounds such as a third-party proxy, remove them before editing.
For most stores, the default file is correct. Add a rule only when you have a specific, verified reason.
What success looks like: /robots.txt still contains the default rules plus only the additions you intended.
Step 8: Titles, descriptions, images and the sitemap
Shopify's help says page titles can be up to 70 characters but suggests 60 or fewer so search engines do not shorten them, and that meta descriptions should be around 160 characters, unique per page. Edit pages in Online Store > Pages (Edit website SEO), the home page under Online Store > Preferences, and add alt text from the product's image menu. For the wording, see Write SEO Title Tags and Meta Descriptions That Match Search Intent.
Submit the sitemap in Search Console: add sitemap.xml under Sitemaps. Shopify notes that stores with several international domains have a sitemap on each domain, so submit each one. Then check the Page indexing report for patterns such as duplicate pages and excluded URLs.
What success looks like: Search Console reads the sitemap successfully, and indexing statuses match what you expect from Steps 2 to 6.
Final verification checklist
/sitemap.xmlloads, and Search Console has read it without errors./robots.txtkeeps Shopify's default disallow rules, or any edits are tested and documented.- Product pages reached through collection paths have a canonical pointing to the preferred address.
- Variant URLs share the main product's canonical.
- Collection grids and menus link to one URL form for each product.
- Filtered and sorted collection URLs are not in the sitemap.
- Paginated collections use unique URLs with self-referencing canonicals.
- Retired product URLs redirect once to a relevant live page.
- Pages you want hidden use the method that matches your intent.
- Titles and meta descriptions are unique, and product images have alt text.
Common mistakes to avoid
- Blocking duplicate URLs in robots.txt instead of canonicalizing them. The crawler then cannot read the canonical tag.
- Redirecting everything to the home page. Send each retired URL to the closest relevant page.
- Expecting redirects to work on live URLs. Shopify redirects only broken URLs.
- Pointing every paginated page's canonical to page one. Each page needs its own canonical.
- Customizing robots.txt.liquid without a copy of the original. Save the current output first and compare.
- Linking to the collection path in email and menus when the canonical is the product path. Use one form everywhere.
Frequently asked questions
Does Shopify create duplicate content?
It can create several URLs for the same product, such as the standard address and a collection-based one. Shopify adds canonical tags to reduce the effect in search, and you can reduce it further by linking to the preferred form.
Can I edit the Shopify sitemap?
Shopify generates it automatically, so you shape it indirectly: what you publish appears, and hiding methods such as seo.hidden or Unlisted products keep items out of it.
Should I noindex filtered collection pages?
Shopify's default robots.txt already disallows common filter and sort URL shapes. Check your own filters in practice. If you need to go beyond the default, test any change and remember a noindex is only seen when the page can be fetched.
How do I redirect a deleted product in Shopify?
Create a URL redirect under Content > Menus > View URL Redirects, from the old address to the closest replacement. The old address must be broken (showing Page not found) for the redirect to work.
Related guides
- Fix Duplicate URLs and Incorrect Canonical Tags
- Redirect Chains, Loops, and Incorrect HTTP Status Codes
- Noindex vs Robots.txt: Which Keeps a Page Out of Search?
- Pagination SEO Best Practices: Paged Lists Google Can Crawl
- How to Create a Valid XML Sitemap for Your Website
Official references
- https://help.shopify.com/en/manual/promoting-marketing/seo/seo-overview
- https://help.shopify.com/en/manual/promoting-marketing/seo/editing-robots-txt
- https://help.shopify.com/en/manual/online-store/menus-and-links/url-redirect
- https://shopify.dev/docs/api/liquid/filters/within
- https://developers.google.com/search/docs/specialty/ecommerce/designing-a-url-structure-for-ecommerce-sites
Next step: See how Crawvix checks a website and capture a baseline once scanning opens. This guide provides technical information, not a guarantee of rankings, traffic or index inclusion.