A Practical Shopify Theme Rebuild Checklist
What to inventory in an existing Shopify theme before rebuilding it, what to deliberately leave behind, and how to release the new one without losing what worked.
Every Shopify theme that has been live for a few years develops a section of code nobody wants to touch.
It usually started as a small request. Then a campaign needed a variation, so a conditional was added. Then an app needed a snippet inserted in a specific place. Then someone fixed a bug on mobile with a rule that only applies below 768 pixels for logged-in customers. Nobody wrote any of it down, and the person who understood it works somewhere else now.
At some point the cost of adding one more thing exceeds the cost of rebuilding. Knowing when you have crossed that line — and what to carry across when you do — is most of the work.
Rebuild or extend?
This is the first decision and the one most often made on instinct. A useful test: can a developer predict, before making a change, what else that change will affect?
If yes, extend. A theme with clear structure and a handful of customizations is usually cheaper and lower-risk to build on than to replace, even if it looks tired. Appearance is a redesign problem, and redesigns can be done inside a sound structure.
If no — if every change requires archaeology, if the same logic appears in four places with small differences, if there is CSS nobody dares delete — then the theme has stopped being an asset. Each new request is priced against the risk of breaking something unrelated, and that price only goes up.
Two further signals point to rebuild:
- The section model is too rigid for how you merchandise now. If your team files a developer ticket for every campaign, the theme is constraining the business, not supporting it.
- The theme is a heavily modified version of a vendor theme. Vendor updates become effectively impossible to apply, so you are maintaining a fork without the benefits of owning one.
The inventory
This is the unglamorous part that determines whether the rebuild goes smoothly. Do it before scoping, not after.
Templates and sections
List every template and every section, then record for each one: where it is used, whether it is used at all, and what its settings actually control. Two things always surface. Sections built for a campaign three years ago that nobody removed. And sections that exist in two near-identical variants because it was faster to duplicate than to parameterize.
Both are useful findings. The first is deletion; the second tells you what the new section library needs to handle with settings rather than duplication.
Metafields and structured content
Metafields are where the important, invisible content lives — specification tables, care instructions, size guides, ingredient lists, delivery rules. They are attached to products and collections rather than to the theme, so they survive a rebuild. What does not survive is the rendering: the new theme has to know they exist and where to display them.
Catalogue every metafield in use, what it holds, and which templates render it. This list is invariably longer than anyone expects.
Custom code
Find everything added outside the theme's original structure:
- Snippets inserted for apps, tracking, or one-off features
- Scripts in
theme.liquidthat nobody can attribute - Inline styles overriding the design system
- Anything referencing an external URL, especially one on a domain you no longer control
For each item, answer one question: what breaks if this is gone? If nobody knows, that is the finding. Some of it will be dead code from apps uninstalled years ago.
App dependencies
This is the most fragile category. Apps interact with themes in several ways, and only some are robust:
- Theme app extensions — the modern approach, designed to survive theme changes
- Injected script tags — usually survive, but may target markup that no longer exists
- Manual snippet installs — do not carry across at all and must be reinstalled deliberately
- Apps that depend on specific markup or CSS class names — the dangerous ones, because nothing warns you when the element they expect is gone
Test every app in the new theme before release. Reviews, subscriptions, search, and upsell apps are the usual sources of trouble, because their output sits inside your templates.
Analytics and tracking
Every tag, event, and conversion trigger. Ecommerce tracking often depends on specific template markup, and a rebuild silently breaks it. Nobody notices for a month, and by then you have a hole in your data that cannot be backfilled.
Write down each event, where it fires, and how to verify it. Then verify it before launch.
URLs
A theme rebuild should not change URLs. Confirm that it does not. If any template's URL structure is changing, that is a redirect workstream, and it needs the same care as a platform migration.
What to deliberately leave behind
A rebuild is the cheapest opportunity you will get to remove things. Take it seriously — carrying dead weight forward means paying to rebuild, test, and maintain code that serves nobody.
Reasonable candidates:
- Sections used once, for a campaign that ended
- Settings nobody has changed since launch
- Support for browsers your analytics say nobody uses
- Fallbacks for apps you removed
- Duplicate variants of the same section, replaced by one section with proper settings
- Custom code whose purpose nobody can explain and whose removal breaks nothing in testing
The discipline is to decide each case explicitly and write down the decision. "We removed the mega-menu variant because it was used on one collection" is a defensible note. Silent deletion is how you end up reinstating something in a panic.
Designing the section library
The difference between a theme that helps a team and one that fights it is almost entirely in how sections are designed.
Sections should compose, not proliferate. A well-designed section handles a family of use cases through its settings. A badly designed one handles exactly one, so every new requirement means new code. If your library is heading toward thirty sections, most are probably variants that should be settings.
Constrain the settings. Full freedom sounds generous and produces off-brand pages. Offer a defined set of choices — three heading sizes, not a pixel input; four background options from the palette, not a colour picker. The constraint is the feature: it means anything the team assembles still looks like the brand.
Name things for what they do. "Featured collection with intro text" tells a merchandiser what they are choosing. "Section 4" tells them nothing, and they will pick by trial and error.
Ship presets. A section with a sensible default configuration is usable immediately. One that renders empty until eight fields are filled in gets abandoned.
Document as you build. What each section is for, which settings are safe to change, and which combinations are not supported. This is what makes the theme survivable after the build team has moved on.
Performance decisions to make during the build
Performance is dramatically cheaper to get right while writing markup than to retrofit afterwards.
- Image handling — correct sizes and formats, explicit dimensions to prevent layout shift, and lazy loading below the fold
- Script loading — defer what is not needed for first render, and be deliberate about what runs on every page rather than only where it is used
- Font strategy — a loading approach that avoids invisible text, and a limit on how many weights you actually ship
- Above-the-fold priority — the largest element in the initial viewport should be one of the first things requested, not something discovered late
The metrics worth knowing are Google's Core Web Vitals: Largest Contentful Paint, which should be at or under 2.5 seconds; Interaction to Next Paint, at or under 200 milliseconds; and Cumulative Layout Shift, at or under 0.1. These are assessed on the 75th percentile of real-user data rather than on lab tests, which is why a good Lighthouse score does not always match what Search Console reports.
Carrying content and merchandising across
The theme is code. The content sitting inside it is not, and it does not move by itself.
When a page is built from theme sections, the content of those sections — the headings, the chosen products, the image selections, the ordering — is stored against the section instances in that theme. Install a new theme and those instances do not exist. The pages come across empty unless someone rebuilds them.
For a store with a handful of pages this is an afternoon. For one with dozens of landing pages, campaign templates, and localized variants, it is a workstream that needs naming and scheduling.
Work through it in this order:
- List every page assembled from sections, not just the obvious templates. Campaign pages and seasonal landing pages are the ones that get forgotten.
- Decide which are still worth having. A rebuild is a good moment to retire pages that no longer earn their place, as long as you check traffic and links first.
- Rebuild the survivors in the new theme, ideally before launch rather than after, so nothing goes live half-populated.
- Check metafield rendering on real records, not on a sample product created for testing. Test products rarely have the awkward data that reveals problems.
Assign this to someone by name. It sits between design and development, which means it is the task most likely to be assumed to belong to the other team.
How to test a rebuilt theme
Testing a theme is broader than clicking through pages. Work across four dimensions rather than one long list.
By template. Home, collection, product, cart, search, account, blog, and every content page. For each, check a normal case and an awkward one: the product with one image and no description, the collection with four items, the customer with no order history.
By device and input. Real phones on ordinary connections, tablets, desktop, and keyboard-only navigation. Emulators miss touch target problems and sticky-element behaviour that only shows up on device.
By journey. Complete a purchase end to end with a real payment method. Then do it as a returning customer, with a discount code, with an item that goes out of stock mid-session, and on mobile. Journeys expose problems that page-level testing does not.
By integration. Every app that touches the storefront, every analytics event, every third-party embed. This is where rebuilds most often break silently, because nothing errors — the tracking simply stops firing.
The release plan
Do not switch everything at once if you can avoid it.
Release by template. Homepage, then collection, then product, then cart. Each release is a smaller change with a clearer signal — if something moves, you know what caused it.
Keep the old theme available. Shopify's theme library means the previous version stays one click away. That is your rollback, and it is worth confirming it works before you need it.
Test on real devices, not only in a browser's device emulator. Mid-range phones on ordinary connections are where storefront problems actually live.
Run a pre-launch pass covering checkout end to end, every app that touches the storefront, analytics events firing correctly, metafield content rendering, and internal links resolving.
Watch the first week. Search behaviour, support tickets, 404 rates, and conversion by device. A cluster of tickets about the same thing is the fastest diagnostic you have.
The short version
A theme rebuild is mostly an exercise in knowing what you already have. The building is straightforward once the inventory is done; it is the undocumented metafield, the app that depends on a class name, and the analytics event nobody remembered that turn a clean project into a difficult launch week.
Inventory first, decide what to leave behind on purpose, design sections your team can actually use, and release in pieces so you can see what each change did.
If you are looking at a theme that has become difficult to change and want a view on whether it is a rebuild or an extension, send us the store — that assessment is usually a short conversation and it is worth having before the budget is set.