Skip to main content
← Resources
SEO13 min read

Most Shopify stores leak revenue from technical SEO they can't see.

The Shopify Technical SEO Playbook

Technical SEO on Shopify is different from WordPress. Here's the audit checklist we run on every Shopify and Shopify Plus store: indexation, schema, Core Web Vitals, faceted nav, and AI search readiness.

Updated June 10, 2026

We typically work with Shopify and Shopify Plus stores doing $500k+ in annual revenue.

Samuel Noriega
By

Published

ShareXLinkedIn

Most Shopify stores don't have an SEO problem. They have a visibility problem caused by technical decisions made during the build that nobody documented and nobody fixed.

Duplicate URLs from collection filters quietly consume crawl budget. Variant parameters get indexed instead of canonicalized. Hero images load without preload hints. Schema gets injected by three different apps and they conflict with each other. None of this shows up in analytics until rankings start dropping, and by that point the damage has been compounding for months.

This is the audit we run on every Shopify and Shopify Plus store before touching a single piece of content. It covers what the platform handles automatically, where it fails, and what you have to fix yourself.

How We Approach the Audit

Before we get section by section into what to fix, here is the sequence we run:

  1. Crawl with Screaming Frog against both the live site and the JavaScript-rendered version. The delta between the two tells you what Googlebot is actually seeing versus what users see.
  2. Pull Search Console coverage errors, Core Web Vitals failures, branded versus non-branded query splits, and any queries showing a downward trend over the last 90 days.
  3. On Plus stores: request log files. What Googlebot is actually fetching is almost always different from what you think it is. Log file analysis is the fastest way to find crawl budget waste.
  4. Audit the top 20 revenue-driving pages in isolation: schema, copy quality, internal link structure, and canonical health.

This sequence almost always surfaces the same four or five categories of problems. Here is what we find, in order of how often they show up.

Indexation

The most common indexation problem on Shopify is not missing pages. It is over-indexation: Googlebot crawling hundreds or thousands of parameter URLs that dilute authority from the pages that should rank.

robots.txt.liquid is only editable on Shopify Plus. Most stores do not need custom rules, but the ones that do are usually blocking the wrong things entirely or leaving internal search results wide open. Check /search?q= is disallowed. Check /collections/*+* is disallowed if you have tag URLs.

Canonical tags on variant URLs are non-negotiable. Shopify adds ?variant= parameters to product URLs by default when users select a variant, and those URLs can get indexed. The canonical should always point to the clean product URL, not the parameterized version.

See our full breakdown of how Shopify handles canonical tags and where the default logic fails.

Collection sort and filter parameters are the bigger problem. A store with 20 filter options across 50 collections can generate tens of thousands of indexable URLs that Google sees as thin or duplicate pages. Shopify's native canonical handles the /sort_by parameter but does not protect you from filter app-generated URLs.

One thing worth checking that most audits miss: app-injected pages. Review apps, loyalty apps, and quiz apps all create pages that can get indexed if the app developer did not add noindex. Run a site: search for your domain and sort by recently indexed to catch these.

Faceted Navigation

Faceted navigation is the area where most Shopify stores take their biggest crawl budget hit and the one most agencies either skip or handle wrong.

We cover the specific block/allow decisions in detail in our Shopify faceted navigation guide.

The default approach of blocking all filter URLs with noindex is not always the right answer. It is the safe answer, but it leaves organic traffic on the table for high-value filter combinations that could rank.

The framework we use:

Block with noindex, follow: Low-value filter combinations, sort parameters, combinations that produce fewer than 15 or 20 products, and any URL that is essentially a subset of another indexed page. Use <meta name="robots" content="noindex, follow"> on the rendered page, not robots.txt. Follow is important so Google can still crawl through to the underlying product pages.

Let index: Filter combinations that represent genuine search demand, have enough distinct products to make a real page, and where you are not creating near-duplicate content with another collection. "Red running shoes" might be worth indexing if you have 40 SKUs in that category and the search volume justifies it.

Build dedicated collections for high-value combinations: If a filter combination represents enough demand to rank for, it deserves a real collection with a proper handle, a written description, and its own internal links. A filter URL will never rank as well as a dedicated collection page with content.

The practical test: if someone would type the filter combination as a search query, it might deserve to be a collection. If they are sorting by price or filtering to a single size, it should not be indexed.

Schema

Shopify does not handle schema for you beyond what individual apps inject. Most stores end up with either no schema, minimal schema from a single app, or conflicting schema from multiple apps injecting Product markup with different data.

Product schema is the foundation. Implement it in product.json or via a JSON-LD block in your theme, not through an app if you can avoid it. You need: name, description, image, sku, brand, offers (with price, priceCurrency, availability, url), and aggregateRating if you have reviews. Missing any of these means Google cannot generate a rich result.

MerchantReturnPolicy and ShippingDeliveryTime are now required for Google Shopping and increasingly important for AI search agents that are evaluating products across stores before sending traffic. These are properties on the Offer object, not separate entities. If your return and shipping policies are buried in a page that schema never references, you are invisible to comparison engines.

BreadcrumbList schema belongs on every collection and product page. It costs nothing to implement and improves how Google understands your site architecture.

Organization and Brand schema should be sitewide, defined once, consistent. This is how Google and AI systems build entity knowledge about who you are. Define your brand name, logo URL, sameAs links (LinkedIn, Instagram, etc.), and contact information. Inconsistency between your schema and your actual pages creates entity confusion that can suppress brand queries.

Before adding any schema, audit what is already on the page. In Chrome DevTools, run JSON.parse(document.querySelector('script[type="application/ld+json"]').textContent) to see what your theme or apps are already injecting. Conflicts between app-injected schema and theme-level schema are common and Google will ignore or penalize both.

Core Web Vitals

Google measures Core Web Vitals at the 75th percentile of real user data. That means 75% of your visitors need to hit the threshold, not the average user on a fast connection. On mobile, this is where most Shopify stores fail.

The current thresholds are:

  • LCP under 2.5 seconds
  • INP under 200 milliseconds
  • CLS under 0.1

LCP on Shopify is almost always the hero image on the product or collection page. The two fastest wins: add fetchpriority="high" to the hero image tag, and make sure no app is loading above it in the <head>. Lazy loading the hero image is a common mistake made by themes that apply loading="lazy" globally.

INP replaced First Input Delay in March 2024 and it is the hardest Shopify metric to pass because it measures every interaction throughout a session, not just the first click. The primary culprit is third-party app JavaScript. Review apps, upsell apps, and chat widgets that block the main thread are the most common source of INP failures. Use Chrome DevTools Performance panel to identify long tasks and match them to specific scripts.

CLS on Shopify is most commonly caused by review widget containers that expand after load, cookie banners that push content down, and images without explicit width and height attributes. The fix is always the same: reserve space before content loads. Do not let anything shift the layout after the initial render.

One category most audits miss: font loading. If you are using a custom font that loads asynchronously, text rendering shifts can contribute to CLS. Use font-display: swap and preload your primary font in the <head>.

AI Search and GEO

This is the section most Shopify SEO guides do not have because most agencies have not caught up with it yet. As of mid-2026, it is no longer optional.

GPTBot, PerplexityBot, and ClaudeBot crawl differently than Googlebot. They are not keyword matching. They are building a semantic understanding of what your store sells, who you are, and whether you are a credible source for a specific product query. A page with clean HTML structure, a real product description, and clearly identified author and brand entities will consistently outperform a page with optimized copy and broken schema in AI-generated results.

What matters for AI discoverability:

Clean, semantic HTML. Heading hierarchy should reflect content structure, not design preferences. H1 for the product or page title, H2 for major sections, H3 for subsections. AI crawlers use this to understand what a page is about before looking at the copy.

Real product descriptions. The 150-word description written to hit a keyword is actively penalized in conversational search. AI systems compare your description against competitors and surface the one that actually answers a buyer's question. Describe materials, dimensions, use cases, and who the product is for. If your description could apply to 20 different products, it will not surface for any specific query.

Structured data for shipping and returns. When a user asks an AI agent "what are the best running shoes under $150 with free returns," the agent is pulling return policy data from your schema to filter results. If that data is not structured, you are not in the answer.

Brand entity consistency. Your brand name should appear the same way across your schema, your meta tags, your About page, and your external profiles. Inconsistency makes it harder for AI systems to build a complete entity model for your brand, which affects how often you appear in brand-adjacent queries.

One practical check: search for your top product categories in Perplexity and ChatGPT. If competitors are appearing in the answers and you are not, compare their product pages to yours. It is almost always a combination of description depth and schema completeness.

What Breaks After Launch

The technical foundation degrades over time. These are the most common sources of post-launch regression:

App installs. Every app added to a Shopify store has the potential to inject scripts, create pages, modify theme files, or add schema. A store that passed a CWV audit in January can fail by March because a new app was installed. Run a CWV check after every significant app install.

Theme updates. Shopify theme developers push updates that can remove customizations, overwrite schema implementations, or re-add lazy loading to images that you removed. Keep a changelog of what you have modified in your theme.

Collection filter changes. Adding a new filter attribute to a collection can generate thousands of new indexable URL combinations overnight if you do not have noindex on filter pages. Check your crawl budget in Search Console after any filter change.

Redirect decay. On large catalogs, products get discontinued and collections get restructured. 404s accumulate and are rarely cleaned up. Run a monthly crawl on your top-linked URLs and redirect anything returning a 404 to the most relevant live page.

Frequently Asked Questions

Why do my product pages rank well individually but my collection pages don't rank at all?

Collection pages are the hardest to rank on Shopify because they are almost always thin by default. The platform gives you a title, a filter sidebar, and a product grid. That is not enough content for Google to understand what the collection is about or why it should rank for a category keyword. Collection pages need a genuine written introduction, internal links to related collections, and enough distinct products to justify the topic. We have written about this in detail in our guide on Shopify collection pages not ranking.

We cover every fix in detail in our guide to why Shopify collection pages don't rank.

How does Shopify handle canonical tags for products that appear in multiple collections?

By default, Shopify sets the canonical URL of a product to the clean /products/handle URL regardless of which collection URL the visitor used to find it. This means /collections/running-shoes/products/nike-air-max and /products/nike-air-max both canonicalize to the /products/ URL. This is the correct behavior. The problem arises when apps or theme modifications override this logic, or when internal links throughout the store point to the collection-scoped URL instead of the canonical URL. Audit your internal links to make sure they point to the canonical version.

What should I prioritize if I only have one month to fix technical SEO before a peak traffic period?

In order: fix any pages that are noindexed by mistake, resolve all 4xx errors on top-revenue pages, add canonical tags to variant URLs, implement Product schema on your top 20 products, and preload your hero image. That sequence addresses the most common causes of lost visibility and will show results within a standard crawl cycle. Leave Core Web Vitals optimization for after the peak period unless you have a specific INP score above 500ms that is clearly hurting conversion.

Is Shopify bad for SEO?

No, but this question comes up constantly and the myth persists. The /collections/ and /products/ URL structure is fine. Google has confirmed it handles these URLs without issue. The duplicate URL problem from variant parameters and filter combinations is real, but it is fixable. The constraint is that Shopify gives you less control over the technical layer than a custom-built stack, and on standard plans, you cannot edit robots.txt. For most DTC brands doing under $10M in revenue, the platform is not the bottleneck. The execution is.

Further Reading

ShareXLinkedIn

Keep reading

Related resources

On this page