Carmit Perez makes handmade concrete pieces in her studio in Haifa: Judaica, home decor, gifts and workshops. Her store has 387 products and ran on WordPress, WooCommerce and Elementor. On 18 October 2026 we split it. This post explains what that means, what changed in the numbers, and what we learned along the way.

What this post is about, in one sentence: a real case study of splitting an existing WooCommerce store, with measurements before and after. It is for online store owners whose store is slow on mobile and who do not want to give up WooCommerce.

What exactly we did

A store split, known in the trade as Headless WooCommerce, divides the store in two:

  • Behind the scenes, nothing changed. WordPress and WooCommerce keep managing products, stock, orders, the cart, checkout and payments. Carmit adds a product exactly as before.
  • The side the customer sees was rebuilt. The home page, the categories and all 387 product pages were built in Astro and are served as ready-made pages from the Cloudflare network.

When a visitor clicks “add to cart” they move to WordPress, at shop.carmitart.com, and pay there. The cart and checkout were restyled so it all looks like one site.

Why does this work? On a normal WordPress site every page visit wakes the server: it fetches data, runs plugins and builds the page again. In a store this is especially heavy, because caching plugins switch off exactly on the pages where the customer decides whether to buy. On the split site the page is already built and waiting, close to the visitor.

Drag and see for yourself

Same home page, same tool: Google’s PageSpeed test, on mobile. One side: the store on WordPress, on 18 October at midday. The other: the same store after the split, that same night. Drag the handle.

PageSpeed mobile test of the Carmit Perez home page after the split: 100 in performance, accessibility, best practices and SEO, and Agentic Browsing 3 of 3PageSpeed mobile test of the Carmit Perez home page on WordPress: performance 72, accessibility 87, best practices 100, SEO 100, Agentic Browsing 2 of 3לפניאחרי
Mobile: performance from 72 to 100, accessibility from 87 to 100, and main content load from 5.4 seconds to 1.7.
Home page, mobileWordPressAfter the split
Performance72100
Accessibility87100
Agentic Browsing (how well AI agents can read the site)2 of 33 of 3
First contentful paint2.4 s1.1 s
Largest contentful paint (LCP)5.4 s1.7 s
Speed Index5.8 s1.1 s
Total blocking time40 ms0

One test is not a measurement

A PageSpeed score moves from run to run, sometimes by ten points on the same page in the same minute. So besides the test in the screenshot we ran our own measurement tool: three runs per device, before and after, taking the median.

Home page, median of 3 runsWordPress (18.10)After the split (19.10)
Performance, mobile6698
Largest contentful paint, mobile7.1 s1.8 s
Performance, desktop90100
Largest contentful paint, desktop1.7 s0.5 s
Page weight2.4 MB1.2 MB
Requests15133

The number I find most interesting here is not the score but the request count. The old home page asked for 151 separate files to load, dozens of them external plugin scripts. The new one asks for 33. Each request is one more wait on the customer’s phone, usually on a mobile connection.

Why not just optimise the WordPress site?

We tried. About two months before the split we gave the store an optimisation round: every image was converted to WebP, saving more than 110 MB. In a single test after that round the mobile score went from 76 to 98.

Two months later the same home page measured 72 in a single test and 66 as a median. We did not investigate exactly what pulled it back. A live WordPress site changes all the time: plugins update, banners get added, Elementor adds code. An optimised WordPress site is not a fixed state, it is maintenance. In a split architecture speed comes from the structure itself, not from a plugin the next update can break.

Three home page designs, and one that felt like Carmit

When the customer-facing side is built in code rather than from a theme, the design is not tied to anything. We used that to build Carmit three completely different home pages, on the same store and the same engine.

Version A of the home page: a single concrete product across the whole screen with a floating text card
Version A, “Wave Wood”: one product across the whole screen and a floating text card. Minimal, gallery-like. See the demo
Version B of the home page: a wide studio photo with the headline Carmit Perez, handmade concrete art
Version B, “Editorial”: a wide studio photo and a big headline, magazine-like. See the demo
Version C of the home page, the live one: Carmit holding a concrete vase next to a welcome headline
Version C, the one that went live: Carmit herself in the photo, next to a “welcome”. The version she connected with most.

Carmit chose version C, and it is the right choice for her store. Someone buying a handmade mezuzah case is also buying the person who made it. The other two versions stayed as demo pages, and all three load equally fast. That is the point: in a split store you do not choose between design and speed.

What we learned on cutover day

Three things worth knowing before you split a store, because none of them announces itself:

  1. Cloudflare Pages reads only part of the redirects file. We prepared a redirect for every old address. Minutes after the switch, 440 of the 495 addresses Google knew returned “page not found”, with no warning in the build or the deploy. We measured it: only about the first 130 rules in the file were read. We moved the redirects into code, and now all 495 addresses work.
  2. A permanent redirect is stored in the visitor’s browser. For about an hour and a half in the middle of the move, the main domain redirected to WordPress. Anyone who visited in that window kept landing on the old site even after the fix, because their browser remembered the redirect. The lesson: never let the main domain return a permanent redirect, even for a few minutes. Move it directly from the old site to the new one.
  3. Only a real request to the real site tells the truth. All our checks against the build files passed. The problems showed up only when we requested the real addresses from the live domain. Since then such a check is a fixed part of every move.

What has not changed yet, and why

PageSpeed also has a top section: “Discover what your real users are experiencing”. Google collects this data from real Chrome users and computes it over the last 28 days. The day after the move it still describes almost only the old site: largest contentful paint 2.2 seconds, and a first server response of 1.9 seconds, which Google marks in red.

The server response time is exactly what the split should fix, because pages are now served ready-made from a nearby server instead of WordPress building them on every visit. A lab test does not show this well, because it visits the site under comfortable conditions; only real visitors will tell. That is our expectation, not yet a result. We will update this post once the 28-day window fills with data from the new site.

Who this is for, and who it is not for

A split pays off for a store with traffic, many products, and an owner who does not want to give up WooCommerce. That is exactly Carmit’s situation, and also that of Picli, the store we built this way from the start.

It pays off less for a small store with few sales, where the same budget would do more in marketing. We wrote a whole post about it: when not to split a WooCommerce store.

In summary

Carmit’s store did not lose a single product, address or order. The admin stayed exactly as it was. The mobile home page went from 72 to 100 in a single test, and from 66 to 98 as a median of three runs, and the request count fell from 151 to 33. Along the way she got a home page in a design she picked out of three.

Have a WooCommerce store that loads slowly on mobile? Send us the address, and we will tell you honestly whether a split is worth it, including when it is not.