How to Update a Shopify Theme Without Losing Customization
Shopify theme customization breaks on update because Shopify only merges base files. Here's how to update without losing your edits.

Shopify theme updates apply only to the base theme files and skip every file you have edited. Your shopify theme customization is not merged into the new version; it stays on your old copy and has to be re-applied by hand. The safe path is to duplicate your live theme before any update, list which files carry custom code, and move new edits into separate custom.css, custom.js, or Custom Liquid sections that survive the next release.
Daniel runs a small vintage record reissue store on Shopify Basic. He last updated his Dawn theme in early 2024. Since then, three minor releases have shipped, plus a major version that restructured class names. He has eleven small Liquid edits and a stack of CSS overrides he can no longer remember adding. Last month he clicked Update on the live theme, watched his product card layout collapse, and rolled back. He has not tried again. He is not alone, and his fear is not paranoia.
Why shopify theme customization breaks on update
Shopify's update mechanism applies a clean diff to the base theme files but does not merge custom code. Any file you have edited - a .liquid template, a CSS asset, a JS file - is flagged as a conflict and excluded from the update. Shopify's own warning makes this explicit: "Your code changes won't be included because one or more changes conflict with the update." Most merchants read that, see the risk, and decide not to proceed.
The skip compounds. A merchant who made ten small edits in year one wakes up in year three to find they are eight versions behind, with no clear way to catch up. One r/shopify thread from March 2026 had a merchant openly asking what to do after running 7-8 versions behind on Broadcast theme. Another commenter on a separate thread had not updated Dawn in 12 years. A third said it would take a month to redo the code edits and they would never bother. These are not extreme cases. They are the median.
The second pattern hits merchants who never touched code. Even a clean install can break on update if Shopify ships a regression in the theme itself. The Horizon 3.5.0 release in March 2026 wiped color schemes, logos, and font settings for stores that had made zero code edits. A shopify theme check run against the new version returned 181 translation key errors that did not exist on 3.4.0. Shopify support's response on March 20 was to wait for 3.5.1, which arrived on March 30. That experience is part of why so much update advice is now defensive: even when you have done nothing wrong, the update still might not behave.
What Shopify actually does with your custom code during an update
It does nothing with it. The update routine looks at the base theme files in the latest release and overwrites your local copies, but only where your version matches the previous baseline. Where your local file diverges - because you added a Liquid block, changed a class name, or rewrote a section - the routine refuses to touch it. The new feature, the new layout, the new accessibility fix from upstream does not land in your divergent file. Your old code stays exactly as it was.
That sounds harmless until you notice the consequence: you end up running a Frankenstein theme. Your modified files sit at year-old code while the rest of your theme moves forward. That is when shopify theme customization quietly stops working. The new section depends on a class name your modified template no longer references. Your old Liquid loop expects a setting that the new schema removed. You see broken layout on the home page and you cannot tell whether your old custom code or the new base code is at fault.
There is one edge case worth knowing. Theme settings managed through the Theme Editor (font choices, color schemes, header layout) are stored as JSON in settings_data.json. Some carry across updates if the new schema still recognizes the keys. Major version bumps frequently rename or restructure those keys, and saved settings are silently dropped. That is exactly what happened to Horizon 3.5.0 users who lost their color scheme controls.
How do I update my Shopify theme without losing customization?
The safe sequence is below. It assumes you are one or two versions behind, not eight. The catch-up case has its own path further down.
- Duplicate the live theme first. In Shopify admin, go to Online Store > Themes. On your active theme, click the three-dot menu and choose Duplicate. The duplicate is your rollback. Keep it untouched until you confirm the update worked.
- List your modified files. Open the theme code editor on your live theme. Files that you or a developer have edited carry a small black dot next to the filename. Screenshot the list. These are the files where your custom code lives. If the list is long enough that you do not trust a screenshot, copy the contents of each file into a separate document.
- Read the release notes. A patch release (3.5.0 to 3.5.1) is usually narrowly scoped: a few bug fixes, no structural changes. A minor release (3.4.0 to 3.5.0) often introduces new sections or settings. A major release (Dawn 6.x to 7.x, Horizon 2.x to 3.x) restructures HTML, renames CSS classes, and may invalidate selectors that your custom CSS targets.
- Update the duplicate, not the live theme. Click Update on the duplicate, never the live one. Preview the duplicate. Walk the home page, a product page, the cart, and the checkout entry point. If everything renders, you have a working baseline.
- Re-apply your edits to the updated duplicate. Copy each modified file's custom code into the corresponding file on the duplicate, one at a time. After each one, preview again. If the page breaks, you know which edit caused the problem.
- Publish the duplicate when it is clean. Use the three-dot menu to Publish. Your old live theme stays as a duplicate for at least two weeks. Do not delete it. If something subtle breaks two days later, that is your rollback.
This is slower than clicking Update on the live theme, but it is the only sequence that gives you a clean rollback at every stage. A merchant in our knowledge base went from a five-hour stress-update on a Tuesday to a thirty-minute scheduled update on a Sunday morning by adopting this workflow as a habit.
What if my theme is already five or more versions behind?
The merge approach gets exponentially harder the farther behind you fall. By version five, the structural drift is large enough that copying old custom code into the new theme will introduce subtle layout bugs you will not catch until a customer hits them. The community-consensus answer in that case is to start fresh: install the latest version of your theme as a brand new theme, then re-apply your customizations one at a time on the clean base.
Starting fresh sounds violent but it is usually faster than merging. It forces you to look at each customization and decide whether it is still needed. A coupon banner you added in 2022 may now be a built-in section. A custom variant picker may have been replaced by a native one. Roughly thirty to forty percent of the customizations on a multi-year-old theme become redundant by the time you start over, and that subset costs nothing to drop.
If you lost meaningful work in a Horizon 3.5.0 update specifically, update from 3.5.0 to 3.5.1 (released March 30, 2026) before doing anything else. Some color and font settings can be restored manually; if you had a logo configured through the Theme Editor and it disappeared, re-upload it under Customize > Theme Settings. Open a Shopify support ticket referencing the 3.5.0 known-issue list; in some cases Shopify can restore settings from a backup tied to your store.
If your theme has been heavily modified by a previous developer and you have no documented changelog, the cost of redoing edits blindly is hard to estimate. A help1 expert can audit the modified files in one session, tell you which edits are still doing real work, and give you a re-apply list before you click Update.
How do I prevent customization loss on future Shopify theme updates?
The merchants who update every release without fear all share one workflow: their custom code lives outside the base theme files. Specifically, here is what survives an update and what does not.
| Where the edit lives | Survives update? | Notes |
|---|---|---|
theme.liquid or any base section file | No | Flagged as conflict, excluded from update |
| Custom CSS box in Customize | Usually | Stored in theme settings, often carries over |
assets/custom.css (a file you create) | Yes | Not part of base theme, untouched by update |
assets/custom.js (a file you create) | Yes | Same as above |
| Custom Liquid section block | Usually | Section blocks survive most updates |
| Theme Editor settings | Sometimes | Depends on whether new schema keeps the same keys |
Hardcoded edit to product.liquid | No | Flagged as conflict, excluded from update |
The pattern is simple. Anything that lives in a file you created, or in a Custom Liquid block managed through the editor, survives the update. Anything that lives in a file Shopify owns does not.
Three concrete moves keep your customizations safe across updates:
- Add a single
assets/custom.csslinked fromtheme.liquidwith one line:{{ 'custom.css' | asset_url | stylesheet_tag }}. Put every CSS override in this one file. Yes, that one line intheme.liquidis itself a conflict, but it is a single thirty-second re-add, not a hundred-line CSS file you re-port. - Add a single
assets/custom.jsloaded near the bottom oftheme.liquidwith{{ 'custom.js' | asset_url | script_tag }}. Same pattern: one tiny conflict to re-add, but every script override survives. - For structural HTML additions, use the Custom Liquid section (Customize > Add Section > Custom Liquid). The section is stored as theme settings, not as a file edit, and survives most updates.
Add a tiny header comment at the top of every file you do touch, like /* CUSTOM 2026-05-02 - sticky add-to-cart button */. The next time you update, you will know in five seconds why a line is there. If you commit to this pattern starting today, your next update is a five-minute job instead of a five-hour one. The help1 store scanner flags which theme files have been modified, so you have a starting list of where your existing shopify theme customization lives. Once you know the list, the move to non-destructive overrides is mostly mechanical.
If you use a page builder app (GemPages, PageFly, Replo) on top of your theme, the rules above still apply to the underlying theme files. The page builder's own data lives in app metafields and survives uninstall and theme updates, but the speed cost is a separate problem; see our guide on how to speed up Shopify pages built with page builders if your post-update mobile score is suspiciously low.
Open Online Store > Themes, click your active theme's three-dot menu, and click Duplicate. That duplicate is your safety net. With that done, spend the rest of the afternoon documenting which files have the small black dot next to them and decide whether to start the move to custom.css and custom.js today or after the next release. If the modified file list is longer than ten and you do not remember what most of them do, that is the moment to bring in an expert before clicking Update.
Still stuck? Talk to an expert.
Our vetted Shopify experts can fix this issue for you in a live session. $39 per session. Your first 15 minutes are free.