Shopify SEO is the work of getting a Shopify store's products, collections, pages and blog posts crawled, indexed under one URL each and shown with accurate titles and product data. Shopify already generates the sitemap, robots.txt, canonical tags and product markup. Your part is unique metadata, stable handles with redirects, lean apps, correct international setup and complete product data.

This guide covers what is specific to Shopify, from fixed URLs and robots.txt.liquid to Shopify Markets and the AI shopping channels Shopify now feeds, checked against Shopify's Help Center and developer documentation as of September 2026. A checklist closes it. The questions every store faces, whatever its platform (which category and filter pages deserve to rank, how to write product pages, what to do with discontinued products), are in our e-commerce SEO guide, and links work for a store as for any site: see link building.

What Shopify handles for SEO, and what it leaves to you

Shopify's SEO overview lists what every online store gets without configuration: canonical tags added automatically, a generated sitemap.xml and robots.txt, title tags that themes build with the store name, and SSL switched on by default. The sitemap links products (with their primary image), collections, pages and blog posts and updates itself, and all current Shopify-supported themes and Theme Store themes include product structured data such as price, availability and reviews.

That is the plumbing. It does not decide what each page says, which URLs your templates link to, what your apps inject, or whether your product data is complete enough for Google. The table separates the two.

AreaWhat Shopify doesWhat is still yours
SitemapGenerates /sitemap.xml, split into products, collections, blogs and pages, kept currentSubmitting it in Search Console, once per domain
robots.txtServes a default file that blocks cart, checkout, account and sorted or filtered collectionsChanging it through robots.txt.liquid, only with a reason
Canonical tagsPrints them from the themeLinking internally to the canonical URLs
Titles and snippetsFalls back to the page title plus the store nameA unique title and meta description per page
Structured dataOutputs Product markup from the themeChecking it after theme edits and app installs
hreflangAdds tags automatically for Shopify Markets domains and subfoldersMaking sure no app or theme adds a second set
SpeedCDN, image optimization, caching and compressionTheme choice, apps and third-party tags

Work with Shopify's fixed URL structure

Every product, collection, page and blog post URL on Shopify is a fixed prefix plus a handle. According to Shopify's Liquid documentation, the handle is generated from the resource's title when it is created: lowercase, with spaces and special characters turned into hyphens, and a number appended when the title repeats (potion, then potion-1). Renaming the product later does not change the handle.

ResourceURL patternWhat you can change
Product/products/<handle>The handle
Collection/collections/<handle>The handle
Page/pages/<handle>The handle
Blog post/blogs/<blog-handle>/<post-handle>Both handles

The prefixes are not negotiable. Shopify's redirect documentation calls /products, /collections and /collections/all fixed Shopify paths, and blog posts always sit under /blogs/ and their blog's handle, as the article object shows. Two consequences follow. A store that moves to Shopify changes almost every URL it had; Shopify's migration guide gives the example of an old /policies/shipping-policy page that becomes /pages/shipping-policy, and each such change needs a redirect. And the handle is the only keyword-bearing part of the path, so write it once, well, before launch.

Duplicate product URLs through collection paths

A product can also be reached inside a collection, at an address such as /collections/sale/products/blue-shirt. Themes build these links with the Liquid within filter, and Shopify's own documentation warns that the collection-aware page and the standard product page show the same content on separate URLs. A product in ten collections can be linked at eleven addresses.

Google groups such duplicates and picks one to index. A rel="canonical" tag is a strong signal for that choice, and Google's canonicalization guide adds that internal links should point at the canonical URL, not a duplicate. Shopify themes print the canonical tag from the canonical_url object in theme.liquid, as the theme metadata guide describes, and Shopify's Horizon theme links its product cards to the plain product.url. Three checks:

  1. Search your theme code for within. If product grids use it, change the links to product.url, so crawlers meet one URL per product.
  2. Open a product from a collection page and view the source. The canonical link should name the /products/ URL; if it names the collection path, a theme or app customization has changed it.
  3. Crawl the store and list URLs that contain /collections/ and /products/ together. Any that are linked internally are links you can fix.

Edit titles, meta descriptions and alt text

Every product, collection, page and blog post has a search engine listing section in the admin, with three fields: page title, meta description and URL handle.

What you are editingWhere in the Shopify admin
Home pageOnline Store > Preferences, "Social sharing image and SEO"
ProductProducts > the product > Search engine listing
CollectionProducts > Collections > the collection > Search engine listing
PageOnline Store > Pages > the page > Search engine listing
Blog postContent > Blog posts > the post > Search engine listing

Shopify's keyword guide recommends titles of 60 characters or fewer (the field accepts 70) and meta descriptions of about 160. The editors for products and pages warn that titles over 70 characters may be cut off in results. Google sets no fixed limit and truncates title links to fit the device, so put the words that identify the page first, and avoid titles that differ by a single word across a whole catalogue. Three Shopify behaviours are worth knowing:

  • Blank fields fall back. A product with no SEO title gets the theme's default: its title plus the store name. That is acceptable for a long tail of products and weak for your top sellers and collections.
  • The title field is the h1. Shopify builds the page heading from the title you give the product, collection, page or post, so that title should say plainly what the page is.
  • Google may rewrite the snippet. If a result shows different text, view the page source: if <title> and <meta name="description"> match what you entered, Shopify is doing its part and the search engine chose other text.

Alt text is set per image. For a product image, open the product, click the image and choose Edit alt text; for a collection or blog post featured image, choose Update, then Edit image. Describe what the photo shows ("Navy merino crew-neck sweater, folded"), not a list of keywords; the same text serves screen reader users, which our accessibility guide covers. File names matter too, and Shopify cannot rename an uploaded file: rename it on your computer before uploading, or replace the image to fix a name like IMG_0042.jpg. The rest of on-page work, from headings to internal links, is the same on Shopify as anywhere; our on-page SEO guide goes through it.

Change handles without losing traffic

Changing a handle changes the URL, and every link, bookmark and search result that points to the old one then reaches a 404 page, which is why the product and collection editors tell you not to edit handles often. When you do, the admin offers a redirect: for blog posts and pages, Create a URL redirect is pre-selected, and the collection editor asks whether to create one. After any handle change, confirm the redirect exists under Content > Menus > View URL redirects, where you can also create redirects by hand or import them from a CSV file.

A search result points to an old product address that now leads to an empty page, and an orange redirect arrow carries the visit on to the same product at its new address.
Fig. 1 A changed handle is a new URL: without the redirect, every link and search result that points to the old one ends at a 404.

Shopify's URL redirect rules explain most redirects that seem not to work:

  • A redirect only fires on a broken URL. If the old address still loads a page, the redirect is ignored. This is why a hidden collection or a draft product can be redirected while it returns 404, and why Shopify deletes that redirect automatically when you make the item visible again.
  • Some paths cannot be redirected: the fixed paths above, URLs that start with /apps, /application, /cart, /carts, /orders, /services or /shop, and collection tag-filter URLs, which Shopify treats as valid even when no product has the tag.
  • There is a ceiling: 100,000 redirects, or 20,000,000 on the Plus plan.
  • Markets inherit them. One redirect from /products/blue-t-shirt also applies under market subfolders such as /en-ca/, unless you create a separate one for that subfolder.
  • They are 301s, and browsers and search engines cache them. Removing a redirect does not stop it for visitors who already followed it.

For a migration, build the redirect list before the domain moves, import it as a CSV, then test the old URLs that had the most traffic and links. The migration guide asks for the same check. Our SEO service plans migrations and replatforming as a cutover: a URL inventory from crawl, logs and analytics, a one-to-one redirect map, verification on staging and monitoring after launch.

Leave robots.txt alone unless you have a reason

Every store serves a default robots.txt, and Shopify's robots.txt documentation lists its key rules as of September 2026:

  • /admin, /cart/, /checkout, /checkouts/, /account and /orders: private, per-customer pages.
  • /collections/*+*: collection pages filtered by combined tags.
  • /collections/*sort_by*: sorted collection pages, which list the same products in another order.

Those are the key entries, not the whole file. Public content (products, collections, pages, blog posts and policies) stays crawlable. To change the file, add a robots.txt.liquid template in the theme's code editor (Online Store > Edit code > Add a new template > robots). Shopify's warnings are unusually blunt: it is an unsupported customization that Shopify Support cannot help with, and incorrect use can lose a store all its traffic.

Good reasons to edit it are narrow: blocking a URL pattern that wastes crawling, such as a parameter an app adds; adding host-specific rules when Shopify Markets serves different domains; blocking or allowing a particular crawler; or listing an extra sitemap. Shopify's developer guide shows how to add a rule while keeping the default groups; its example blocks every URL with a q= parameter for all crawlers:

{% for group in robots.default_groups %}
  {{- group.user_agent }}
  {%- for rule in group.rules -%}
    {{ rule }}
  {%- endfor -%}
  {%- if group.user_agent.value == '*' -%}
    {{ 'Disallow: /*?q=*' }}
  {%- endif -%}
  {%- if group.sitemap != blank -%}
    {{ group.sitemap }}
  {%- endif -%}
{% endfor %}

Keep the loop over robots.default_groups. Shopify updates those defaults, and a template rewritten as plain text freezes the file as it was on the day you pasted it. Two further traps: uploading a theme from the Themes page does not import robots.txt.liquid (Shopify CLI and Theme Kit keep it), and an old custom template can keep rules the current default has dropped, such as Disallow: /search and Disallow: /policies/. Deleting the template restores the current default.

The "Indexed, though blocked by robots.txt" status in Search Console is normal on Shopify, and usually needs no action.

Important

robots.txt stops crawling, not indexing. Google only sees a noindex tag on a page it is allowed to fetch, so never block a URL in robots.txt that you are trying to remove with noindex.

Shopify offers three ways to keep something out of search while it stays live, described in its guide to hiding a page from search engines:

  • A noindex meta tag added to the <head> of theme.liquid with a Liquid condition, for a template (template contains 'search') or a single handle. The page drops out of search engines but stays in your storefront search.
  • The seo.hidden metafield, an integer set to 1 on a product, page or blog post.
  • Unlisted status, for products that should be reachable only by their direct URL.
Where the product still appearsseo.hidden = 1Unlisted status
Search enginesNoNo
SitemapNoNo
Storefront searchNoNo
Shopify Catalog (AI channels)NoNo
Collections and recommendationsYesNo
Third-party sales channelsYesNo
Its own product pageYesYes

Get the store indexed, then audit it

Search engines cannot index what they cannot reach. Shopify's SEO FAQ lists the usual blockers: a store still in private mode (the setting behind the storefront password), a store on a trial, which search engines do not index, and a migration without redirects. Once the store is public:

  1. Verify the domain in Search Console. Shopify's sitemap guide uses a URL-prefix property and the HTML tag method, pasting the tag under <head> in theme.liquid; a DNS record works too.
  2. Submit /sitemap.xml, and repeat for every international domain you use. Languages you publish are added to each domain's sitemaps automatically.
  3. Inspect a product, a collection and a blog post with URL Inspection. It shows the rendered page Google sees, which is also how Shopify suggests confirming a missing title or h1 (usually caused by theme edits or an app).

Shopify runs bot management for every store at the network level. To let your own audit crawler through as an authorized visitor (Shopify documents the setup for Screaming Frog, Sitebulb, JetOctopus and OnCrawl), use Web Bot Auth: create a signature under Online Store > Preferences > Crawler access, valid for up to three months and one domain, and add its Signature-Input, Signature and Signature-Agent headers to the crawler's requests. Search engines do not need it to index the store. What an audit should look for is the subject of our technical SEO guide.

Check the product structured data your theme outputs

Shopify's own themes print product markup with the structured_data Liquid filter. It outputs a schema.org Product for a product without variants and a ProductGroup for one with variants, with an Offer carrying the price, currency, availability and URL. In Horizon it is one line in the product section:

<script type="application/ld+json">
  {{ closest.product | structured_data }}
</script>

For merchant listings, Google requires a Product with name, image and offers, and an Offer with price and priceCurrency; it recommends availability, brand, sku and a gtin among others. The filter covers the required part. What breaks it in practice:

  • A customized theme that no longer outputs the markup. Search the product template for structured_data or application/ld+json.
  • An app that adds its own Product markup on top of the theme's, which leaves two descriptions of one product that can disagree. Keep one source.
  • Empty fields. The filter exports what the product holds; in Shopify's own example, a product with no description outputs an empty description. The fix is in the product data, not in the code.

Test one product with variants and one without in the Rich Results Test after every theme update or app install, then check a live product with URL Inspection. How markup, feed and page must agree is covered in the e-commerce guide.

Find what slows the store: theme, apps and tags

Shopify's performance guide names the three biggest factors in a store's web performance: the theme, the apps installed, and third-party code added by hand, including tag managers and the tags inside them. The infrastructure is already handled: a CDN run by Cloudflare, an image CDN that resizes, compresses and often serves WebP, HTTP/2, one-year browser caching, compression and minification. Scanner advice to add a CDN or enable compression does not apply to a Shopify store.

Apps are the part owners underestimate. Shopify's troubleshooting steps start with apps that load assets on the storefront, and it warns that uninstalling an app does not automatically remove its code from your theme.

Three app modules are cabled to script blocks plugged into a store page. A fourth block, in orange, has no app left above it but is still plugged in, next to a stopwatch.
Fig. 2 Deleting an app removes the app, not always the code it added to your theme; leftover scripts keep loading on every page.

Measure before changing anything. Shopify's Web performance report uses real-user data from Chromium browsers and Firefox, reports the 75th percentile, and bases the store's score on the home page, the most visited product page and the most visited collection page over the last seven days. PageSpeed Insights uses Google's Chrome UX Report instead, so the two can differ. The targets are Google's Core Web Vitals thresholds: Largest Contentful Paint within 2.5 seconds, Interaction to Next Paint under 200 milliseconds and Cumulative Layout Shift under 0.1. Google says good scores align with what its core ranking systems seek to reward.

SymptomLikely cause on ShopifyWhat to do
Slow LCP on product pagesLazy-loaded or animated main image; render-blocking app scriptsLoad the main image eagerly with fetchpriority="high"; defer or remove the app
Poor INP (taps and clicks feel slow)Too much JavaScript from the theme, apps or the tag managerAudit every script; remove unused apps, pixels and tags
Layout shiftsApp widgets injected after load; images without dimensionsReserve space; render images with image_tag, which adds width and height
Slow, heavy collection pagesMany products per page, many sections, page transitionsTurn on pagination, trim sections, compare with animations off
Scores dropped with no content changeA new app, theme update or tagCompare the report before and after; roll back the change

Shopify's theme performance guidance adds one rule with direct SEO weight: render product information and navigation in Liquid and HTML, not client-side JavaScript, which delays LCP and harms SEO. It also sets the bar for the Theme Store: an average Lighthouse performance score of at least 60 across the home, product and collection pages. Treat that as a floor, not a target.

Set up Shopify Markets for international SEO

Shopify Markets can give each country or region its own URL, or serve every market from one. Shopify's international domains guide sets out the trade-offs:

MethodExampleShopify's SEO note
Subfoldersexample.com/fr-caSimplest to set up and benefits from the primary domain's existing search standing
Subdomainsca.example.comFree to set up, but may take longer to build authority
Country domainsexample.caEach domain builds its own authority, so this takes the most time and effort
Primary domain onlyexample.com for every marketNo region-specific URLs, so it won't help you win search traffic in secondary markets

Rules that catch stores out: international domains need the Basic plan or higher and a custom domain (never myshopify.com); language-only subfolders such as /fr exist only on the primary market, so secondary markets use language plus country, such as /fr-ca; two domains in one market must target different languages, or they duplicate each other; and deleting a market turns its URLs into 404s unless you import redirects.

hreflang is automatic. Shopify's hreflang guide explains that the tags are injected through content_for_header in theme.liquid, use region codes such as fr-ca for country markets and language codes such as fr for broader ones, update when markets change, and stay in sync with each page's canonical URL. The danger is a second set: Shopify warns that adding your own tags on top of the automatic ones produces duplicate or conflicting annotations. If a theme or app already outputs hreflang, turn off Automatic hreflang tags under Online Store > Preferences. You need your own tags only for cases Markets cannot see, such as separate Shopify stores on different domains; build them from the localization object, and follow Google's rule that each version lists itself and every other version.

Be careful with automatic redirection. Shopify can send visitors to the market that matches their browser language and location (it does not redirect customers within the EU). Google's multi-regional guidance advises against redirecting on a guess of the user's language, because it can stop users and search engines from seeing every version, and notes that most Google crawls originate from the US. Keep a visible country and language selector with plain links, and submit a sitemap for each domain.

Send products to Google with the Google & YouTube channel

The Google & YouTube channel is managed by Google and syncs your products and store information to Google Merchant Center, where eligible stores selling in the United States can appear in Shopping tab listings for free. It is also the route Shopify documents for Google's AI shopping surfaces, covered below. The channel requirements are where most products get stuck:

  • Store: out of private mode, a valid payment provider, a refund policy and terms of service linked in the footer menu, and at least one visible contact method (email, phone, address or contact form).
  • Identifiers: a GTIN on each variant where the product has one; otherwise an MPN and brand in the channel. Wrong identifiers keep products unpublished and can get the Merchant Center account suspended.
  • Categories and attributes: a Google product category, plus age group, gender, colour and size for apparel, a UPC, EAN or JAN for music, films and video games, and an ISBN for books.
  • Variants: product options, including variants, must be in English to sync.
  • Shipping: only rates in the General shipping profile sync; some countries require shipping costs, or offers are disapproved.

If you connect an existing Merchant Center account, the channel overwrites the product feed you had, so decide which system owns the feed before you connect it.

Shopify and AI shopping assistants

As of September 2026, Shopify's agentic storefronts let customers discover and buy your products inside AI channels: ChatGPT, Google AI Mode and Gemini, Microsoft Copilot and Meta. They are on by default for eligible stores, managed under Sales channels > Agentic, and work in two modes. ChatGPT acts as a referrer, and the purchase happens in your online store checkout; in Google AI Mode and Gemini, Copilot and Meta, customers can pay in a Shopify-powered direct checkout without leaving the conversation, when direct checkout is on. How these agentic checkouts work across Google, OpenAI and the card networks is covered in the future of e-commerce.

The data does not come from crawling your theme. Products reach ChatGPT and Copilot through Shopify Catalog, which sends title, description, options, images, price and availability and keeps them current; Meta receives them through the Facebook and Instagram channel; and Google AI Mode and Gemini draw on Google Merchant Center, which makes the Google & YouTube channel's product data the input for Google's AI shopping as well. Direct checkout there currently requires a store based in, and selling to, the United States.

Magnifying-glass crawlers stop at a padlocked gate in front of a store, while an orange pipe carries product cards from the store past the gate to three chat windows.
Fig. 3 Blocking AI crawlers in robots.txt closes one path only; products reach agentic storefronts through Shopify Catalog regardless.

That changes what robots.txt can do. Rules in robots.txt.liquid affect only crawlers on the open web; they do not stop Shopify Catalog from sending products to the channels you have activated. The controls are the channel settings and, to hide a product everywhere, Unlisted status, which also removes it from Google and your sitemap. Every store also serves agent discovery files at /agents.md, /llms.txt and /llms-full.txt, carrying the store name, sitemap link, policies and discovery endpoints, and you can change their content with agents.md.liquid and matching templates. You do not need an app to generate them.

What improves your visibility is the same product data that helps search. Shopify's AI guidance asks for detailed specifications, comparisons with similar products, sizing, materials and care instructions, and structured attributes, and offers the free Shopify Knowledge Base app to review and customize the FAQs that AI shopping agents use to answer questions about your store. Two measurement notes: orders from AI channels appear in the admin with channel or referrer attribution, and Google Analytics and custom pixels do not fire in Google AI Mode and Gemini's direct checkout. How Google picks sources for its AI answers is in our guide to AI Overviews.

The Shopify SEO checklist

  1. Take the store out of private mode and off the trial before you expect it in search.
  2. Verify every domain in Search Console and submit its /sitemap.xml.
  3. Write a unique title (about 60 characters) and meta description for the home page, every collection, your top products, pages and posts.
  4. Rename image files before uploading them, and add alt text that describes each product, collection and post image.
  5. Decide handles before launch, and keep a redirect from the old handle whenever you change one.
  6. Before a migration or domain move, import a redirect CSV for every old URL, then test the most visited ones.
  7. Link product grids to /products/ URLs, and confirm the canonical on a collection-path product URL.
  8. Leave the default robots.txt unless you have a written reason; if you edit it, use Liquid and keep the default groups.
  9. Hide pages with noindex, seo.hidden or Unlisted status, never with robots.txt alone.
  10. Run a product with variants and one without through the Rich Results Test after each theme or app change.
  11. Review the Web performance report monthly; remove apps that do not earn their cost, and the code they leave behind.
  12. With Markets, prefer subfolders, keep a single source of hreflang and submit one sitemap per domain.
  13. Install the Google & YouTube channel and complete GTINs (or MPN and brand), Google product categories, policies and contact details.
  14. Review Sales channels > Agentic and the product details AI channels receive; use Unlisted only for products that should disappear everywhere.

If you want this done for you, our SEO service starts with a technical audit of crawling, rendering, indexing, speed and structured data, including product and merchant markup, and reports from Search Console, server logs and field data. Shopify and Google Merchant Center are among the platforms and tools it works with.