**Version:** 2.0.0 **Updated:** 2026-06-30 **Freshly updated:** v2.0.0 wires in current Respira safety and precision. Pre-migration now inventories source pages with `respira_find_builder_targets`. Every write is preceded by a `respira_get_snapshot`, and the existing
Installs just this skill. Get the whole plugin for auto-invocation.
โก How it fires
How this skill gets triggered: by you, by Claude, or both.
Fires itselfClaude auto-loads it when your prompt matches the work.
You can call itInvoke it directly when you want it.
Slash command/migrate-elementor-to-gutenberg
๐๏ธ Context preview
The summary Claude sees to decide when to auto-load this skill.
**Version:** 2.0.0 **Updated:** 2026-06-30 **Freshly updated:** v2.0.0 wires in current Respira safety and precision. Pre-migration now inventories source pages with `respira_find_builder_targets`. Every write is preceded by a `respira_get_snapshot`, and the existing
# Migrate Elementor to Gutenberg
**Version:** 2.0.0
**Updated:** 2026-06-30
**Freshly updated:** v2.0.0 wires in current Respira safety and precision. Pre-migration now inventories source pages with `respira_find_builder_targets`. Every write is preceded by a `respira_get_snapshot`, and the existing draft-duplicate path is kept. After the initial content write, validation issues (block nesting, broken refs) are corrected surgically with `respira_find_element` + `respira_update_element` (and `respira_batch_update` for multi-block or multi-page fixes) instead of rewriting whole pages. Snapshot restore and draft deletion are now explicit rollback paths. Reflects the current 16 supported builders.
Converts Elementor-built WordPress pages to native Gutenberg blocks. Reads Elementor's JSON widget tree from post meta, maps each widget to its closest core block equivalent, generates a migration plan for approval, and writes clean block markup to the target pages. Use this skill whenever someone wants to move from Elementor to Gutenberg, eliminate page builder dependencies, go back to native WordPress blocks, or simplify their tech stack by dropping Elementor.
## What This Skill Does
Moving from Elementor to Gutenberg is one of the most common โ and most complex โ builder migrations. Elementor stores content as a deeply nested JSON tree in `_elementor_data`, while Gutenberg uses HTML comments (`<!-- wp:block -->`) inline with content in `post_content`. Every layout decision Elementor makes with JSON settings must be translated into block attributes, CSS classes, or Group/Columns block structures.
This skill handles that translation systematically: it reads every Elementor widget, finds the right Gutenberg block, maps settings as closely as possible, and flags anything that needs manual attention. The result is clean, dependency-free WordPress content. Elementor and Gutenberg are both among the 16 page builders Respira reads and writes natively, so extraction and the block write run through the same builder-aware tooling Respira uses everywhere else.
- All text content, headings, and inline formatting (bold, italic, links)
- Image URLs, alt text, captions, and link targets
- Button labels, URLs, and target attributes
- Color values applied as block-level styles
- Basic spacing via Spacer blocks
- Heading hierarchy (h1-h6)
- List content and structure
- Embedded media URLs
## What This Skill Does NOT Do
- **Complex multi-column layouts** โ Elementor allows pixel-level column width control and nested sections. Gutenberg Columns blocks support percentage widths but with less precision. Complex grid layouts may need manual adjustment or a block-based layout plugin.
- **Elementor Pro widgets** โ Posts grid, portfolio, price table, price list, flip box, call to action, and similar Pro widgets have no core Gutenberg equivalent. They are flagged for manual recreation.
- **Advanced animations** โ Motion effects, parallax scrolling, entrance animations have no Gutenberg equivalent.
- **Form widgets** โ Elementor forms need a forms plugin replacement (WPForms, Gravity Forms, etc.).
- **Popup content** โ Elementor popups are not page content and are excluded.
- **Design fidelity** โ Gutenberg is intentionally simpler. Expect a cleaner but less visually identical result. This is a feature, not a bug โ you are trading design complexity for simplicity and performance.
## Requirements
- Respira for WordPress plugin installed and connected
- MCP connection active (desktop or WebMCP)
- Elementor plugin active (to read source content)
- WordPress 6.0+ (for modern block features; 6.3+ recommended for Details block)
- A block-compatible theme (Twenty Twenty-Three, Astra, Kadence, GeneratePress, etc.)
- Read access to scan Elementor content
- Write access to create duplicates with Gutenberg content
## Trigger Phrase
- "migrate elementor to gutenberg"
## Alternative Triggers
- "convert elementor to blocks"
- "switch from elementor to gutenberg"
- "remove elementor dependency"
- "go back to native wordpress"
- "rebuild elementor pages with blocks"
- "elementor to block editor"
- "decommission elementor"
## Source Builder: Elementor
Elementor stores page content in the `_elementor_data` post meta field as a JSON string. The structure is a nested tree:
- Style attributes go in the block JSON: `{"style":{"color":{"background":"#fff"},"spacing":{"padding":{"top":"2rem"}}}}`
- No separate meta storage โ everything is in `post_content`
- Columns use percentage widths: `<!-- wp:column {"width":"33.33%"} -->`
Write Gutenberg content via `respira_update_page` or `respira_update_post` targeting the `content` field.
## Execution Workflow
### Phase 1: Pre-Migration Audit
1. Verify Respira + MCP connection via `respira_get_site_context`. If unavailable, stop and show setup guidance.
2. Confirm Elementor is active via `respira_list_plugins`.
3. Check WordPress version (6.0+ required, 6.3+ ideal).
4. Identify active theme โ note if it is block-theme compatible.
5. Inventory and scope the source pages with `respira_find_builder_targets` (builder=elementor) โ a fast, ranked list of every Elementor-built page/post before you touch anything. Fall back to `respira_list_pages` / `respira_list_posts` + `respira_get_builder_info` to confirm builder per item where needed.
6. For each Elementor page, extract content via `respira_extract_builder_content` with `builder=elementor`
7. Build an inventory:
- Total pages/posts using Elementor
- Widget types used (frequency count)
- Pro-only widgets detected
- Third-party addon widgets detected
- Dynamic tags and global widgets
- Layout complexity score per page (nesting depth, column configurations)
- Map colors and spacing to block-level `style` attributes where possible
- Convert background images to Group block background or Cover block
- Flag unmappable widgets with `<!-- MIGRATION NOTE: [widget type] needs manual recreation -->`
3. Assemble complete block markup with proper nesting and closing tags
4. Create a duplicate page via `respira_create_page_duplicate` or `respira_create_post_duplicate`
5. Before writing, take a snapshot with `respira_get_snapshot` so the duplicate's pre-write state can be restored if anything goes wrong
6. Write block content to the duplicate via `respira_update_page` or `respira_update_post`
7. Surgical fix pass โ if the converted page has validation issues (broken block nesting, a misconverted block, a dangling reference), do not rewrite the whole page. Locate the specific element with `respira_find_element` and correct it with `respira_update_element`. For repeated fixes across many blocks or several pages, batch them with `respira_batch_update`
8. Report: widgets converted, items flagged, known layout differences
### Phase 4: Post-Migration Verification
1. Summarize all migrations:
- Pages migrated
- Widgets converted to blocks
- Items needing manual attention
- Layout simplifications made
2. For each migrated page, provide:
- Link to edit the duplicate in Gutenberg
- Flagged items requiring manual recreation
- Layout notes (where the Gutenberg version differs from Elementor)
3. Post-migration checklist:
- [ ] Open each duplicate in block editor โ verify blocks are valid
- [ ] Check responsive preview (tablet/mobile in block editor)
- [ ] Add any needed block patterns or reusable blocks
- [ ] Consider a forms plugin replacement for Elementor forms
- [ ] Test interactive elements
- [ ] Review page speed improvement (should be noticeable)
## Safety Model
- Read-only analysis first โ full content scan before any changes
- Explicit user confirmation required before creating any duplicates
- Original Elementor pages are never modified or deleted
- All migrated content goes to draft duplicates only
- Never auto-publishes migrated pages
- Takes a `respira_get_snapshot` of each duplicate before any write, so its pre-write state can be restored
- Two explicit rollback paths: restore the snapshot with `respira_restore_snapshot`, or delete the draft duplicates entirely with `respira_delete_page` / `respira_delete_post`
- Surgical fixes (`respira_find_element` + `respira_update_element`, or `respira_batch_update`) replace whole-page rewrites, so corrections stay scoped and reversible
- Warns about significant layout changes before proceeding
## Honest Disclaimer
This skill converts Elementor page content to Gutenberg blocks and creates draft duplicates for review.
It cannot:
- Replicate Elementor's design precision in Gutenberg
- Auto-convert Pro widgets, addon widgets, or forms
- Migrate dynamic content or theme builder templates
- Replace the need for visual review and manual fine-tuning
- Make Gutenberg do things it was not designed for
It can:
- Convert 60-80% of standard Elementor content to clean blocks
- Eliminate your Elementor dependency for simpler pages
- Dramatically improve page load speed (no Elementor CSS/JS overhead)
- Produce clean, standards-compliant WordPress content
- Give you a clear roadmap for what needs manual attention
- Keep your original pages completely untouched
## Tooling
**Core WordPress tools**
- `respira_get_site_context`
- `respira_list_plugins`
- `respira_list_pages`
- `respira_list_posts`
- `respira_read_page`
- `respira_read_post`
- `respira_get_builder_info`
- `respira_extract_builder_content`
- `respira_find_builder_targets`
- `respira_create_page_duplicate`
- `respira_create_post_duplicate`
- `respira_update_page`
- `respira_update_post`
**Safety and precision tools**
- `respira_get_snapshot`
- `respira_restore_snapshot`
- `respira_find_element`
- `respira_update_element`
- `respira_batch_update`
- `respira_delete_page`
- `respira_delete_post`
## Telemetry
After run completion, send fire-and-forget usage tracking to: