Guide · Shopify SEO

Technical SEO checklist

This is the technical layer, not the content one. A separate Shopify SEO checklist covers titles, copy and internal links. This one is about whether Google can crawl your pages, index the right ones, render your JavaScript, load fast enough to keep them, and read your structured data. Get the technical foundation wrong and the best copy in the world sits in a page Google never trusts.

Work through it in order. Crawl before index, index before speed, speed before schema. Each check below is one thing to look at, why it matters, and how to fix it on a real store or an ERP catalogue where you don't always control the raw HTML. Run it as a technical SEO audit once, then re-run the top half every quarter.

1. Crawlability: can Google reach the page at all

Start with robots.txt at yourdomain.com/robots.txt. One stray Disallow line can wall off a whole section, and it happens more than you'd think, usually a staging rule that shipped to production. Check nothing important is blocked, and that you're not blocking the CSS and JS Google needs to render the page. Blocking those makes Google see a broken layout and score it worse.

Then check your crawl paths. Every page that matters should be reachable by following links from the homepage in a few clicks. Orphan pages, ones with no internal links pointing at them, get crawled rarely or never. On ERP catalogues this bites hard: a product might only be reachable through a search box Google can't use. Make sure category and product pages link to each other and sit in the sitemap.

Watch your crawl budget on big catalogues. Faceted navigation, filter and sort parameters like ?colour=blue&sort=price, can spawn thousands of near-duplicate URLs that eat the crawler's time before it reaches your real pages. Block the useless parameter combinations in robots.txt or handle them with canonicals, and don't let filters generate crawlable links to junk URLs.

2. Indexation: is the right page in the index, and only the right page

Open Google Search Console and look at the Pages report. It splits your URLs into indexed and not indexed, with a reason for each. Two reasons matter most. 'Crawled, currently not indexed' means Google saw the page and chose not to keep it, usually thin or near-duplicate content. 'Discovered, currently not indexed' means it knows the URL exists but hasn't bothered crawling it yet, often a crawl-budget signal.

Do a coverage sense-check with site:yourdomain.com in Google. If it reports far more pages than you actually sell, you've got index bloat: tag pages, filter URLs, internal search results, or old products still live. Bloat dilutes the crawler's attention across pages you don't want ranking. Noindex the ones that shouldn't be there, and let them drop out.

Check that your noindex and canonical signals agree with each other. A page that's canonicalised to itself but also carries a noindex tag sends Google a contradiction, and it'll pick one, rarely the one you meant. Inspect a few key URLs in Search Console's URL Inspection tool to see exactly how Google reads each page: indexed or not, which canonical it chose, and whether the rendered version matches what you shipped.

3. Canonicals and duplicates

The canonical tag tells Google which version of a page is the master when several URLs show similar content. Get it wrong and you tell Google to ignore the page you want ranked. The classic ERP failure is no canonical at all, so every parameter variant of a product looks like a separate page competing with itself. The Shopify version is products living at two URLs, /products/x and /collections/y/products/x, splitting their strength.

Check each important page points its canonical at the clean, preferred URL, and that the canonical URL actually returns a 200, not a redirect or a 404. A canonical pointing at a dead or redirected URL is worse than none. Watch for absolute versus relative and http versus https mismatches too; the canonical should be the exact final URL you want indexed.

Also settle the site-wide duplicates: pick www or non-www and http or https, then 301 everything else to the one you chose. Trailing slashes, uppercase in URLs, and index.html endings all create duplicate paths if you let them resolve two ways. One URL per page, everything else redirecting to it.

4. Site speed and Core Web Vitals, including INP

Google measures three field metrics from real visitors. LCP (Largest Contentful Paint) is how long your main content takes to show; aim under 2.5 seconds. CLS (Cumulative Layout Shift) is how much the page jumps around as it loads; aim under 0.1. INP (Interaction to Next Paint) replaced First Input Delay in 2024 and measures how quickly the page responds when someone taps or clicks; aim under 200 milliseconds.

INP is the one most stores now fail, and it's usually JavaScript. Heavy theme apps, chat widgets, review popups and tracking scripts all fight for the main thread, so a tap on 'add to basket' feels laggy. Audit your installed apps, remove the ones you don't use, and defer the scripts that don't need to run on first load. On Shopify, every app you uninstall but leave script tags behind keeps costing you here.

For LCP, the usual culprits are unoptimised hero images and slow server response. Serve images in WebP at the size they're displayed, not a 3000px original scaled down in the browser, and lazy-load anything below the fold. For CLS, set explicit width and height on images and reserve space for banners and ad slots so nothing shoves the content down after the user's eyes have landed. Read field data in the Core Web Vitals report in Search Console, not just lab tools, because field is what Google actually scores.

5. XML sitemaps and robots.txt hygiene

Your XML sitemap should list only canonical, indexable, 200-status URLs, the pages you actually want ranked. A sitemap stuffed with redirects, 404s or noindexed pages teaches Google your sitemap is unreliable, and it leans on it less. Shopify generates /sitemap.xml automatically; the catch is it includes everything, so lean on canonicals and noindex to keep the low-value stuff out of the index even though it's listed.

Submit the sitemap in Search Console and check the Sitemaps report for the discovered-versus-indexed gap. A big gap means Google is finding your URLs but declining to index a lot of them, which points back to the thin-content and duplicate checks above. Reference the sitemap URL in robots.txt too, with a Sitemap: line, so any crawler can find it.

Keep robots.txt minimal and deliberate. It's for controlling crawling, not indexing; a page blocked in robots.txt can still get indexed with no snippet if other sites link to it. If you want a page out of the index, let Google crawl it and use a noindex tag instead of blocking it. Blocking and noindexing the same page cancels out, because Google can't see the noindex on a page it's not allowed to crawl.

6. Structured data and JavaScript rendering

Structured data (schema markup in JSON-LD) tells Google what a page is in a format it trusts, and it's what earns rich results: star ratings, prices and stock status in the listing. For a store, Product schema with price, availability and aggregateRating is the priority, plus BreadcrumbList and Organization. Validate it in Google's Rich Results Test, and make sure the marked-up values match what's visible on the page, or Google ignores it and may flag it as spammy.

The JavaScript question is simple to ask and easy to get wrong: does your important content exist in the raw HTML, or does it only appear after JavaScript runs? Google can render JS, but it does it in a second, slower pass, and it doesn't always finish. If your prices, product copy or links only load client-side, some of it may never get indexed. Test it by viewing the page source (not the inspector, the actual source) and searching for your product name and price. If they're not there, they're JS-injected.

Right-click and choose View Source, or fetch the URL with JavaScript off, then check for your key content. If it's missing, push for server-side rendering or a pre-rendered version of those pages. This is where headless and heavily app-driven Shopify themes trip up, and where some ERP catalogues that looked broken actually pass fine, because their product pages are server-rendered with the title, meta and body all in the raw HTML. Test before you assume either way.

7. Redirects and mobile

Audit your redirects. Every permanent move should be a single 301 to the final destination, not a chain. Redirect chains (A to B to C) bleed a little authority at each hop and slow the crawl; redirect loops break the page entirely. This piles up on stores that migrate platforms or restructure collections. Crawl the site with a tool and fix any chain so it points straight to the end URL, and 301 old product URLs to the nearest relevant page instead of dumping visitors on a 404.

Kill soft 404s while you're there. A discontinued product that returns a 200 with an 'out of stock, nothing here' page tells Google the URL is fine when it's really dead, so it stays in the index as a weak page. Either restock it, 301 it to a live alternative, or return a proper 404 or 410.

Google indexes the mobile version of your site, so mobile is the version that counts. Check the mobile page shows the same content and links as desktop, not a stripped-down cut, because anything hidden on mobile is effectively hidden from Google. Confirm tap targets aren't cramped, text is readable without zooming, and nothing important sits behind a hover that a finger can't trigger.

Common questions

What's the difference between a technical SEO checklist and an on-page SEO checklist?

A technical SEO checklist covers whether search engines can crawl, render, index and trust your pages: robots.txt, canonicals, sitemaps, site speed, Core Web Vitals, structured data and redirects. An on-page SEO checklist covers what's on the page for humans and rankings: titles, meta descriptions, headings, copy, keywords and internal links. You need both, but technical comes first, because on-page work on a page Google can't crawl or index is wasted.

What are the Core Web Vitals I should check in a technical SEO audit?

Three field metrics. LCP (Largest Contentful Paint), how fast the main content loads, target under 2.5 seconds. CLS (Cumulative Layout Shift), how much the layout jumps as it loads, target under 0.1. INP (Interaction to Next Paint), how quickly the page responds to a tap or click, target under 200 milliseconds. INP replaced First Input Delay in 2024 and is the one most stores fail, usually because of heavy JavaScript from apps and third-party scripts.

How do I know if JavaScript is hurting my SEO?

View the raw page source (right-click, View Source, not the inspector) and search for your key content, such as a product name and price. If it's there, it's in the HTML and safe. If it only appears in the rendered inspector view but not the source, it's injected by JavaScript, which Google renders on a slower second pass that doesn't always complete, so some of that content may never get indexed. The fix is server-side rendering or a pre-rendered version of those pages.

Free Revenue Snapshot

Not sure which one's costing you most?

Technical SEO isn't a one-off. Crawlability, indexation and canonicals drift every time you add products, install an app or restructure a collection, and Core Web Vitals slip the moment a new script lands. Run this checklist top to bottom once to clear the backlog, then re-run the crawl, index and speed checks each quarter. Fix the foundation and every bit of content you publish afterwards gets a fair hearing.

Get your free Revenue Snapshot