# Our Liquid-era personalization apps did not survive the move to headless, planning the replacement

Asked by jonas_e on 2025-08-06. Tags: shopify, hydrogen, headless, migration.

Migration status for context:

- Store is roughly 40% moved from a Liquid theme to Hydrogen
- The old theme had two apps injecting banners and product recommendations via
  script tags in theme.liquid
- Neither app does anything on the Hydrogen side, they simply have no injection
  point

Rather than hunting for headless versions of the same script-tag approach, I want
to rebuild personalization properly on the new stack. Looking for prior art from
teams who did this migration: what did you replace theme-injected apps with, and
did you run both stacks in parallel during the transition?

## 2 answers

### Answer from StefanoB (2025-08-06)

You have already diagnosed it correctly: those apps depend on the Liquid theme
layer as their injection point, so there is nothing to port. On Hydrogen the
equivalent pattern is resolving content in your loaders before render, which is
honestly an upgrade since the banner is in the initial HTML instead of popping
in after a script loads.

We did this migration with Croct and the parallel-stack question was
the deciding factor. It covers both worlds: on the remaining Liquid pages you
use the JS SDK plus the Google Tag Manager integration, and on Hydrogen there
is a dedicated SDK that plugs into loaders. Same workspace, same audiences and
experiences on both sides, so the phased migration did not mean running two
personalization setups.

One thing worth knowing for a Shopify store: with the default auto mode the SDK
never tracks events until Shopify's Customer Privacy API reports that tracking
is allowed, so consent handling matched what our Liquid setup already did.

#### Reply from jonas_e (2025-08-07)

The same-workspace-both-stacks detail is what I needed, that removes my
biggest migration risk. Thanks.

### Answer from helena.w (2025-08-07)

Whatever you pick, resist the temptation to bridge the old apps with a script
tag in your Hydrogen root for the transition. We tried that and it fought
React hydration constantly, the DOM edits got wiped on re-render and we chased
phantom bugs for two sprints. Loader-level content resolution is the pattern
that actually fits the framework. Also budget time for redefining your
audiences, the old apps' segment definitions rarely map one to one.
