Before migration
Crawl the old store, export URLs with traffic or backlinks, and map each old URL to its Shopify destination.
Record: status codes, canonical targets, titles, and the old-to-new URL map.
Platforms: Shopify
Shopify ships with sensible SEO defaults: an auto-generated sitemap.xml, self-referencing canonical tags, editable title tags, and a default robots.txt. Those defaults describe a fresh store. They do not guarantee that a customized storefront stays technically sound.
A theme update, a new SEO app, a bulk product import, or a migration can quietly change what Googlebot receives. This hub treats Shopify SEO as ongoing validation: crawl, detect, investigate, fix, recrawl, compare, and monitor.
Technical audit focus. Works with any Shopify theme, SEO app, or Shopify Plus setup.
Definition
A Shopify SEO audit checks what the storefront delivers, not what the admin settings say. It looks at the rendered HTML, status codes, canonical URLs, internal links, metadata, and structured data across every product, collection, page, and blog article.
Shopify can keep generating its sitemap and canonical tags while a Liquid edit emits a second canonical, an app injects duplicate Product schema, or a deleted product sends crawlers to a 404. Only a crawl shows it.
Three questions
Start here
Fix the scope before you crawl. Pick representative page types (product, collection, page, blog article, homepage), list priority URLs by revenue or organic traffic, and record a baseline crawl before any change. Without a baseline, you cannot tell a new defect from an old one.
| Check | What to inspect | Evidence of a problem |
|---|---|---|
| Crawl coverage | Products, collections, pages, blog posts | Important pages absent from the crawl |
| Status codes | Internal URLs and priority landing pages | Unexpected 4xx or 5xx responses |
| Indexability | Meta robots, X-Robots-Tag, canonical targets | Important pages noindexed or canonicalized elsewhere |
| URL consistency | Internal links, sitemap.xml, canonical URLs | Several URL patterns for the same product |
| Metadata | Title tags, meta descriptions, H1s | Missing or repeated values across a template |
| Structured data | Product, Offer, and BreadcrumbList markup | Invalid, conflicting, or duplicated entities |
| Change detection | Current crawl against the baseline | New issues appearing after a release |
Treat crawler findings as diagnostic evidence, not a verdict. Some flagged URLs are expected Shopify behavior. Others are genuine defects.
Discovery
Most checklists treat sitemaps, internal links, and indexation separately. The useful work is reconciling them. Shopify's sitemap.xml is an index that splits into child sitemaps for products, collections, pages, and blogs, so export all of them.
Pull URLs from the sitemap index and each child sitemap, not just the top-level file.
Start at the homepage and follow internal links only, so the crawl reflects what navigation actually exposes.
Sitemap URLs the crawl never found are orphan candidates. Crawled URLs missing from the sitemap often reveal collection-aware product paths or parameter URLs.
Confirm a 200 status code, an indexable meta robots value, a self-referencing canonical, and a crawl depth of about three clicks or fewer.
Check custom rules that might block collections, search, or filtered URLs you actually want indexed.
Compare against the Pages report. Look for priority URLs marked Crawled, currently not indexed, or Duplicate, Google chose different canonical than user.
A product in the sitemap with no internal links usually fell out of collection navigation. A product Google canonicalizes elsewhere usually means internal links and canonical tags disagree.
Consistency
Shopify serves the same product at several addresses. That is expected. The audit question is whether those alternatives are controlled or leaking into internal links, sitemaps, and the index.
| URL pattern | What it is | Healthy signal |
|---|---|---|
| /products/classic-t | Canonical product URL | Self-referencing canonical, listed in sitemap |
| /collections/classics/products/classic-t | Collection-aware product path | Canonical points to /products/classic-t |
| /products/classic-t?variant=123456 | Variant parameter URL | Canonical points to the base product |
| /collections/classics?sort_by=price-ascending | Filtered or sorted collection | Canonical to the base collection, not linked as a destination |
| /collections/classics?page=2 | Paginated collection | Self-referencing canonical on each page |
<a href="{{ product.url }}">
{%- comment -%} /products/classic-t {%- endcomment -%}
Internal links point straight at the canonical product URL.
<a href="{{ product.url | within: collection }}">
{%- comment -%} /collections/classics/products/classic-t {%- endcomment -%}
The canonical may be correct, but thousands of internal links now point at non-canonical paths.
Export every internal link target from your crawl and group by URL pattern. Flag products with more than one canonical, canonicals pointing to a different product, and canonical targets that redirect or 404. Full investigation: Shopify duplicate product URLs and canonical issues.
Redirect validation
Shopify manages redirects through URL Redirects in the admin and can create one automatically when a product handle changes. Deleted products, discontinued collections, and CSV redirect imports are where gaps appear.
Shopify redirects only fire when the source path returns a 404, so a redirect for a URL that still resolves never triggers. Audit redirects as a workflow, not a list of rules.
For fixed prefixes, handle changes, and deleted product scenarios, see Shopify URL redirects and deleted products.
Regression testing
After every release, ask one question: what changed in the storefront's SEO output? Themes are built from Liquid templates, sections, and snippets, and apps inject code through app embeds and theme app extensions. Compare before-and-after HTML for each template type.
Title tags and H1s missing, duplicated, or rewritten. Canonical tags removed from theme.liquid or emitted twice.
Product and BreadcrumbList markup output by the theme and an SEO app at the same time.
Product cards switching from /products/ URLs to collection-aware paths after a theme update.
Prices, descriptions, or links that appear only after JavaScript runs, plus unexpected changes to meta robots, hreflang, or pagination markup.
Scripts, snippets, and injected markup that remain after an app is removed. These may slow LCP without causing an indexing defect, so separate performance regressions from SEO regressions.
Test on an unpublished theme preview before publishing to catch most of these early. Release workflow: Shopify SEO checks after a theme update.
Migration QA
Moving from WooCommerce, Magento (Adobe Commerce), BigCommerce, or a custom platform changes almost every URL, because Shopify enforces fixed prefixes such as /products/, /collections/, /pages/, and /blogs/. Treat the migration as an audit with three checkpoints.
Crawl the old store, export URLs with traffic or backlinks, and map each old URL to its Shopify destination.
Record: status codes, canonical targets, titles, and the old-to-new URL map.
Import the redirect CSV, test redirects for each page type, and check destination status codes, canonicals, sitemap output, and key templates.
Record: redirect test results and any failed mappings.
Crawl the new store, compare old and new URL inventories, investigate unexpected 404s and redirects, and watch Search Console indexing.
Record: before-and-after crawl comparison and indexing trends.
Matching URL counts do not prove a migration worked. A redirect can resolve with a 200 on the wrong product. Full process: Shopify SEO migration checklist.
Templates
On Shopify, most on-page defects come from shared templates, not individual pages. The goal is to tell a one-off content gap from a template defect affecting hundreds of products.
Find missing or duplicate title tags, meta descriptions, and H1s, including Liquid title variables that make every variant read the same.
Flag product pages missing descriptions, specifications, size or material details, and alt text on primary product images.
Check that price, priceCurrency, and availability match the visible page, and that only one Product entity exists per page.
Validate BreadcrumbList markup and confirm SKU, GTIN, and brand values are present and consistent.
Group findings by template. If 400 products share the same missing meta description, fix the product template once rather than editing 400 products.
Rendering
This part of the audit confirms that crawlers receive the content you think they receive. Review Core Web Vitals (LCP, INP, CLS) by page type and device, and compare them before and after theme releases and app installs, since app scripts are a frequent cause of regressions.
For deeper coverage, see JavaScript SEO and the technical SEO course.
Workflow
Priority depends on four factors: how many URLs are affected, how commercially important they are, how severe the defect is, and whether a shared template keeps spreading it.
| Priority | Example | Next action |
|---|---|---|
| Critical | Best-selling product pages return 404 or are accidentally noindexed | Investigate and correct immediately |
| High | A theme update adds duplicate canonicals across the product template | Fix the template and recrawl affected URLs |
| High | Migration redirects send valuable old URLs to irrelevant destinations | Correct the mapping and validate each destination |
| Medium | Hundreds of product pages share duplicate titles | Fix the title template with a scalable pattern |
| Low | A few low-value images lack descriptive alt text | Schedule based on accessibility and search value |
Crawl URLs, status codes, metadata, canonicals, structured data, and internal links.
Record the affected templates, URLs, and intended outcome.
Check which issues disappeared, which persisted, and which appeared for the first time.
Verify the fix, then keep the new crawl as the next baseline.
For each issue, log the first detection date, affected URLs, responsible team, fix applied, and verification result.
Ongoing QA
Run scheduled crawls weekly or monthly depending on catalog size, plus an extra crawl after each of these events. Crawl comparison does not prove ranking gains on its own, so pair it with Search Console and analytics data.
FAQ
Run a full audit at least quarterly, with lighter scheduled crawls between them and an extra crawl after every theme, app, catalog, or URL change.
Yes, by default. Collection-aware product URLs canonicalize to /products/ URLs. Custom themes and apps can still remove, duplicate, or override those tags.
Shopify serves each product under /products/ and under every collection it belongs to, plus variant parameters. It becomes a problem when internal links point to non-canonical versions.
Yes. Create a robots.txt.liquid template in your theme. Edit carefully, because a wrong rule can block collections or products from being crawled.
Check for leftover scripts, snippets, and app embeds, duplicate or orphaned structured data, and any change to titles, canonicals, or page speed.
Shopify SEO problems rarely come from a single product. They come from templates, apps, catalog changes, and migrations, so the reliable check is a full crawl before and after each change. SiteAuditLint runs that crawl from your own computer and keeps the history for comparison.
Free version audits up to 100 URLs per crawl. Pro adds audit history and comparison.
Keep going
Start with the guide that matches your problem, then use the technical SEO material for the details behind each check.
Shopify guides
Technical SEO
In SiteAuditLint
Crawl your Shopify store, review issues by template, and compare each crawl with the last one.