Unblock vs Elementor: I Built the Same Homepage on Both

I built the same client homepage on Unblock and Elementor 4. Unblock shipped 8 KB of JavaScript to Elementor's 257 KB; Elementor wins on widgets, forms and lock-in.

Disclosure: the Unblock links on this page are affiliate links, so I earn a commission if you buy through them, at no extra cost to you. Elementor is linked plainly. Neither company paid for or reviewed this comparison.

For a custom designed site that a developer or an AI agent builds, Unblock beats Elementor: it shipped the same homepage with 8 KB of JavaScript against Elementor’s 257 KB, 18 requests against 48, and cleaner HTML, and it cost an AI agent less than half the build time. Elementor is still the better choice when a client has to edit the site visually, when you want a free version, or when you cannot accept a plugin that takes the whole page with it when it is switched off.

I built the same real client homepage on both, pixel perfect, in November 2026: Wrapaholic Breda, a Dutch car wrapping studio, so all the copy in the screenshots is Dutch. Unblock 1.0.0 ran on the free Unblock Theme 1.0.0; Elementor 4.4.0 with Elementor Pro 4.4.0 ran on Hello Elementor 3.5.2, built with the new V4 atomic elements, Global Classes and Variables. Both sites were identical local WordPress 7.1.4 installs on PHP 8.5, each set up the way its vendor recommends for maximum speed, and both finished under 1% pixel difference from the hand-coded original at 1440, 768 and 390px.

Quick Verdict

  • Pick Unblock if you or your AI agent think in HTML and CSS, you want real semantic markup (dl, ul, figure, fieldset) with almost no JavaScript, and you build many sites: $199 a year covers 100 of them and $499 once covers 1,000.
  • Pick Elementor if clients edit their own pages, you want a free version to start on, you rely on ready widgets such as a background video with play and pause controls or a form that stores submissions, or you need the content to survive if the builder is ever removed.
  • Either is fine if you are a developer comfortable with global classes and variables: Elementor V4 finally works with a class system, and on this page both builds needed the same 6 KB of behaviour JavaScript.
  • For a WooCommerce store, Unblock built the steadier product page (no layout shift, 59 KB of JavaScript against 296 KB, mobile Lighthouse 76 against 57) but needs Twig and a script for the variation picker; Elementor keeps WooCommerce’s own gallery and form as Pro widgets and suits a shop manager who edits visually.

Elementor vs Unblock at a Glance

UnblockElementor
OwnerThemeone (Loïc Blascos, maker of WP Grid Builder)Elementor Ltd.
Free versionNone, and no trial (live demo only)Yes, on WordPress.org
WordPress.org installs and ratingNot on WordPress.org10 million+, 90/100 from 7,325 ratings
Version tested1.0.0 (released 10 Nov 2026) + Unblock Theme 1.0.04.4.0 + Pro 4.4.0 (9 Nov 2026) on Hello Elementor 3.5.2
RequirementsWordPress 6.7+, PHP 8.1+WordPress 6.8+, PHP 7.4+
Cheapest paid plan$69/year, 1 site$60/year Essential, 1 site
Lifetime option$499, 1,000 sitesNo
Most sites on one plan100 (Agency, $199/year)Unlimited (One Agency, $432/year)
Refund window14 days30 days, annual plans only
EditorThe WordPress block editor plus Unblock panelsElementor’s own editor (V4 atomic)
Styling modelReusable CSS selectors, visual panels and a code editor kept in syncGlobal Classes with native style props, plus class custom CSS
Header and footerBlock theme template parts in the Site EditorPro Theme Builder templates
FormNative data-unbk-form on a plain form elementPro atomic Form with stored submissions
Code shipped (compressed)390 KB (27 KB without fonts)398 KB (314 KB without fonts)
JavaScript shipped8 KB257 KB
Requests / DOM nodes18 / 47748 / 558
Lighthouse mobile / desktop70 / 9674 / 93
Builder switched offBlank page, 0% of the text left99.6% of the text left, unstyled
WooCommerce product page code467 KB (363 KB fonts), 59 KB JS, 27 requests497 KB, 296 KB JS, 74 requests
WooCommerce mobile Lighthouse / CLS76 / 057 / 0.49
AI build (tokens, time)352K tokens, 19 minutes457K tokens, 34 minutes
Best forDevelopers and agencies building with AI agentsTeams and clients who edit visually
Prices from unblockwp.com/pricing and elementor.com/pricing, WordPress.org data from its plugin API, all checked 12 November 2026. Performance from my own builds of the same homepage and the same WooCommerce product page.

How Each One Thinks

Unblock adds one idea to the normal WordPress block editor: every block is one HTML element. You pick the tag (section, a, dl, figure, form, video), set any attribute in an Attributes panel, and give it classes. Styling lives in reusable global selectors, so one .tile rule styles all eight service tiles. You can set that rule with visual Layout, Sizing, Spacing, Borders, Typography, Background and Effects panels, or type it in the CSS editor docked under the canvas; both edit the same rule, in both directions. Content can also use Twig expressions, and per-block JavaScript sits in a third docked editor next to the HTML and CSS.

Elementor 4 moved closer to that model than I expected. Its V4 atomic elements (Div block, Flexbox, Heading, Paragraph, Image, SVG) are styled through Global Classes and Variables instead of per-widget settings, and a Div block can render as an a, a button or a nav. The difference is where styles end up. Elementor stores them as native style props in its own data, renders them through its own CSS, and only accepts free CSS in a small custom CSS box per class. It also still lives in its own editor, outside the block editor, with the Theme Builder for headers and footers.

On this page the two trees came out almost the same size: 364 Unblock blocks including header and footer, against 340 Elementor elements across the page and its two templates. The difference is in what those nodes are allowed to be and what ships around them.

Header and Full-Screen Menu

The design needs a fixed header with a logo, a pill shaped nav, WhatsApp and quote buttons, a header that turns solid after 12px and hides on scroll down, and a full-screen menu with a clip path reveal, Escape to close and scroll lock.

In Unblock the header is the Unblock Theme’s header template part, edited in the Site Editor: one “Site header” element holding an inline SVG sprite of 16 icons, the skip link, the header bar and the full-screen menu, 57 blocks six levels deep. There is no header or menu widget. Every node is a generic element whose tag I chose: nav, a, span, button. Styling is 23 selectors in a “Header” collection, and the scroll and menu behaviour is a 1,355 byte block script attached to the Site header block. Two small annoyances: the template part wraps everything in its own header element that cannot take a class, and WordPress adds its own hidden “Skip to content” link next to the design’s “Naar inhoud” link.

In Elementor the header is a Pro Theme Builder template set to Entire Site, so it is a separate document you cannot select from the homepage editor. The bar is 14 elements, the full-screen menu another 35, built from atomic Div blocks rendered as nav and links. The main nav is the Pro Nav Menu widget, the only V3 widget on the whole site, which means the header mixes two control systems and, more expensive, pulls jQuery, jQuery Migrate and SmartMenus onto the page. The solid and hidden states, the backdrop blur and the clip path reveal sit in class custom CSS, and the toggle logic in a site-wide Custom Code snippet. The class CSS box only accepts & nesting, so a rule like html.menu-open .menu had to become &:is(.menu-open *).

HeaderUnblockElementor
Blocks or elements, depth57, 6 levels49, 5 levels
Header and footer systemTemplate parts (Site Editor)Theme Builder templates (Pro)
Custom CSS for the section5,205 bytes (all of its styling)2,934 bytes on top of native props
Behaviour JavaScript1,355 bytes, block script1,299 bytes, part of the site snippet
Extra libraries pulled inNonejQuery, jQuery Migrate, SmartMenus

Winner for this section: Unblock. Both needed the same amount of hand-written behaviour, but Elementor’s one classic widget drags a jQuery chain onto every page.

Video Hero

A full height hero with a muted looping video, a rotating “20+ jaar vakmanschap” badge, a headline, two pill buttons and a round pause and play toggle that also respects reduced motion and pauses off screen.

In Unblock the hero is one section of 22 blocks. The video is an ordinary video element with two source children (webm and mp4) and a poster, and autoplay, muted, loop and playsinline are typed as attributes. The badge is an inline SVG with text on a path, rotated by a CSS keyframe. Seven selectors in the “Hero” collection handle layout and the dark overlay, and a 756 byte block script runs the toggle, reduced motion and off-screen pause. Unblock has no video background setting at all; you write the HTML a video needs.

In Elementor V4 has a native atomic Background Video element, and it does a lot for you: autoplay, mute, loop and controls are switches, and the play and pause buttons are their own native elements with Play and Pause states. That is a real point for Elementor. The limits showed up in the details: the element takes a single source (so no mp4 fallback) and no poster, its aria labels are hard-coded in English on a Dutch site, and covering the frame, the gradient and the badge spin still needed class custom CSS, with 928 bytes of script for reduced motion and off-screen pausing.

Winner for this section: Unblock, narrowly. Elementor got there with fewer custom pieces, but only Unblock could ship the poster, the mp4 fallback and the Dutch labels the design asked for.

Service Tiles

Eight link tiles in a responsive grid, each with a number, an icon, a title, a subtitle, an arrow and a photo that fades in on hover, plus one darker call to action tile.

In Unblock the section is 71 blocks. Each tile is an a element of seven to eight blocks (img with srcset, svg, b, small, span), and every tile reads one .tile rule with its hover states nested inside it. The grid is the .tiles rule. Thirteen selectors and no JavaScript. One quirk: Unblock prints each selector’s media variants right after that selector, so two rules of equal specificity win by creation order, and I had to turn a couple of descendant tricks from the original CSS into modifier classes. WordPress also curled the apostrophe in “foto’s”; a Twig expression kept it straight.

In Elementor the section is also 71 elements: each tile is a Div block rendered as a link, with eight children. Layout, spacing, colours and the responsive grid are native class props reading global variables, which is pleasant to set up. The hover photo reveal needs a descendant selector (& > img), so it went into class custom CSS, and the frosted CTA tile needed 1,107 bytes of local custom CSS. Two V4 traps cost time: every atomic container carries a base padding of 10px and width 100% that had to be reset in default tag styles, and the CSS converter stored flex: none as flex: 0 1 auto, which made cards shrink until it was written as 0 0 auto.

Winner for this section: Unblock. Same element count, but one readable rule beats a mix of props, class CSS and a local override for the same result.

About, Stats and Pillars

A two column block of copy with three stats, a photo with a caption, and a row of four pillars.

In Unblock the 33 blocks use the tags the content calls for: the stats are a dl with three dt and dd pairs, the photo is a figure with a figcaption, and the pillars are a ul with four li items. Twelve selectors style it, and the section itself only uses the shared .sec padding.

In Elementor the same 33 elements are Div blocks and paragraph spans. Atomic containers offer no dl, dt, dd, ul, li, figure or figcaption tags, so the stats and the caption lose their meaning for screen readers and search engines. Padding comes neatly from clamp() size variables on the shared sec class, and only the pillar dividers and the image cover fit needed class custom CSS (611 bytes).

Winner for this section: Unblock. It is the only one of the two that can output the semantic HTML this content needs.

Project Strip

A horizontal, free scrolling strip of six project cards and a portfolio card, with snap points, prev and next buttons that move one card, and mouse dragging.

Both builders lack a carousel that behaves like this, so both did the same thing: a plain flex row (41 nodes in each build) with scroll snap and a hidden scrollbar in CSS, and a small script for the buttons and drag (1,048 bytes in Unblock as a block script, 1,274 bytes of the Elementor snippet). Elementor’s flex converter bug hit here too and had to be worked around.

Winner for this section: a draw. Same structure, same CSS idea, same amount of script.

Contact and Quote Form

Contact details with a live open or closed badge (Europe/Amsterdam hours, today highlighted), and a quote form with service chips, required fields, inline validation and a success message that replaces the form.

In Unblock this is the largest section, 76 blocks seven levels deep. The form is Unblock’s own form mechanism: a plain form element with data-unbk-form, and Unblock injects the action, a honeypot and a timestamp on the server and handles delivery. The chips are real checkbox inputs in a fieldset with a legend. This is also where the visual side of Unblock is easiest to see: with the Contact section selected, the Borders, Typography and Background panels on the right show the values of the .contact rule that the CSS editor shows below the canvas. Change one, the other updates. The native form only posts, though, so client validation, the fetch submit and the success swap took a 1,819 byte block script, plus 774 bytes for the opening hours.

In Elementor the form is the Pro atomic Form element with checkbox and label chips, required inputs, a textarea, a submit button, and native Success and Error message elements, sending to Collect Submissions so entries are stored in WordPress. That is a more complete form back end than Unblock’s, out of the box. It still needed script for the open status, aria-invalid, the mobile bar hiding while typing and the first name greeting (2,062 bytes), and it showed the success message without hiding the fields. Without a fieldset tag, the chips use role group with aria-labelledby.

Winner for this section: Elementor. Stored submissions and native success and error states are worth more to most site owners than a fieldset tag.

Footer

A four column footer with the logo, three link lists, a giant outlined “Wrapaholic” word and a bottom bar with the current year.

In Unblock the footer is the theme’s footer template part, 54 blocks, with real ul, li and h4 elements for the link columns and the giant word as one div with a CSS text stroke. A 100 byte block script fills in the year.

In Elementor it is a Theme Builder footer template of 35 elements. It is smaller because the link lists are paragraphs (no ul or li in atomic containers). The text stroke and link hover went into class custom CSS, and the year needed a separate atomic element, because inline HTML in a Paragraph loses its attributes.

Winner for this section: Unblock. Link lists should be lists.

Mobile Contact Bar

A fixed bottom bar on phones with Bel, WhatsApp and Offerte buttons, which slides away while the menu is open or a form field has focus.

Both builds use exactly 10 nodes: a nav with three links, each with an SVG and a label. In Unblock it lives in the footer template part and the .mbar rule carries its own 680px media query. In Elementor it sits in the footer template, shown only on the mobile breakpoint through the class mobile variant, with the hide states in class custom CSS. Elementor has no breakpoint below mobile, so the 380px rule and the body padding for the fixed bar went into the kit’s Custom CSS.

Winner for this section: a draw. Elementor needed one extra trip to the kit CSS, nothing more.

Section by Section, in Numbers

SectionUnblock blocks (depth)Elementor elements (depth)Unblock CSSElementor custom CSSUnblock JSElementor JS
Header57 (6)49 (5)5,205 B2,934 B1,355 B1,299 B
Hero22 (7)24 (8)2,136 B1,751 B756 B928 B
Service tiles71 (6)71 (6)3,744 B2,321 B00
About33 (6)33 (6)1,966 B611 B00
Project strip41 (6)41 (6)1,633 B1,164 B1,048 B1,274 B
Contact76 (7)76 (7)6,607 B2,784 B2,593 B2,062 B
Footer54 (7)35 (6)2,198 B456 B100 B128 B
Mobile bar10 (3)10 (3)974 B150 B00
Unblock CSS is all the styling of that section, set visually or typed. Elementor custom CSS is what its native props could not express. Shared classes are counted in every section that uses them.

Design System, Fonts and Global Styles

Both builders now have a proper design system, which was not true of Elementor two years ago.

Unblock keeps tokens in a Variables manager: 120 CSS custom properties on :root in five collections (Colors 34, stored as HSL; Spacing 36; Typography 25 including fluid clamp sizes; Effects 20; Layout 3), plus a 680px override. Rules sit in a Selectors manager, 156 selectors in 11 collections that read like a stylesheet (Base, Utilities, Buttons, Header, Hero and so on), and 11 at-rules for the design’s own breakpoints at 1080, 680 and 380px, hover, reduced motion and keyframes. Fonts install through the WordPress Font Library from the Fonts tab and are served from your own uploads folder.

Elementor has a Design System panel with three tabs: 21 Variables (11 colours, 2 fonts, 8 sizes including clamp values), 104 Global Classes holding 628 native style props with breakpoint and hover variants and a priority order, and Default tag styles. Two things to know. New classes get the highest priority, so a base class like pill overrode its modifiers until I reordered them. And opening Site Settings re-rendered the canvas without the V4 class styling until the editor reloaded, so the page you are styling disappears while you pick fonts. An Angie AI promo modal also opened over the canvas in the template editors. Fonts are served locally once you switch on Load Google Fonts Locally.

One honest note on fonts. In my Unblock build the font files came to 363 KB, against 84 KB in Elementor, because I installed every face the brief listed (10 Inter Tight faces, 2 Instrument Serif and 2 JetBrains Mono) as separate files. That is a configuration choice, and it is the main reason Unblock’s mobile Lighthouse score came out lower. Prune the faces you do not use.

Custom CSS and JavaScript: How Much Each Needed and Where It Lives

The behaviour code came out nearly identical: 5,852 bytes in Unblock, 6,001 bytes in Elementor. The design simply needs a scroll aware header, a menu toggle, a video toggle, a strip, opening hours and form handling, and neither builder has native components that match it exactly.

Where the code lives is different. Unblock gives each block its own JavaScript editor, so the header script sits on the header and the form script on the form, and Unblock bundles all six into one deferred file. Elementor puts it in one Pro Custom Code snippet, loaded at the end of the body on every page. That is easier to find and harder to keep tidy as a site grows.

UnblockElementor
Behaviour JavaScript5,852 bytes in 6 block scripts6,001 bytes in 1 Custom Code snippet
CSS31,394 bytes: the entire style layer, minified and inlined12,362 bytes of custom CSS on top of 628 native props
Where the CSS livesSelectors, variables and at-rules managers52 class variants (10,090 B), CTA tile (1,107 B), Nav Menu widget (286 B), kit (879 B)
Why it was neededIt is how Unblock styles everythingPseudo-elements, descendant rules, JS state classes, scroll snap, text stroke, clip path, keyframes
Bar chart of custom JavaScript and CSS bytes in the Unblock and Elementor builds
Behaviour JavaScript was almost the same; the CSS numbers measure different things

If you hate writing CSS, read the Elementor column again: even with V4’s native props, 52 class variants still needed hand-written CSS for this design. Unblock just admits up front that the style layer is CSS, and then gives you visual panels on top of it.

Performance: What Each One Ships

This is where the two builders stop looking alike. The visible page is identical, yet Elementor sends 257 KB of JavaScript to run it and Unblock sends 8 KB. Without fonts, the Unblock page is 27 KB of code against Elementor’s 314 KB, close to the 22 KB of the hand-coded original.

Measured on the homepageHand-coded originalUnblockElementor
Code shipped, compressed (HTML+CSS+JS+fonts)96 KB390 KB398 KB
Of which fonts75 KB363 KB84 KB
JavaScript, compressed3 KB8 KB257 KB
Unused CSS / unused JS71% / 45%44% / 25%79% / 73%
Requests171848
Stylesheets / script tags2 / 10 (inlined) / 217 / 16
DOM nodes (max depth)449 (10)477 (12)558 (14)
HTML document, uncompressed22 KB89 KB137 KB
Lighthouse mobile767074
Lighthouse desktop979693
Lighthouse accessibility969696
Lighthouse is the median of 3 runs. The 2.3 MB hero video is excluded from the transfer numbers.
Bar chart of code shipped, JavaScript, requests and DOM nodes for Unblock, Elementor and the hand coded original
Same page, three builds: Elementor’s weight is JavaScript, Unblock’s is fonts

Now the honest part about Lighthouse. On every version of this page, the mobile Largest Contentful Paint element is the 2.3 MB hero video, so mobile scores mostly measure how fast that video arrives, and even the hand-coded original only scores 76. Unblock’s 70 comes from a slower first paint (3.0 seconds against Elementor’s 2.3) caused by the 363 KB of fonts, not from its code. On desktop, where the video matters less, Unblock scores 96 and Elementor 93. Total blocking time was zero on both. Elementor’s JavaScript costs you on real phones with slow CPUs more than in a lab score, and the jQuery chain from one Nav Menu widget is a fair share of it.

Both used their vendor’s fast path. Unblock delivers CSS automatically: page scoped, minified and inlined in the head when it is under 51,200 bytes (this page was 31.4 KB), with all block scripts in one deferred file. Elementor ran with external CSS files, optimized image and Gutenberg loading, lazy background images, local Google Fonts and a one day element cache.

Building It With AI

Unblock sells itself on AI building, so I also had an AI agent build each version from the same written brief, with the same pixel target, through each builder’s own programmatic tools: Unblock’s abilities, and Elementor’s MCP abilities (build composition, global classes, global variables). Unblock’s built-in assistant, Unbot, was not used.

Bar chart of tokens, minutes and check runs an AI agent needed to build each version
An AI agent needed 23% fewer tokens and 15 fewer minutes on Unblock
AI buildUnblockElementor
Tokens352K457K
Pixel check runs to pass23
Time to a passing build19 minutes34 minutes
Where the agent lost timeRelative links rewritten to http://./, lazy images painting blank until decoding was set, curled apostrophesAttributes and IDs missing from the MCP schema (patched in raw JSON), Nav Menu settings not settable, CSS converter and class priority quirks, saves landing in an autosave until published

The reason is simple. Language models already write HTML and CSS fluently, and in Unblock that is the native format: a block is an element, a style is a selector. In Elementor the agent writes CSS that a converter then translates into atomic props, and every gap in that translation (no html.x & selectors, no custom media queries in class CSS, attributes the schema does not expose) turns into a retry. Elementor 4.4 did add “Agent Ready” and more MCP tools, and they worked, but they still sit on top of a data model built for a visual editor.

Unblock’s MCP Bridge needs WordPress 6.9 or newer, an active license and the official MCP Adapter plugin; it lists 16 MCP tools with 31 more through the adapter, and its own assistant runs on your own API key with no markup. If you run an agency where AI agents do the first build, that 19 versus 34 minutes repeats on every site.

Lock-In: Switch the Builder Off

I deactivated each builder plugin, left its theme active, and checked how much of the original page text was still visible.

Plugin off, theme onUnblockElementor
Text still visible0%99.6%
Images / links / form fields0 of 4 / 0 of 44 / 0 of 43 of 4 / 5 of 44 / 11 fields
Page height at 1440px900px (blank viewport)49,913px (original 5,772px)
What you seeA blank pageAll the text, unstyled, with icons blown up to full width

Unblock’s blocks are rendered by the plugin, and the Unblock Theme’s header and footer parts are Unblock blocks too, so without the plugin WordPress has nothing to print. Elementor saves a plain HTML copy of the content in the post, so the words survive; the styling, layout and most links do not. Neither result is a site you could run, but Elementor leaves you something to rebuild from. Unblock does keep working if you stop paying, you just lose updates, the AI assistant and support. What you cannot do is remove it.

WooCommerce: the Same Product Page on Both

A homepage says little about a shop, so I went back to the same client and built a WooCommerce product page on both sites. Wrapaholic sells two things online: the AlloyGator velgbescherming, a set of four wheel rim protectors that comes in 7 rim sizes and 5 colours (35 variations, € 189 to € 249), and the XPEL PPF Compact pakket, a simple product on sale for € 795. The design is again a hand-coded page, with size buttons, colour swatches, a gallery with a lightbox, tabs and a sticky product bar on phones.

The rule was one single product template per builder that serves both products, built from the template system each builder offers, on WooCommerce 11.3.0. Each build had to land under 1% pixel difference from the reference at 1440, 768 and 390px, and pass a real cart test: choose 20 inch and Rood, set the quantity to 2, add to cart, and find € 498,00 in the cart with the right variation. Both passed.

Hand-coded reference product page for AlloyGator wheel protection with size buttons and colour swatches
The hand-coded reference: the AlloyGator product page both builders had to match, with 35 variations behind the size and colour buttons

How Unblock built the product template

Unblock has no WooCommerce blocks of its own. It reads WooCommerce data through its Twig layer instead: the title, price, gallery, attributes and the full list of variations are all available as post fields, so the product page is plain Unblock elements filled with Woo data. The whole page is one template part of 193 blocks, edited with the same JavaScript, HTML and CSS docks as the homepage.

Two limits shaped the build. Unblock cannot write to the single-product template at all, because WooCommerce registers a template with the same name and Unblock refuses the clash, so the template itself is a core shell holding three template parts: header, the Unblock product part and footer. And Unblock cannot place WooCommerce blocks inside its templates, so there is no Woo notice block and no Woo add to cart block. The variation picker is therefore built by hand: a real WooCommerce add to cart form whose size buttons and colour swatches come from an Unblock loop over the product attributes, with the swatch colours stored as design tokens named after each colour. A 6.6 KB block script matches the choice against the variations, updates price, stock and SKU, and adds to the cart over AJAX. Without JavaScript the form still posts to WooCommerce and adds the right variation. No add-on was installed, and the only store setting I changed was the order of the colours.

How Elementor built the product template

Elementor Pro has a Single Product template in its Theme Builder, set to all products, and this one holds 90 elements. The catch is V4: the new atomic elements have no WooCommerce versions yet. The layout is atomic containers with 56 new global classes, the title, category and short description are atomic elements with Woo dynamic tags, and everything that needs WooCommerce markup or scripts is one of six Pro WooCommerce widgets from the old V3 system: breadcrumb, product images, price, add to cart, meta and data tabs. So the product page mixes the two control systems, like the header on the homepage did.

Elementor has no variation buttons or swatches either. The Pro Add to Cart widget prints WooCommerce’s own dropdowns, and its style panel can only restyle those dropdowns. A 9.8 KB Custom Code snippet turns them into size buttons and colour swatches that drive the real dropdowns, while WooCommerce’s own variation script still handles price, SKU, stock and the add to cart. The swatch colours live in that script as a map from colour name to hex code, and because Custom Code does not run in the editor, the canvas shows the plain dropdowns. Adding to the cart is WooCommerce’s normal page reload, with its notice styled as the toast. I also changed four store settings to match the design: no decimals in prices, an 800px main image, reviews off and the colour order.

The results

Both pages look the same to a shopper, and Elementor came closer to the reference: 0.02% pixel difference at 1440px against Unblock’s 0.16%. Most of Unblock’s gap is one paragraph set in a font weight of 450, which Unblock’s font installer cannot provide because it installs fixed weights only. What each page ships is a different story.

AlloyGator product pageHand-coded pageUnblockElementor Pro
Code shipped, compressed (HTML+CSS+JS+fonts)104 KB467 KB497 KB
Of which fonts75 KB363 KB84 KB
JavaScript, compressed5 KB59 KB296 KB
Requests / DOM nodes14 / 38827 / 45374 / 593
Lighthouse mobile / desktop95 / 10076 / 9957 / 99
Mobile layout shift (CLS)000.49
Variation pickerStatic buttonsOwn buttons on a real Woo form, 6.6 KB JSCustom buttons over Woo dropdowns, 9.8 KB JS
WooCommerce add-onsn/aNoneNone (Pro widgets)
Custom CSSn/a25.7 KB24.9 KB
Pixel difference 1440 / 768 / 390n/a0.16 / 0.22 / 0.34%0.02 / 0.03 / 0.04%
Cart test (20 inch, Rood, x2)n/a€ 498,00, passed€ 498, passed
Lighthouse is the median of 3 runs. Elementor’s build prints prices without decimals because of the store setting it changed.
Bar chart of code shipped, JavaScript, requests and mobile Lighthouse for the WooCommerce product page on Unblock and Elementor
On the product page Elementor ships five times Unblock’s JavaScript; Unblock’s weight is again its font files

Most of Unblock’s 59 KB of JavaScript is not Unblock’s. WooCommerce loads jQuery, its cart script and its order attribution scripts on every product page even though this template uses none of them, and there is no setting to stop it. Unblock’s own share is the 6.6 KB block script. Elementor adds its frontend scripts, the Pro WooCommerce widgets’ scripts and Woo’s slider, zoom and lightbox on top, which is how it gets to 296 KB. Unblock’s weak point is the same as on the homepage: 363 KB of font files, which is what holds its mobile score at 76.

Why the Elementor page jumps on phones

The 0.49 layout shift on Elementor is the number that matters most here, because Google treats anything above 0.25 as poor. I traced it on a 390px phone with the CPU slowed down four times. Before the scripts run, the gallery is 450px tall and the product summary starts right below it. Then WooCommerce’s gallery slider starts up, and for one frame it lays all the slides out at full width, one under the other: the gallery grows to 3,637px and pushes the title, price and buttons more than 3,000px down the page. One frame later the slider settles at 444px and everything jumps back. On a fast phone that frame is never painted and you see nothing; on a slower one the shopper sees the price and buttons vanish and come back.

Unblock scored 0. Its gallery is its own markup with a fixed square main image, and WooCommerce’s slider script never runs on that page, so the gallery is 444px tall from the first paint and the summary never moves. This is not an Elementor bug as such: it happens on every builder that keeps WooCommerce’s own gallery, and the fix is small.

Why the page jumps on phones

WooCommerce’s gallery slider measures and stacks every slide for a moment before it sizes the slider, and on a phone the summary sits below the gallery, so it gets pushed down and pulled back up. Reserving the main image box fixes it: a few lines of CSS that give the gallery’s first image a fixed aspect ratio and hide the other slides until the slider is ready. If your Elementor, or any other builder’s, product page scores badly on layout shift on mobile, check the gallery first.

My WooCommerce verdict

For a WooCommerce store, I would build the product template on Unblock if a developer owns it. It shipped a page that does not move, with a fifth of Elementor’s JavaScript, and the variation picker is plain markup and a small script that keeps working without JavaScript. The price is that everything WooCommerce normally draws for you, the form, the gallery, the notices, has to be built in Twig and a block script, and plugins that hook into WooCommerce’s standard product form will need checking because that form is not there. If a shop manager will edit the product template, or you rely on WooCommerce extensions, Elementor is the safer choice: its Pro widgets wrap WooCommerce’s own gallery, form and tabs. Plan on the custom script for swatches, and add the gallery fix before you launch.

Pricing in 2026

Unblock has four plans, all with every feature, the AI assistant and updates: Starter $69 a year for 1 site, Professional $129 for 10 sites, Agency $199 for 100 sites, and Lifetime $499 once for 1,000 sites. Local and staging sites do not count. There is no free version and no trial, only a live demo, and the refund window is 14 days. Until 1 December 2026 a Black Friday sale takes 30% off every plan: $48.30, $90.30, $139.30 and $349.30.

Elementor has a free plugin and these yearly Pro plans: Essential $60 (1 site), Advanced Solo $84 (1 site), Advanced $108 (3 sites) and Expert $204 (25 sites). Elementor One costs $180 for 1 site with AI credits and extra services, and One Agency $432 for unlimited sites. There is no lifetime plan, renewals are at list price, and the 30 day refund applies to annual plans only. Elementor’s own plan list leaves custom code and custom CSS out of Essential, and this build used both, so for a site like this I would budget Advanced Solo.

What you pay per yearUnblockElementor
1 site$69 (Starter)$84 (Advanced Solo; $60 Essential without custom code)
3 sites$129 (Professional, up to 10)$108 (Advanced)
10 sites$129 (Professional)$204 (Expert, up to 25)
25 sites$199 (Agency, up to 100)$204 (Expert)
100 sites$199 (Agency)$432 (One Agency, unlimited)
Lifetime$499 once, 1,000 sitesNot available
Free versionNoYes
List prices from unblockwp.com/pricing and elementor.com/pricing, 12 November 2026. Neither vendor publishes a separate renewal price.

The Comparison That Should Decide It for Freelancers

At one to three sites, Elementor is the same money or cheaper, and you can start free. From ten sites up, Unblock costs a fraction: $129 against $204 for ten sites, $199 against $432 for a hundred. The Unblock lifetime plan pays for itself against the Agency plan in about two and a half years, and at the Black Friday price of $349.30, against the full Agency price, in under two. If you build a handful of sites a year, price will not decide this. If you run an agency, it will.

When Unblock Makes Sense, and When It Does Not

Unblock fits developers who are comfortable with HTML, CSS and a little Twig and want the block editor to stop fighting them; agencies whose first build is done by an AI agent, since its HTML and CSS model is what agents write best; anyone who wants semantic markup and near zero JavaScript without leaving WordPress; and people building many sites who like a one time price.

Unblock does not fit clients who will edit layouts alone (a List View of 243 blocks for one page is a developer’s view, even with good names); anyone who wants a library of ready widgets, because Unblock has no slider, tabs, video background or sticky header component, you build them; anyone who cannot accept that the page disappears if the plugin goes; and anyone nervous about a version 1.0.0 released on 10 November 2026 with no WordPress.org track record.

Elementor fits teams where designers and clients edit visually, sites that lean on ready widgets and Pro features like stored form submissions, popups and the Theme Builder, and anyone who wants the largest ecosystem of tutorials, add-ons and freelancers. V4 also makes it a far more reasonable choice for developers than it used to be.

Elementor does not fit sites where every kilobyte of JavaScript counts, builds that need proper semantic HTML (lists, description lists, figures, fieldsets), or anyone tired of upsell modals inside the editor.

Which One Should You Pick?

Pick Unblock If

  • You write or read HTML and CSS and want the block editor to output exactly what you design.
  • You build sites with AI agents: same page, 352K tokens and 19 minutes against 457K and 34.
  • You care about what ships: 8 KB of JavaScript and 18 requests against 257 KB and 48.
  • You need real semantic tags: dl, ul, figure, fieldset and form, chosen per element.
  • You build ten sites or more, or want a lifetime licence ($499 for 1,000 sites).
  • You run a WooCommerce store and want a product page that stays put on phones: layout shift 0 against 0.49, and 59 KB of JavaScript against 296 KB.

Pick Elementor If

  • Clients or non developers will edit layouts themselves.
  • You want to start free, or only need one to three sites.
  • You want native widgets such as a background video with play and pause, and a form that stores submissions.
  • You want your content to survive if the builder is ever removed (99.6% of the text did).
  • You value a 30 day refund and a decade of tutorials and add-ons.
  • You want WooCommerce’s own gallery, add to cart form and tabs as widgets a shop manager can edit, without writing Twig.

Pros and Cons

My verdict on Unblock

Unblock

4.0/5

The best tool here for developers and AI driven agencies who want hand-coded quality inside the block editor. Young, CSS first, and total lock-in.

What works

  • 8 KB of JavaScript and 18 requests for the full homepage
  • Any HTML tag per block, so real semantic markup
  • Visual panels and the CSS editor edit the same reusable rule
  • Fastest and cheapest AI build of the pair
  • Steadiest WooCommerce product page: no layout shift, mobile Lighthouse 76 against 57
  • $199 for 100 sites, $499 lifetime for 1,000

What does not

  • Switch it off and the page is blank
  • No widget library: sliders, sticky headers and video controls are built by hand
  • Version 1.0.0, no free version, no trial, 14 day refund
  • WooCommerce means Twig and a script: no Woo blocks in its templates, and the single product template is a shell

My verdict on Elementor

Elementor

3.5/5

The safer pick for teams and clients who edit visually, and V4 is a big step forward. It still ships far more JavaScript than this page needs, and on WooCommerce the gap grows.

What works

  • Free version and the largest ecosystem in WordPress
  • Native background video with controls and a Pro form with stored submissions
  • V4 Global Classes and Variables make it workable for developers
  • 99.6% of the text survives if you remove it
  • Pro WooCommerce widgets wrap Woo’s own gallery, form and tabs, and matched the design closest

What does not

  • 257 KB of JavaScript and 48 requests for the same page
  • No ul, dl, figure or fieldset tags in atomic containers
  • Editor quirks: class priority, CSS converter bugs, Site Settings dropping class styles, promo modals
  • No V4 WooCommerce elements: swatches took 9.8 KB of custom JS, and the product page shifted 0.49 on mobile

The Conclusion, in Full

I expected this to be lopsided, and on the old Elementor it would have been. V4 changed that. With atomic elements, Global Classes and Variables, Elementor reached the same pixel perfect result with the same element count as Unblock, section for section, and its background video and Pro form are features Unblock simply does not have.

The gap is in what each one ships and what each one lets you write. For the same page, Elementor sends 257 KB of JavaScript where Unblock sends 8 KB, makes 48 requests where Unblock makes 18, and has no way to output a list, a description list, a figure or a fieldset. Unblock lets every block be the element it should be, keeps styling in readable reusable rules you can set visually or type, and gave an AI agent an easier job by a wide margin.

Unblock’s weaknesses are real. It is brand new, it has no free version, it has no ready made widgets, and it takes the whole page with it if you ever switch it off. My build also shipped too many font files, which cost it on the mobile score; that one is on me, and it is easy to fix.

The WooCommerce round pointed the same way. On a real variable product page Unblock shipped 59 KB of JavaScript against 296 KB, scored 76 against 57 on mobile, and did not shift at all, while Elementor’s page jumped by 0.49 as WooCommerce’s gallery slider started. Elementor matched the design more closely and kept WooCommerce’s own form and gallery, which is worth a lot if you use Woo extensions, but it needed custom JavaScript for the swatches just like Unblock did. Neither builder offers variation swatches out of the box.

So my call is this: if you are a developer, or you run an agency where AI agents and developers build the sites, choose Unblock. If your clients will edit their own pages, or you need ready widgets and a free start, choose Elementor, and accept the JavaScript bill. For the kind of site this was, a custom designed homepage built by someone who knows HTML, Unblock is the better builder.

Unblock vs Elementor, Frequently Asked Questions

Is Unblock better than Elementor?

For developers and AI built sites, yes. On the same homepage Unblock shipped 8 KB of JavaScript against 257 KB, 18 requests against 48, and real semantic HTML, and an AI agent built it in 19 minutes against 34. For clients who edit visually, Elementor is the better fit.

Is Unblock an Elementor alternative for the block editor?

Yes. Unblock runs inside the normal WordPress block editor and turns each block into one HTML element with reusable CSS selectors, so you get page builder control without leaving Gutenberg. It does not have Elementor’s widget library, so you build sliders, sticky headers and video controls yourself.

Can I use Unblock with Elementor?

They work on different editors: Unblock extends the block editor, Elementor uses its own. You could have both active and build some pages with each, but there is no point mixing them on one page, and you would load both plugins.

Does Unblock work without the plugin?

No. In my test, deactivating Unblock left a blank page with 0% of the text, because its blocks are rendered by the plugin. If you stop renewing, your sites keep working; you only lose updates, the AI assistant and support.

Is Elementor slower than Unblock?

It ships far more code. On the same page Elementor sent 257 KB of JavaScript and made 48 requests, Unblock 8 KB and 18. Lighthouse desktop was 96 for Unblock and 93 for Elementor; on mobile Elementor scored 74 and Unblock 70, mostly because my Unblock build loaded 363 KB of fonts.

Does Unblock have a free version?

No. There is no free version and no free trial, only a live demo. Plans start at $69 a year for one site, with a 14 day refund.

Does Unblock have a lifetime deal?

Yes. Lifetime costs $499 once and covers 1,000 sites. During the Black Friday sale until 1 December 2026 it is $349.30. Elementor has no lifetime plan.

How much does Elementor Pro cost in 2026?

Essential is $60 a year for 1 site, Advanced Solo $84 for 1 site, Advanced $108 for 3 sites and Expert $204 for 25 sites. Elementor One is $180 for 1 site and One Agency $432 for unlimited sites.

Is Unblock only for coders?

No, but it helps. The inspector has visual Layout, Sizing, Spacing, Borders, Typography, Background and Effects panels, and they edit the same CSS rule the code editor shows. You still pick HTML tags and work with classes, so it suits people who understand how a web page is built.

Which is better for building with AI?

Unblock. An AI agent working from the same brief used 352K tokens and 19 minutes on Unblock against 457K tokens and 34 minutes on Elementor, because Unblock’s format is plain HTML and CSS. Unblock also has an MCP Bridge and a bring your own key assistant.

Does Elementor V4 output semantic HTML?

Partly. Atomic elements can render as section, nav, a or button, and headings are real headings, but atomic containers offer no ul, li, dl, figure, figcaption or fieldset tags, so lists and stats become div and paragraph elements.

Is Unblock or Elementor better for WooCommerce?

For a developer built store, Unblock: on the same variable product page it shipped 59 KB of JavaScript against 296 KB, scored 76 against 57 on mobile Lighthouse and had no layout shift, against 0.49 on Elementor. Elementor is the better fit when a shop manager edits the product template or you rely on WooCommerce extensions, because its Pro widgets keep WooCommerce’s own form and gallery.

Can Unblock build WooCommerce product templates?

Yes, with work. Unblock reads product data, prices, attributes and variations through Twig, so you build the product page from Unblock elements. It cannot write to WooCommerce’s single product template or place WooCommerce blocks, so the template is a shell around an Unblock template part, and variation buttons need a small block script.

Why does my Elementor product page jump on mobile?

In my build the cause was WooCommerce’s gallery slider, not Elementor itself: while it starts it stacks every slide at full width for a moment, and the summary below the gallery is pushed down and back. Giving the gallery’s main image a fixed aspect ratio in CSS reserves the space and stops the shift.

More Unblock Comparisons

Subscribe to my Newsletter

If you love my tutorials, consider subscribing to not miss any awesome tips about block editors.

Don't Keep This Magic to Yourself - Share!
Rahul Singh
Rahul Singh

With more than 5 years of wrangling Kadence and Blocksy Themes, plus mastering the Block Editor, I turn complex web design into a breeze. My superpower? Crafting websites that are both fast and fabulous, with a dash of fun and a focus on making conversions soar!

Articles: 17

Leave a Reply

Your email address will not be published. Required fields are marked *