Home›Shopify SEO audit›SEO after a theme update

Shopify · Theme update workflow

Shopify SEO After a Theme Update: Find and Fix Technical Regressions

A Shopify theme update, Liquid edit or app removal can break SEO without changing how the store looks. Crawl before the change, crawl after it, and compare the two audits to catch lost canonicals, missing H1s, duplicate schema and leftover app scripts.

3 change sources6 regression patterns5 step comparison24 item checklist

Shopify · Theme updates, Liquid edits and app removals

A Shopify storefront can look perfect after a theme update while its rendered HTML has quietly changed underneath. Titles, canonical tags, meta robots directives, H1s, JSON-LD and internal links all come from Liquid templates, and one edit to a shared file can change them on hundreds of URLs at once.

This page is a post-change SEO QA workflow. It assumes the change has already happened, a theme version update, a Liquid code edit or an app uninstall, and shows how to prove what changed, find the regressions and sign off the release with evidence. The method is the same throughout: crawl before, crawl after, and compare by URL and by template. For the general post-deploy method on any stack, see SEO QA.

Why Shopify theme changes can break SEO

A Shopify theme is not just a visual skin. It controls the <head> output, heading structure, structured data, pagination and most of the internal link graph. Any change to theme code is also a change to what Googlebot crawls and indexes.

Change typeWhat breaksWhy it's easy to miss
Theme version updateCustom Liquid edits are not carried over: title logic, canonical rules, noindex conditions, hreflang tagsTheme editor settings migrate, so the store looks the same
Liquid edit to a shared fileOne change to theme.liquid or a snippet reaches every product, collection and search template that renders itThe edited page looks fine; the others are never opened
App removalScript tags, snippets and render calls stay in theme files; old Product or Review schema keeps printingShopify says the app is uninstalled
App embeds on a new themeApp blocks land in a different section, embeds are disabled by default, late widgets cause layout shiftsThe app still shows as installed and active

The common thread: the theme editor and a quick visual check hide almost all of these. Only a crawl of the published storefront sees what Googlebot sees.

Establish an SEO baseline before changing the theme

You cannot detect a regression without a record of what correct looked like. The baseline is the most valuable step in this workflow, and it takes minutes if you do it before you click Publish.

  • Crawl the current published storefront. Crawl the live theme, not the preview of the new one. Turn on JavaScript Rendering if your theme or apps inject content client side.
  • Record the head and status fields. For every URL, capture the title, meta description, H1 count and text, canonical target, meta robots and X-Robots-Tag values, and the HTTP status code.
  • Record links, images and structured data. Capture collection to product links, pagination links, image alt text and loading attributes, and every JSON-LD block by type. Note how many Product, BreadcrumbList, Organization and Review entities each template outputs.
  • Save the crawl and pick priority URLs. Keep the crawl as a dated snapshot, then list the URLs you will check by hand within minutes of release.

URLs to inspect first: / homepage, two or three high-revenue /products/ URLs, one product on each alternate template, a large paginated /collections/ URL, one /pages/ URL, one /blogs/ article, /search, /sitemap.xml and robots.txt.

Audit SEO after publishing a Shopify theme update

Start with this matrix. It links each type of change to the regression it can cause and the test that catches it. These are possible failure modes, not guaranteed outcomes.

Change madePotential regressionValidation
Theme updatedCustom metadata or Liquid output changesCompare rendered HTML and crawl results
theme.liquid editedCanonical, title or robots output changes site wideTest representative URLs across templates
Product snippet editedH1, price, image or Product schema disappearsInspect product HTML and validate schema
SEO or review app removedObsolete scripts or duplicate schema remainInspect source, Network requests and JSON-LD
App embed disabledReviews, widgets or other content disappearsCheck the rendered page and intended functionality
Collection template changedProduct links or pagination disappearCrawl collection pages and inspect link discovery

Then check the elements a theme change usually touches, one URL per template first, since theme changes break templates, not single products.

ElementExpected after a clean update
Status codeSame as before, no new 404 or 5xx
Meta robotsNo new noindex on products, collections, pages or articles
Title tagOne per page, same text and store name suffix
Canonical/collections/x/products/y canonicalizes to /products/y, as before
H1Exactly one, not demoted to an H2 or doubled by a new header section
PaginationCrawlable ?page=2 links still present, not replaced by a JavaScript load more button
Product linksCollection grids still link to canonical product URLs
Structured dataOne Product entity per product page, offers and aggregateRating still present
ImagesMain product image not lazy loaded, alt text and srcset still output
Mobile renderingTabs and accordions render their content, nothing hidden by failed JavaScript

Check Shopify Liquid edits for SEO regressions

Liquid is where most Shopify SEO regressions start. Themes build the same output in different ways, so treat the file names below as common starting points, not fixed rules.

  • Inspect layout/theme.liquid. It wraps nearly every page, and in most themes it, or a meta-tags snippet it renders, outputs the title, description, canonical and social tags. Diff the old and new versions first.
  • Review the JSON templates. Open product.json, collection.json, page.json and article.json, note which sections they load, and check those section files for heading tags and schema output.
  • Trace shared snippets and sections. Search for every {% render 'snippet-name' %} pointing to an edited snippet. A change to card-product.liquid reaches collection grids, search results, recommendations and featured collections.
  • Check conditional logic. Conditions like {% if template contains 'collection' %} decide when tags print. A misplaced endif can drop the canonical on one template or print a second H1 on another. Test tagged and paginated collection URLs too.
  • Verify canonical, title and robots output. Confirm the head still prints {{ canonical_url }} and that the title uses page_title with the expected page number and tag suffixes. If you edit robots.txt.liquid, check it survived.
  • Confirm custom code survived the update. Keep a list of every customization: schema additions, hreflang, noindex rules, breadcrumb markup. After a version update, search the new theme for each one and reapply what is missing.

Worked example: after an update, the crawl shows 412 product URLs with no H1.

  1. Identify the affected URLs. Export them from the missing H1 issue in the crawl.
  2. Group them by template. All 412 use the default product.json template. Products on product.bundle.json are fine.
  3. Inspect the shared source. The new main-product section prints the title inside a paragraph with a product__title class instead of an H1.
  4. Compare against the baseline. The baseline crawl shows the H1 matched the product title before the update.
  5. Fix once, recrawl the group. Change the section, then recrawl the 412 URLs to confirm all pass.

One shared file caused the whole problem. Grouping by template turns 412 issues into one fix.

Find leftover scripts after uninstalling Shopify apps

Shopify's documentation notes that removing an app may leave code it inserted into theme files. That orphaned code costs load time, can throw JavaScript errors and can keep printing schema for data that no longer exists. Shopify's guide to auditing and removing third-party scripts is the official reference.

  1. Identify the obsolete integration. Record the app's name, script domains, snippet file names and any installation notes.
  2. Trace where it loads. Search theme.liquid, sections and snippets for the app name, vendor domain, script_tag filters and render or include calls. Check the theme editor's App embeds panel and empty app block placeholders.
  3. Confirm the browser behavior. Filter the DevTools Network panel by the old vendor domain and reload. Check the Console for 404s on missing assets and for Liquid errors in the page.
  4. Check for duplicates. Switching review or SEO apps is the classic cause of two Product or AggregateRating blocks on one page. Use Custom Source Search to find the old domain or snippet name across every crawled URL.
  5. Remove and validate. Duplicate the theme as a backup, delete the confirmed orphaned code, test the features that depended on it, then rerun the crawl and performance checks.
Before you delete anything: separate obsolete theme-injected code from legitimate app extensions, analytics, consent tools and scripts another integration still needs. When in doubt, remove the code on a duplicate theme and preview it first.

Measure the performance impact of theme and app changes

A new theme can improve rendering while a forgotten app script cancels the gain. Measure both and attribute each change to its source.

  • Compare mobile Core Web Vitals. Test the same priority URLs as the baseline. Compare LCP, INP and CLS lab values first, then watch field data in Search Console over the next 28 days.
  • Find new third-party requests. Any domain missing from the baseline needs an owner and a reason to exist.
  • Check layout shifts and interactions. Late review widgets and announcement bars cause CLS. Test add to cart, variant pickers and filters, since errors from orphaned code can break them.
  • Separate theme from apps. Preview a duplicate theme with app embeds off, then add them back one at a time. If performance is fine without apps, the theme is not the problem.

Run a before and after Shopify SEO comparison

Spot checks catch obvious breaks. A full crawl comparison catches the quiet ones, like a canonical that changed on 3% of collection URLs.

  1. Crawl again with identical settings. Same start URL, rendering mode, user agent and URL limits, or the comparison shows false differences.
  2. Compare the two audits. Open Audit Comparison and review new issues first, then changed values.
  3. Group changes by template. Product, collection, page, article and search. Most real regressions collapse into a handful of template patterns.
  4. Separate intended changes. Mark planned changes, like a new title format, as accepted so only unexpected ones remain.
  5. Prioritize, assign and recrawl. Fix indexability first, then metadata, internal links, structured data and performance. Record the affected template, likely source file and owner, then recrawl to close each issue.
PatternEvery productPoints to main-product or a product snippet in the new theme.
PatternCollections onlyLost links or pagination: the collection template or card-product snippet.
PatternEvery URLPoints to theme.liquid or a meta-tags snippet in the layout.
PatternExtra schema or requestsAppears after an uninstall: leftover app code in theme files.

Before and after example

Baseline crawl/products/runner → 1 Product schema
/products/trail-x → 1 Product schema
Products with one Product entity: 412 / 412
→
After review app swap/products/runner → 2 Product schema
/products/trail-x → 2 Product schema
Products with one Product entity: 0 / 412
Verdict: leftover app code. Every product gained a second Product block from the old review app's snippet. Remove the render call, recrawl, confirm zero difference from the baseline.
0New issues versus the pre-update baseline
0Requests to removed app domains
1Product entity per product page

Downloadable checklist

Tick items as you go, then download the list as CSV for a spreadsheet or Linear ticket, or print it and save as PDF. Your ticks are included in the download.

Shopify theme update checklist0 of 24 checks done
Pre-release checks
Immediate post-release checks
App removal cleanup
Regression fixes and sign-off
Follow-up monitoring in Google Search Console

Frequently asked questions

Can a Shopify theme update affect SEO?

Yes. The theme generates titles, canonicals, robots directives, headings, structured data and internal links. An update can overwrite custom Liquid edits or change how those elements render, even when the store looks the same.

Does uninstalling a Shopify app remove its scripts?

Not always. Apps built on theme app extensions are removed cleanly, but older apps that edited theme code can leave script tags, snippets and render calls behind. Check theme files and browser Network requests after every uninstall.

How do I check whether a Liquid edit broke SEO?

Crawl the store, group affected URLs by template, and inspect the shared Liquid file or snippet behind that template. Compare the rendered HTML with your pre-edit baseline, fix the shared source and recrawl the affected group.

How do I compare Shopify SEO before and after a theme change?

Save a full crawl before publishing, then crawl again after release with identical settings. Compare titles, H1s, canonicals, indexability, status codes, links and schema by URL and template, and separate intended changes from regressions.

Should I crawl my Shopify store after every theme update?

Yes. Check priority URLs right after release, then run a full comparison crawl. Template regressions hit many URLs at once, and a crawl is the only reliable way to see their full scope. Scheduled SEO Audits keep a baseline ready for unplanned changes.