respira-press/agent-skills-wordpress/migrate-elementor-to-gutenberg
Claude Code and agent skill by respira-press/agent-skills-wordpress
- community
- ext:[{"type":"plugin","description":"Custom plugin integration"}]
Checking that the SKILL.md file is still in the repository.
Use when the user says 'migrate elementor to gutenberg', 'convert elementor to blocks', 'remove the elementor dependency', or 'go back to native wordpress'. Maps Elementor widgets to core blocks and creates draft duplicates for review.
Install
npx vskill@latest install respira-press/agent-skills-wordpress/migrate-elementor-to-gutenbergSemi-extensibleMentions customization, but needs skill-specific knowledge. Read the extensible skills standard
SKILL.md
Migrate Elementor to Gutenberg
Version: 2.2.0 Updated: 2026-09-13 Freshly updated: v2.1.0 adds design-token awareness: conversion writes register the colors, font families and font sizes they carry as named presets in the block editor's own global styles (the palette, fontFamilies and fontSizes), and converted pages reference those presets instead of carrying value copies. A font token named for the body or heading also sets the site-wide body or heading font; font weights are not registered. Reuse registered tokens instead of re-inlining raw values, and report the registration in the migration summary.
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 17 page builders Respira reads and writes natively, so extraction and the block write run through the same builder-aware tooling Respira uses everywhere else.
Handles:
- Section/Column layouts → Group and Columns blocks with appropriate width settings
- Text Editor → Paragraph blocks (preserving inline formatting)
- Heading → Heading block (h1-h6 mapping)
- Image → Image block (with alt text, caption, link)
- Video → Video or Embed block (YouTube/Vimeo detected)
- Button → Buttons block (with link, style, colors)
- Icon List → List block
- Spacer → Spacer block
- Divider → Separator block
- Google Maps → Custom HTML block with embed
- Tabs, Accordion → Group blocks with Details block (WP 6.3+) or HTML fallback
- Image Gallery → Gallery block
- Counter, Progress Bar → HTML or Group block approximations
- Custom HTML → Custom HTML block (direct transfer)
- Responsive visibility → block-level responsive classes (theme-dependent)
Preserves:
- 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.
- Third-party addon widgets — Essential Addons, JetElements, Crocoblock widgets cannot be auto-mapped.
- Dynamic content — ACF fields, custom loops, and dynamic tags require separate solutions (ACF blocks, custom block patterns, or Query Loop block).
- Theme Builder templates — Headers, footers, archive templates are outside page content scope.
- 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:
Key Elementor specifics:
- Widget types are in the
widgetTypefield (e.g.,heading,text-editor,image,button) - Responsive settings use suffixes:
margin,margin_tablet,margin_mobile - CSS is cached in
_elementor_csspost meta — not needed for migration but useful for verification - Page settings in
_elementor_page_settings(page layout, hide title, etc.) - Global widgets reference a template via
templateID— must be resolved before mapping - Nested sections (Inner Section widget) create sub-layouts within columns
Read Elementor content via respira_extract_builder_content with builder=elementor.
Target: Gutenberg (Block Editor)
Gutenberg stores content directly in post_content as HTML with block comment delimiters:
Key Gutenberg specifics:
- Block attributes are JSON in the opening comment:
<!-- wp:image {"id":123,"sizeSlug":"large"} --> - Layout blocks:
wp:group,wp:columns,wp:column - 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
- Verify Respira + MCP connection via
respira_get_site_context. If unavailable, stop and show setup guidance. - Confirm Elementor is active via
respira_list_plugins. - Check WordPress version (6.0+ required, 6.3+ ideal).
- Identify active theme — note if it is block-theme compatible.
- 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 torespira_list_pages/respira_list_posts+respira_get_builder_infoto confirm builder per item where needed. - For each Elementor page, extract content via
respira_extract_builder_contentwithbuilder=elementor - 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)
- Estimated migration complexity (simple/moderate/complex)
Phase 2: Migration Plan
Present a detailed plan acknowledging that Gutenberg migration involves the most interpretation:
Ask for confirmation:
This migration will produce cleaner, faster-loading pages but with simpler layouts than Elementor.1. Migrate all pages2. Migrate specific pages3. Start with a test page (recommended for complex sites)4. Just keep this plan
Phase 3: Page-by-Page Migration
For each approved page:
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/migrate-elementor-to-gutenberg/SKILL.md
Popularity
- Repository stars
- 49
- Repository forks
- 8
- 7-day trend score
- 19
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Extension points
pluginCustom plugin integration
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/respira-press/agent-skills-wordpress/migrate-elementor-to-gutenberg)