Shopify

    Technical SEO for Shopify: Working Around the Platform's Limits

    Shopify technical SEO in practice — forced URL structures, duplicate collection paths, canonical behaviour, robots.txt.liquid, pagination, redirects and theme-level performance work.

    Published August 8, 202614 min readBy Mazam Khalid
    On this page

    Shopify handles a surprising amount of technical SEO for you and then blocks you from fixing the things it gets wrong. Effective work on the platform means knowing which constraints are genuinely fixed, which are theme-level and editable, and which "problems" are not worth spending time on.

    What you cannot change (and should stop worrying about)

    • /collections/ and /products/ path prefixes.
    • /pages/ for static content and /blogs/{blog}/{article} for posts.
    • The core checkout flow on non-Plus plans.
    • Server-side response headers and caching behaviour.

    None of these hold a store back. Google indexes millions of Shopify URLs in this format. Effort spent trying to strip prefixes is effort not spent on duplication and performance, which do matter.

    Duplicate URL patterns to control

    PatternRiskHandling
    /collections/x/products/yDuplicate of the product URLCanonical to /products/y — verify the theme outputs it
    /collections/allCompetes with real collectionsKeep it out of internal linking and the sitemap where a curated equivalent exists
    Tag filters /collections/x/tag1+tag2Combinatorial URL explosionIndex only tag pages with real search demand; block or noindex the rest
    ?sort_by=, ?filter.*Crawl wasteCanonical to the clean collection URL; avoid crawlable links to sorted states
    Paginated ?page=2Thin duplicates if mishandledSelf-canonical each page; keep products linked from somewhere crawlable
    Variant URLs ?variant=Duplicate product contentCanonical to the parent product
    Verify canonicals in the theme, not in a blog post. Themes and apps override canonical_url more often than store owners realise. Crawl the store and group by canonical value to see what is actually output.

    robots.txt.liquid

    Shopify's default rules are sensible: cart, checkout, account, internal search and most parameter paths are already disallowed. Add rules to remove crawl waste — for example blocking multi-tag filter combinations such as Disallow: /collections/*+* — rather than to hide problems. A blocked URL keeps whatever indexing state it already had, because Google can no longer read the directive on the page.

    Sitemaps

    Shopify generates /sitemap.xml automatically and it cannot be edited directly. Two consequences worth knowing:

    • Pages you set to noindex through a theme edit may still appear in the generated sitemap on some setups — check and resolve the contradiction where it happens.
    • The sitemap includes all published products; unpublishing rather than noindexing is the reliable way to remove something from it.

    Indexing controls

    Shopify has no indexing UI, so it is done in theme.liquid with a Liquid condition on the template name and current_tags, outputting <meta name="robots" content="noindex, follow"> where appropriate. Typical noindex candidates: internal search results, tag-filtered collections without search demand, thank-you and policy duplicates, and any collection created purely for merchandising with no unique content.

    Redirects

    Shopify's URL redirect tool handles one-to-one 301s and imports in bulk via CSV — this is the right place for them. Two habits prevent trouble:

    • When you change a product or collection handle, Shopify offers to create the redirect automatically. Accept it; recreating a missing redirect later requires knowing the old handle.
    • After a replatform onto Shopify, build the redirect map from a full URL inventory of the old site, including images and blog paths — the same process as any migration.

    Collection and product page content

    Technical hygiene gets a store crawled; content gets it ranked. The recurring gaps on Shopify stores:

    • Collection pages with a heading and a product grid, and nothing that explains the category or answers buying questions.
    • Manufacturer-supplied product descriptions duplicated across every retailer selling the same item.
    • No internal linking between related collections.
    • Blog content disconnected from the products it should support.

    Put unique intro copy above the grid on commercially important collections, supporting content below it, and link between related collections with descriptive anchor text.

    Performance at theme level

    Shopify controls the server, so your levers are in the theme and the app stack:

    • Audit apps. Every installed app can inject scripts into every page, including ones where it does nothing. Removing an unused app is usually the single largest win.
    • Use Shopify's image CDN correctly with sized URLs and srcset rather than full-resolution originals scaled in CSS.
    • Preload the LCP image on product and collection templates; never lazy-load it.
    • Limit apps that render above the fold — review widgets and currency selectors are common CLS sources.
    • Defer non-critical scripts and load chat or popup apps after interaction.

    The store-specific detail is covered in Shopify speed optimisation.

    Structured data

    Most themes output some product schema and most review apps output their own, which frequently produces conflicting or duplicated graphs. Validate with the Rich Results Test and ensure: one Product node per product page, accurate Offer price and availability, BreadcrumbList matching the visible trail, and review markup only where reviews are actually displayed.

    Diagnostic pass for any Shopify store

    1. Crawl the store and group URLs by pattern — collections, tags, parameters, products.
    2. Check canonical output on product URLs reached via collections and variants.
    3. Review robots.txt.liquid against the crawl waste you found.
    4. Compare indexed URL count in Search Console against products plus collections plus pages; a large excess means filter or tag URLs are being indexed.
    5. Test the LCP element and app script load on product and collection templates.
    6. Validate structured data on one product, one collection and one article.

    Put this into practice

    Move from diagnosis to implementation with a focused engagement for your stack.

    Shopify SEO

    Frequently asked questions

    Can I remove /collections/ and /products/ from Shopify URLs?
    No. Shopify enforces these path prefixes and there is no supported way to change them. Optimise the handle instead and stop treating the prefix as a problem — it is not a ranking factor.
    Does Shopify handle duplicate product URLs automatically?
    Partly. Products reached through a collection path carry a canonical to the /products/handle version. Where duplication still arises is in tag-filtered collections, sort parameters and paginated states — those need theme-level control.
    Can I edit robots.txt on Shopify?
    Yes, through robots.txt.liquid in the theme. Edit it carefully: the defaults already block cart, checkout and account paths, and removing those rules creates crawl waste rather than opportunity.

    Shopify store held back by the theme?

    Most Shopify SEO problems live in Liquid templates and the app stack, not the settings panel. I work at theme level to fix duplication, crawl waste and render performance.

    Mazam Khalid — Technical SEO & AI Search Specialist

    Mazam Khalid works across technical SEO, Google Search Console, indexing and crawl optimization, AI Search Optimization, GEO/AEO, structured data, Core Web Vitals, WordPress, Shopify, Laravel, React and website performance. He also works on Google Ads, Meta Ads, analytics and conversion tracking where technical implementation affects search visibility and lead generation.

    Chat on WhatsApp