The Case of the Uncooperative Import
How a perfectly valid JSON file got rejected by Elementor three times in a row โ and what actually turned out to be wrong (twice, sort of, but not really).
๐งฑ The Setup
It started simply enough: turn a landing page mockup into a working page โ a "V3" portfolio site with a hero section, an about block, a project grid, the usual. Nothing fancy. The twist was the destination: not a plain HTML file, but an Elementor v0.4 JSON template, built to spec against an existing internal guide (ELEMENTOR-V04-GUIDE.md) written from a previous, successful conversion.
The guide was detailed. Root-level content array, e-flexbox containers, html widgets instead of the broken e-heading type, a checklist, even a script-based validation step. Everything by the book.
It should have just worked.
โ First Try, First Fail
Upload the file. Wait for the little success toast. Instead:
This source does not support import.
No line number. No stack trace. Just five words standing between a finished JSON file and an actual working page. Time to start guessing โ carefully, and with receipts.
๐ต๏ธ Chasing Ghost #1: The Hex IDs
Dead end (but real)
The first real break came from a lucky find: a genuine Elementor export sitting in a project folder from an earlier, successful conversion. Diffing it against the failing file line by line turned up something interesting โ every single id field in the real export was a lowercase hex string:
"id": "6770b6d" โ real Elementor id "id": "v3_header_section" โ what the new file had
Readable, human-friendly ids like v3_header_section versus opaque hex like 6770b6d. It felt like the smoking gun โ surely a strict importer would choke on IDs that don't match its own generator's format.
So: regenerate every id as 7-character hex, matching the working file exactly. Re-run the import.
Same error. Not it โ or at least, not all of it. (Spoiler: it was still worth fixing. More on that below.)
๐ป Chasing Ghost #2: The Widget Shape
Dead end (but also real)
Round two arrived with a second genuine export โ this time a small "hero banner" template pulled straight from Elementor's editor, containing a tell no one would ever fake: an auto-injected internal default value, "_flex_align_self": "center", sitting quietly in a widget's settings. That's not something a human writes by hand. That's Elementor talking to itself.
Comparing widget shapes turned up a real discrepancy: the guide's own documented widget example carried four extra fields โ
"styles": [], "interactions": [], "editor_settings": [], "version": "0.0"
โ and real widgets don't have any of them. Those fields belong only on the e-flexbox containers. Two independent genuine exports agreed on this. The guide itself had it wrong the whole time.
Stripped the four extra fields off every widget. Re-validated everything with a script (tag-nesting checks, structural assertions, the works). Re-ran the import.
Still. The. Same. Error.
๐ก The Actual Culprit
The real fix
The breakthrough wasn't in the JSON at all. It was in a screenshot โ a look at the actual browser window mid-import. The URL bar told the real story: post.php?post=291&action=elementor. This wasn't the plain wp-admin Templates screen. This was the in-editor "Add Template" flyout โ the little folder icon inside the live Elementor page builder โ and its dialog title read: "Import Template to Your Library."
That flyout has multiple tabs: My Templates, Cloud Templates, Blocks, Pages. It remembers whichever tab was open last. And critically โ only the local My Templates tab actually implements import. Every other tab throws exactly the error seen here, word for word, regardless of what's inside the uploaded file.
It worked. First try. The JSON had been fine for at least one of the last two rounds โ the UI was just pointed at the wrong shelf.
๐ The Timeline
- ๐งฑBuilt the JSON โ followed the existing guide exactly. Looked correct.
- โImport #1 fails โ "This source does not support import."
- ๐Found a real working export โ diffed it, found non-hex ids.
- ๐งFixed the ids โ re-ran import. Same error.
- ๐Found a second real export โ diffed it, found the widget-shape bug in the guide itself.
- ๐งFixed the widget shape โ re-ran import. Same error, again.
- ๐ธGot a screenshot of the actual dialog โ spotted the "Your Library" flyout and the URL bar.
- ๐ฏSwitched to the "My Templates" tab โ import succeeded immediately.
- ๐Shipped it โ and rewrote the guide so the next person skips two of these three steps.
๐ Lessons Learned
- 01An exact error string is a gift.
"This source does not support import"is Elementor's own literal, hard-coded message โ worth treating as a search query for the actual source, not just a vague symptom to reason around. - 02A genuine, unedited export beats any written guide โ including one written from a prior "successful" conversion. Look for tells like auto-injected default values that only the real tool would produce; that's how you know you're looking at ground truth and not someone's guess.
- 03Fixing a real bug doesn't mean you fixed the bug. Both structural corrections here were legitimate and worth keeping โ neither was the actual cause of this specific error. Two things can be true: "this is wrong" and "this isn't why it's failing."
- 04Before assuming a file is corrupt, check where it's being dropped. A UI element remembering the wrong tab produced an error that looked, for two rounds, exactly like a content problem.
- 05A screenshot of the actual failure, at the actual moment, beats another round of guessing every time. It ended the debugging loop instantly.
๐ FAQ โ Installing a Template
The support questions that'll actually come up. Bookmark this bit.
I get "This source does not support import" โ what do I do?
You're almost certainly inside the Elementor editor's in-editor "Add Template" flyout (the folder icon on a page's edit screen), and its tab is stuck on Cloud Templates, Blocks, or Pages instead of the local library. Click Back to Library, switch to the My Templates tab, then hit Import Template again with the same file. This error has nothing to do with the file's content.
Where do I actually go to import a template file?
The most reliable path: wp-admin โ Templates โ Saved Templates โ Import Templates. That screen is always bound to the local source, so the tab-mismatch error above can't happen there. It's a better first choice than the in-editor flyout if you just want the import to work.
What file type should I upload โ .json or .zip?
A single-page or single-section template is a plain .json file โ upload it as-is, no zipping needed. A .zip is only for a full Kit (Site Settings โ Tools โ Import/Export Kit), which expects a manifest.json inside the archive. Uploading a loose .json to the Kit importer, or a Kit .zip to the template importer, will fail โ they're two different tools.
Headings show "Type Heading Text Here" instead of my real text.
That's the e-heading widget failing to render its content. Convert it to an html widget with plain <h1>/<h2> tags inside โ that always displays correctly.
Everything imported into one horizontal row instead of stacking.
The container is missing "flex-direction": "column" in its style variant. Every e-flexbox container needs it explicitly โ Elementor doesn't default to column for these.
The page is completely blank after importing โ nothing shows up at all.
Before suspecting the template: deactivate all WordPress plugins and reload the page. A plugin conflict with Elementor's rendering on that page/template is a more common cause of a totally blank result than a broken JSON file. Reactivate plugins one at a time on a test page to find the culprit if it comes back.
Do I need Elementor Pro to import these templates?
No โ these are built entirely from the free html (and occasionally video/button) widget types plus flexbox containers, all available in free Elementor. If a specific template does use a Pro-only widget, that widget type will be named explicitly in its notes.
An embedded video or interactive element isn't working after import.
First, confirm the surrounding HTML actually rendered โ that alone doesn't prove any embedded <script> or iframe is running. Open the live page and test the specific interactive piece directly. If it's a dedicated Elementor video widget and it looks visually disconnected from its section's background, that's expected โ it's a separate flex item with its own plain background. Embedding a raw <iframe> inside the same html widget as the surrounding content avoids that seam.
Can I still edit the page visually in Elementor after importing?
Yes. Once imported, it's a normal Elementor page made of real containers and widgets โ click into any section like you would with anything else you built directly in the editor. Content inside an html widget edits as one HTML block rather than as individual text fields, since that's how that widget type works.