Migrating a V3 Page to V4 Atomic: Honest Notes
Petru · 8/15/2026
I recently ported five hundred of our most-used V3 sections to V4 atomic elements, one by one through an automated mapper I wrote and then argued with. These notes are what I would hand my past self before section number one.
What maps cleanly
The core content trio ports beautifully: headings, text, buttons. Images too. Containers translate to V4 flexbox with their direction, gap, and alignment intact. If your page is mostly those, a port is an afternoon of honest work and the result is genuinely leaner markup.
What has no V4 equivalent yet
The atomic element set is young, and my exclusion list was longer than I expected: nav menus, forms built on the old widget, carousels, tab and accordion widgets, video embeds, countdowns. When my mapper met one of those, I skipped the section rather than fake it, because a port that silently drops a slider is worse than no port. Composite widgets have workarounds; a price table decomposes into headings, feature lines, and a button, and honestly reads cleaner decomposed. But interactive widgets wait for their atomic counterparts.
Port the sections V4 can express fully. Leave the rest in V3 without guilt; the two coexist on one site indefinitely.
Styling does not transfer, it translates
V3 styling lives in widget settings and kit slots; V4 styling lives in classes and variables. There is no mechanical copy between them, so decide your V4 token set first and map into it. I rebuilt our palette as V4 tokens once and pointed all five hundred ports at it, which is the entire reason restyles stay cheap on the other side.
And a scar worth sharing: the V4 style schema silently drops properties it does not recognize on import. I shipped a batch where backgrounds vanished because I had written them in a shape the schema rejects, and nothing errored; sections simply rendered without their surfaces. My render checks now assert computed backgrounds, not just structure. If you migrate by hand this bites less, but if you script anything, validate rendered output, never just the JSON.
The workflow that held up
- Port section by section, not page by page. Sections are the natural unit and rollback is trivial.
- Screenshot the V3 original first and diff against the port. Eyes miss what a side-by-side screams.
- Keep both versions published while you verify. We cross-link ours, and every ported component page has a version switcher between the V3 section and its V4 twin.
- Verify in the V4 editor itself, not only the front end; editing experience is part of what you are migrating to.
If you want to study real pairs before migrating your own work, our ports are all cross-linked with their originals, and the V4 import guide covers the editor prerequisites. Start with something small from the CTA sections; CTAs were the family with the highest clean-port rate in my batch, and they make a low-stakes first migration.
Numbers from the batch, for calibration
Some concrete figures so you can set expectations against mine. Out of the candidate pool I scanned, roughly one section in five had to be excluded for containing a widget with no atomic equivalent, and the rate varied wildly by section type. Calls to action ported almost universally. Testimonial sections were the worst, because so many are built on carousel widgets whose content would not survive. Headers were nearly unportable for a subtler reason: their menus reference WordPress menu data that lives outside the template entirely, so a faithful port has nothing to port.
Element counts told a happier story. The ported sections averaged noticeably fewer DOM nodes than their originals, with the biggest wins on sections that had been built from heavyweight composite widgets. A price table that decomposed into headings, lines, and a button lost none of its content and a lot of its markup.
Decide what a port owes its original
The question that shaped my whole approach: does a port promise identical pixels, or identical intent? I chose intent. Same structure, same content slots, same hierarchy, styled through the new token system rather than a forensic recreation of every old value. Chasing pixel identity would have meant fighting the two styling models forever and losing the maintainability that justified V4 in the first place. If you migrate client work, have that conversation before you start, because a stakeholder expecting a screenshot match will experience an intent-faithful port as a defect, and a stakeholder sold on the token system will experience pixel-chasing as wasted budget. Alignment first, mapper second.
FAQ
Should I migrate my whole site to V4?
No. Migrate sections V4 expresses fully, when touching them anyway. Wholesale migration buys risk without matching reward today.
Will Elementor auto-convert V3 pages?
Not currently. Conversion is manual or scripted, which is exactly why I recommend the section-by-section approach.
Do V3 and V4 sections conflict on one page?
No, they render side by side. Keep an individual section internally one version to stay sane.
What broke most in your 500 ports?
Backgrounds, from the schema shape issue above, and anything depending on widgets without atomic equivalents. Text, layout, and links ported nearly flawlessly.
How would you scope a one-week migration sprint?
Day one is inventory: walk the site and tag every section by its widget census, because the census decides portability before taste gets a vote. Sections of headings, text, buttons, images, and containers go on the port list; anything leaning on sliders, tabs, forms, or menus goes on the stay-in-V3 list without apology. Day two is tokens: rebuild the brand as V4 classes and variables, and resist starting any section before this exists, since every hour here saves ten later. Days three and four are the ports themselves, section by section with the original screenshot open beside the work, publishing each port alongside its original rather than replacing it. Day five is verification: front-end passes on desktop and phone widths, a click on every link, and a real edit session in the V4 editor to confirm the classes behave the way the next maintainer will expect. Whatever remains unported at the end of the week stays V3, which is a feature of the plan rather than a failure, because coexistence means the sprint has no cliff. The sites I have run this on ended the week with their highest-traffic sections migrated and a token system that makes the next sprint faster, and that compounding is the honest payoff of the whole exercise.
Build Faster with Free Elementor Components
Browse thousands of free, copy-paste Elementor components. Hero sections, pricing tables, FAQ accordions, headers, footers, and more. They adopt your Global Styles automatically.
Browse Components