Shopify has reached new heights of popularity, but the platform isn’t without it’s SEO issues...
Shopify has seen significant growth over the last few years, and this really accelerated in 2020 as an increased number of people wanted a quick, easy and scalable way to get their business online during the pandemic.
Looking at Google Trends data, we can see just how apparent that spike was:
This is not without good reason – Shopify is a great platform for building a business, particularly for those without digital experience – one of its main selling points is its simplicity.
But it’s perhaps that focus on simplicity and creating a platform that’s primarily built for entry-level users that has resulted in Shopify’s inflexibility: many technical SEO tasks you might expect to do on platforms like WordPress or Magento are not possible on Shopify, and others require fairly complex workarounds. Let’s take a look at some of those issues, as well as a few Shopify SEO tips.
1) Forced URL structure
One of the first things you’ll notice on any Shopify site is that they all have the same URL structure. Categories are /collections/, and every product will have /products/ in the URL. This is set in stone in Shopify, which means you won’t be able to do things like have a product URL at the root.
I don’t think this is a massive issue in itself, but if you’re migrating from another platform to Shopify, your entire website will have to go through URL changes. Of course, it’s always best to avoid any URL changes where possible. A migration to Shopify involving a large number of forced URL changes will likely be fairly painful, even with redirects.
2) No subcategories
Shopify also doesn’t allow us to create subcategories with hierarchical URLs.
On another platform, we might create a subcategory with the following URL structure: example.com/collections/mens-shirts/long-sleeve.
But on Shopify, you’re unable to have hierarchies within collections.
So, if you wanted that to be a ‘subcategory’ collections page, it would have to be a flat collection of its own, such as:
If you try to add a forward slash in yourself, it’ll automatically change to a hyphen.
Do note that collections can be nested under different collections in the navigation menu, to give the visual appearance of subcategories. But in terms of the URL and the backend structure, they are at the same level.
Ideally, I would have liked a hierarchical structure to clearly signal the relationships between sets of parent/child category pages. However, you can filter collections by a tag, which kind of creates a subcategory page. But that’s not without its issues…
3) Duplicate content created by filters
Out of the box, collections can be filtered with tags, allowing users to filter and refine a collection of products.
For example, if you wanted the option to filter /mens-shirts/ by the colour red, you’d create a tag for red and apply this to all relevant products. If that filter is then selected on /mens-shirts/, the default Shopify behaviour would be to create a new URL:
This new URL, created by selecting a filter, appends the tag to the original URL and has a self-referencing canonical, so it’s indexable. The advantage of this is that it allows us to have indexable pages relevant to more niche search queries (e.g item category + colour), kind of performing the function of a static subcategory page.
The downside is that by having all filter options indexable, duplicate collections can be easily created.
So while we have a page for Men’s Red Shirts at /collections/mens-shirts/red (accessed via the filter), we may already have a static collections page for Men’s Red Shirts at example.com/collections/mens-red-shirts/!
This could then happen multiple times across every collections page.
I’d normally resolve this type of issue using canonical tags. It’s not particularly quick or easy to apply a custom canonical on Shopify, but it can be done using if statements based on various templates in your theme and using theme settings.
Alternatively, there are Shopify apps available that overhaul the product filtering and solve some SEO issues while they’re at it. Boost is one example; if we were to filter /mens-shirts/ by the colour red while using this app, the resulting URL canonicals to /mens-shirts/, so all is well in terms of duplicate content in the index.
The downside of this approach is that this may lead to you keeping valuable SEO pages invisible to Google. Make sure you’re clear on the impact of keeping those filter URLs out of the index; see what type of page competitors have ranking for ‘red shirts’ or whatever your page is, and make an assessment based on the advantages and disadvantages of canonicalising them.
Additionally, it’s worth noting that on tag pages, you’re unable to edit the page content. Generally, it will duplicate what’s on the page it’s filtered from. So, /mens-shirts/red would have the same content as /mens-shirts. That could be annoying if you’re aiming to have highly optimised pages targeting more niche keyword permutations.
4) Unable to edit robots.txt & XML sitemap
Many eCommerce sites use robots.txt to stop Google from crawling pages it doesn’t need to be crawling, such as faceted navigation URLs.
But like the URL structure, the robots.txt file on Shopify is rigid and locked. It’s the same on every Shopify site and can’t be edited. While Shopify’s robots.txt file does quite a good job, there may be occasions where you’d want to add something to robots.txt to block Google from seeing another type of URL. You’d instead need a different solution, such as applying a noindex tag.
Like robots.txt, it’s also not out of the question that you one day might want to manually edit the XML sitemap. Unfortunately, that too is blocked by Shopify. This forum lists a workaround whereby a custom sitemap file is uploaded to the store and a redirect implemented from the original sitemap.xml to the new file URL. I’ve not tried it and it doesn’t appear to work for everyone, but if you’re desperate to edit your xml sitemap, it could be worth a shot.
5) Duplicate product URLs
By default, product URLs on Shopify include the collection path, and if you access the same product via different collections, that identical product is available on multiple different URLs. For example, a mens’ red shirt might be on the canonical URL example.com/products/nice-red-shirt.
But you might be able to access that via a few collection pages:
Each of these URLs would be identical but would canonicalise to example.com/products/nice-red-shirt.
The limitation here is that generally and out the box, that canonical URL won’t be linked to outside of the All Products listing page, which you can view on most Shopify sites at /collections/all/.
This paints a pretty confusing picture for Google. The canonical tag is used to illustrate which version of the URL is the master version. Yet the version we’re saying should be prioritised is actually barely linked to, and various non-canonical versions are the ones being linked to! If you access products via the navigation menu and from a collections page, you’ll be taken to a URL that canonicalises to a different one.
This can be fixed by editing the theme’s .liquid file. This fix ensures that it’s the canonical URL that is linked to across the website and will help clear up any confusion. If you have product URLs with search potential, this is certainly worth implementing.
6) No access to .htaccess can make redirects tricky
No .htaccess means that rule-based redirects aren’t possible.
Although it’s possible to apply individual redirects easily in Shopify, for bulk jobs it’s a bit trickier, and these will have to be completed in Excel and uploaded via a Shopify app such as Transportr.
Also worth noting that while Shopify is limited to 100,000 redirects, that limitation doesn’t apply to apps like Transportr.
7) No international subdirectories
If your business is expanding internationally, a key part of that expansion plan needs to be international SEO and how your website will be structured in order to maximise organic traffic.
This would usually involve choosing between using subdirectories, subdomains or CCTLDs. But with Shopify, international subdirectories aren’t possible, so unless you want to have entirely separate domains for each country, a subdomain is the only option. See https://uk.gymshark.com/ as an example.
Google has said that subdomains are treated the same as subdirectories, but this remains debated in the SEO community – here’s Rand Fishkin linking to 14 case studies apparently proving that’s not true. My experience has also been that subdirectories always outperform subdomains, and it seems that despite what’s said, subdomains are to an extent, treated differently to the main domain. Whereas a subdirectory allows for clearer consolidation of authority.
On this thread from Jan 2021, a Global Commerce Product Lead from Shopify has said that subdirectories are being considered for international websites, although there’s no timeline.
An alternative approach to this, and other issues posed by Shopify’s rigid URL structure, would be to use a Headless CMS, where the front-end and back-end are separated but communicate via API. This would leave you in full control of your URLs and give you back some of the SEO flexibility that Shopify lacks out of the box. We’ll leave a deeper look at the advantages and disadvantages of Headless sites until another time!
Shopify does have SEO limitations, but they’re by no means unassailable. Some SEO issues such as duplicate products or collection URLs can be resolved with a bit of tinkering or through the use of (paid for) Shopify apps.
Other SEO limitations are built-in so that people setting up a business online for the first time and with little digital knowledge won’t be in danger of breaking anything – for example by editing the .htaccess or robots.txt.
As more businesses start using it and particularly as the companies that are using Shopify get larger and expertise grows, I’m expecting that Shopify will grant more freedoms to those working with it. The knowledge of its users will have developed beyond a one-man band running a basic website, and Shopify ought to grant that extra flexibility.