Fixing Ecommerce SEO in Shopify
Shopify handles a lot of technical SEO for you: canonical tags, an XML sitemap, a sensible robots.txt and fast hosting.
That is why most Shopify SEO problems are not about the platform itself but about what sits on top of it: a theme that links products through collection paths, apps that leave code behind, search listing fields left on their defaults, and product and collection templates with nowhere to put useful content. The Ecommerce Audit finds these on your store pages. This guide shows where each one comes from in Shopify and how to fix it in the admin or the theme.
- What Shopify decides for you
- Collection-path product links
- Search listing fields and handles
- Room for real content: metafields and sections
- Apps that help, and apps that leave a mess
- Tag pages, vendor pages and other thin views
- The fix, step by step
- Markets, speed and other Shopify specifics
- Questions and answers
What Shopify decides for you
Some parts of a Shopify store cannot be changed, and it saves time to accept them early rather than fight them.
| Fixed by Shopify | What it means for SEO |
|---|---|
URL prefixes: /products/, /collections/, /pages/, /blogs/ | You choose the handle after the prefix, not the prefix. Rankings are not held back by it; do not try to hide it with proxies or edge rewrites. |
| Canonical tags on products and collections | Themes normally output canonical_url,
which points collection-path and variant URLs at the main product URL. |
XML sitemap at /sitemap.xml | Generated automatically, split into product, collection, page and blog sitemaps. Submit it once in Search Console. |
| robots.txt | A sensible default that blocks cart, checkout, internal search and many sort
and filter combinations. It can be edited with a robots.txt.liquid template. |
| Checkout | Runs on Shopify's checkout and is not meant to be indexed. |
What you do control is the theme, the apps, the content and the settings. That is where the Ecommerce Audit findings on Shopify stores usually trace back to.
Collection-path product links
Every Shopify product has one main URL, /products/harbour-sofa, but it is also reachable
through each collection it belongs to, such as /collections/garden-sofas/products/harbour-sofa.
The canonical tag on the collection-path version points to the main URL, so this is not a disaster. The
trouble is that many themes link to products from collection grids using the collection path, via the
Liquid within filter:
{%- comment -%} Links through the collection path {%- endcomment -%}
<a href="{{ product.url | within: collection }}">{{ product.title }}</a>
{%- comment -%} Links to the main product URL {%- endcomment -%}
<a href="{{ product.url }}">{{ product.title }}</a>
With the first version, your own internal links point search engines at thousands of non-canonical
URLs, while the canonical tag says to use a different one. Crawlers spend time on the duplicates and
have to reconcile mixed signals. Removing | within: collection from product card snippets,
usually in files named something like card-product.liquid or product-grid-item.liquid,
makes every internal link agree with the canonical.
The trade-off is that the breadcrumb on the product page may no longer know which collection the shopper came from. Most shops handle this by showing the product's main collection in the breadcrumb, set with a metafield, which is clearer anyway. The duplicate product URLs guide explains the general principle.
Search listing fields and handles
Each product, collection, page and blog post in the Shopify admin has a "Search engine listing" section at the bottom of its edit screen. It holds three things:
- Page title, used for the title tag. If left empty, the theme falls back to the product or collection name, often followed by the shop name.
- Meta description. If left empty, many themes use the start of the description, which on imported products is often a line of specification or supplier text.
- URL handle, the part after
/products/or/collections/.
For a large catalogue, editing these one by one is slow. Shopify's product CSV export and import includes SEO title and SEO description columns, so you can write them in a spreadsheet and import them back. Collections do not have the same CSV route in the standard admin, but there are far fewer of them.
Changing handles
When you change a handle, Shopify offers a "Create a URL redirect" checkbox. Leave it ticked; it adds
a permanent redirect from the old address. Only change handles where there is a clear gain, such as replacing
hbr-3s-gry-2 with harbour-sofa, because every change creates a redirect and
internal links should be updated to the new URL too. Existing redirects can be reviewed and exported
from the URL redirects screen in the admin.
Room for real content: metafields and sections
Shopify's default product and collection templates give you one rich text description each. That pushes shops into cramming specifications, sizing, care and delivery notes into a single block, and leaves collections with nowhere to put buying help below the product grid.
Metafields solve this. You define them once in Settings under custom data, for example:
| Owner | Metafield | Type | Used for |
|---|---|---|---|
| Product | custom.dimensions | Single line text | Specification table row |
| Product | custom.material | Single line text | Specification table row and filters |
| Product | custom.care | Rich text | Care section below the description |
| Product | custom.main_collection | Collection reference | Breadcrumb |
| Collection | custom.buying_guide | Rich text | Buying help below the grid |
In an Online Store 2.0 theme you can then connect these to blocks in the theme editor without code, using the dynamic source button, or output them in Liquid:
{%- if product.metafields.custom.dimensions != blank -%}
<tr><th scope="row">Dimensions</th>
<td>{{ product.metafields.custom.dimensions }}</td></tr>
{%- endif -%}
Because the values live in structured fields, the same data can feed filters in the Search & Discovery app, specification tables and, if your theme or app builds it from them, Product markup. The product page guide and the category page guide explain what to put in them.
Apps that help, and apps that leave a mess
Apps are where Shopify stores gain features and lose control. For SEO, the common problems are:
- Duplicate structured data. The theme outputs Product JSON-LD, a review app adds another Product block with ratings, and an SEO app adds a third. Search engines then see conflicting prices or ratings. Keep one complete block and switch off the others; the Shopify JSON-LD guide covers this in detail.
- Content that only exists in scripts. Reviews, size guides and FAQ tabs rendered by an app after load may be invisible in the page HTML. Check with View Source and prefer apps that render server-side or through theme app blocks.
- Leftover code. Older apps inserted snippets directly into theme files. Uninstalling the app does not always remove them, so the store keeps loading scripts, or broken references, for an app you no longer use.
- Page builder templates. Landing page apps can create pages with their own templates that ignore your title, canonical or heading conventions.
Newer apps usually use app embeds and app blocks, which you can switch off in the theme editor without touching code. That is a good reason to prefer them when choosing between apps.
render tag left
behind will show an error on the live store.Tag pages, vendor pages and other thin views
Shopify generates a number of listing views automatically. Most are useful to shoppers but thin as search landing pages:
- Collection tag views, such as
/collections/garden-sofas/grey, used by older themes for filtering. - Vendor and type listings at
/collections/vendors?q=Fernbrookand/collections/types?q=Sofa. - Blog tag archives at
/blogs/news/tagged/garden-ideas. /collections/all, which lists every product.
A common approach is to add a noindex robots meta tag to tag views in theme.liquid,
while leaving them usable:
{%- if current_tags -%}
<meta name="robots" content="noindex, follow">
{%- endif -%}
Where a tag view matches something people genuinely search for, such as grey garden sofas, a dedicated collection with its own description is a better landing page than the tag URL. The faceted navigation guide covers choosing those. For robots.txt changes and crawl patterns on Shopify, see Shopify crawl fixes.
The fix, step by step
Step 1
Back up the theme and list installed apps
In the theme library, duplicate your live theme and do all code work on the copy, previewing it before publishing. Then list every installed app with what it adds to the storefront, such as reviews, filters, size charts or SEO markup, and note which ones use app embeds you can switch off in the theme editor. Add the Ecommerce Audit findings for your top products and collections so you know which problems each change is meant to fix.
Step 2
Link products by their main URL
In
the theme code editor, search all files for within: collection. In product card and grid
snippets, change {{ product.url | within: collection }} to {{ product.url }}
so collection grids link to /products/handle directly. Preview a collection, hover over
a few products and confirm the links no longer include the collection path. Set the breadcrumb to use
a main collection metafield if it relied on the collection context.
Step 3
Fill in the search engine listing fields
Export products to CSV, then write a proper SEO title and SEO description for your priority products in a spreadsheet, using the product name, the key attribute and the brand. Import the file back and spot-check several products in the admin. For collections, edit the search engine listing section on each one directly. Leave handles alone unless they are unreadable codes, and keep the redirect checkbox ticked when you do change one.
Step 4
Add metafields for specs and lower collection text
Under Settings and custom data, define product metafields for the specifications you sell by, such as dimensions and material, plus a care field and a main collection reference. Add a rich text collection metafield for buying help. Connect them to blocks in the product and collection templates using dynamic sources, fill them for your priority products and collections, and check the values appear in View Source rather than only after scripts run.
Step 5
Clean up app code and duplicate markup
View Source on a product page and search for application/ld+json. If there
is more than one Product block, decide which one to keep and switch off the others in the app or theme
settings. Search theme files for snippets belonging to apps you have uninstalled, remove their render
tags and snippet files on the duplicate theme, and check the storefront still works. Replace script-only
review or size guide widgets with app blocks where available.
Step 6
Handle tag pages, handles and redirects
Add
a noindex, follow robots meta tag for collection tag views in theme.liquid,
and create proper collections for any tag combinations people actually search for. Review the URL redirects
list for chains, where an old URL redirects to another URL that is itself redirected, and point each
old address straight to its final destination. Update menus and internal links that still point at old
handles.
Step 7
Re-test the templates and re-audit
Publish the updated theme, then check one product, one collection and one tag view with URL Inspection in Search Console, confirming the canonical, title, robots meta tag and content are what you expect. Rerun the Ecommerce Audit across your priority pages and compare with the first run. After any theme update or new app installation, repeat the View Source checks, because both often bring back the same issues.
Markets, speed and other Shopify specifics
- International stores. Shopify Markets can serve different countries on subfolders or separate domains and adds hreflang tags for them. Check that each market has translated content and correct prices rather than duplicate English pages, and see Shopify hreflang fixes.
- Speed. Shopify hosting is fast; slow Shopify stores are usually slowed by apps, large theme scripts and oversized images. Removing unused app code in step five often helps more than any other change.
- Variant URLs. Selecting a variant adds
?variant=to the product URL. The canonical points to the main product, which is usually what you want. - Blog. Shopify's blog is basic but perfectly usable for buying guides; link from articles to the relevant collections and products using their main URLs.
1. Can I remove /products/ and /collections/ from Shopify URLs?
No. Shopify fixes these prefixes and you can only change the handle that follows them. Some shops try to hide them with proxies or edge rewrites, but that tends to break things and adds risk for no clear gain. Search engines are perfectly happy with the prefixes, and many very successful stores rank well with them. Put your effort into good handles, titles and content instead, and make sure internal links use the main product URL consistently.
2. Does Shopify create duplicate content?
It creates several URLs for the same content, such as products reachable through collection paths and variant parameters, but it also adds canonical tags pointing to the main version, so this is handled reasonably well by default. The part you control is your internal linking. If your theme links to products through collection paths, change it to link to the main product URL. Tag views, vendor listings and blog tag archives are the other common source of thin near-duplicates.
3. Do I need an SEO app for Shopify?
Not necessarily. Shopify already handles canonicals, sitemaps and robots.txt, and you can edit titles and meta descriptions in the admin or through CSV. An SEO app can save time on large catalogues, for example by bulk-editing fields or checking for missing alt text. The risk is that some apps add their own structured data or scripts that duplicate what the theme already does. If you install one, check what it adds to the page source and switch off overlapping features.
4. How do I edit robots.txt on Shopify?
Shopify generates robots.txt automatically, and you can customise it by adding a robots.txt.liquid template to your theme. The template lets you keep Shopify's default rules and add your own, for example to block a particular filter pattern. Be careful, because a mistake can block important pages from crawling. For most stores the default file is sensible and needs no change. The Shopify crawl and robots guides go through safe edits in more detail.
5. Why do my Shopify product pages show two sets of review stars in testing tools?
Usually because both the theme and a review app output Product structured data, each with its own rating, or because the review app adds a separate block alongside the theme's. Testing tools then show two products or conflicting values. View Source on a product page and search for application/ld+json to see every block. Keep one complete Product block that includes the rating and switch off the duplicate in the app or theme settings.
6. Will changing a product handle lose its rankings?
Changing a handle changes the URL, so there is always some short-term risk, but Shopify's redirect checkbox adds a permanent redirect from the old address, which passes visitors and most signals to the new one. Only change handles where the old one is genuinely poor, such as a supplier code, and update internal links, menus and any ads to the new URL. Avoid changing the same handle repeatedly, which builds redirect chains and confuses reporting.
7. Should Shopify collection tag pages be indexed?
Usually not. Tag views such as a collection filtered by a colour tag tend to have the collection's title and description with a subset of products, which makes them thin duplicates. A noindex robots meta tag on tag views, added in theme.liquid, keeps them usable for shoppers without offering them as search landing pages. Where a tag combination matches a real search, create a proper collection for it with its own title, description and handle instead.
The Ecommerce Audit checks product page completeness, category page depth, Product and review schema, faceted navigation, product images, internal links and product page speed across your top pages.
Open Ecommerce Audit Fixes โ