Shopify carries a reputation for being bad at SEO. It is largely undeserved: the platform handles the fundamentals well out of the box. What actually repeats is a short list of technical mistakes made by the people building on it, followed by the platform taking the blame.
Here are the ones we see most.
Duplicate URLs from collections
The biggest of them, and most store owners have no idea it is happening.
When a product belongs to several collections, Shopify will serve it at several addresses:
/products/blue-silk-dress
/collections/dresses/products/blue-silk-dress
/collections/summer/products/blue-silk-dress
/collections/new-arrivals/products/blue-silk-dress
Four URLs, identical content. A crawler has to decide which one to index and frequently picks the collection-prefixed version, which carries less authority, or splits the ranking signals across all four.
Shopify sets a canonical tag pointing at /products/handle, which helps. The
gap is that many themes link internally to the prefixed variants. Every internal
link, in navigation, collection grids, search results and recommendation
widgets, should point at the canonical address. Then watch Search Console to see
what is actually being indexed, because that is the only version of this
question that matters.
Product pages with nothing on them
We audit stores regularly and the number of product pages carrying two sentences or no description at all is remarkable. To a search engine a page with a title, a price and almost no text is thin, and thin pages rank for the brand name and nothing else.
They also give away the long tail, which is where the intent is. Nobody types “best silk dress for a summer wedding” unless they are close to buying.
A product page wants unique copy covering what the product is and who it is for, its materials and construction, size, fit and care, what separates it from the alternatives, and how it is actually used. For a catalog of any size that is a real content investment, so start with the products that carry the revenue and work outward. The alternative is a catalog of pages competing for attention with nothing to say.
Structured data that is incomplete
Structured data tells a crawler what is on the page in a form it does not have to interpret. For commerce that means Product schema, and it decides how the listing appears.
Done properly, a result can carry the rating and review count, price and availability, images and shipping. A listing showing all of that is chosen over a plain blue link, consistently.
Most themes ship some Product schema, and it is usually partial. The recurring
gaps: no aggregateRating, availability that does not track actual stock,
missing brand and sku, no BreadcrumbList anywhere, and no FAQ schema on
pages that plainly have an FAQ on them.
Audit it with the Rich Results Test, complete the Product schema, add breadcrumbs site-wide, and mark up the question and answer content you already have.
Speed, which is also ranking
Page experience is a ranking input and Core Web Vitals are how it is measured. Most Shopify stores score poorly on mobile, and the causes are consistent: uncompressed hero images that should be a fraction of their size, app JavaScript loading on every page whether it is used there or not, stylesheets that block the first paint, and no lazy loading below the fold.
The quick wins are removing apps nobody uses, sizing and compressing images through Shopify’s own CDN parameters, deferring non-critical JavaScript, inlining what is needed for the first paint, and lazy loading everything below the fold. We have written about this at length separately, because it deserves it.
Redirects during a replatform
The fastest way to undo years of work is to change every URL on the site without mapping the old ones. This is common enough that we gave it its own article too.
What to take from this
None of these are platform limitations. They are decisions, and every one of them is reversible. If your Shopify store is not ranking, the useful question is not whether to leave Shopify. It is which of the above is true of your build.
Max Laberge
Phil Bagdassarian