๐Ÿ› Dev Log ยท Debugging Diary

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).

Filed under: Elementor ยท JSON ยท WordPress ยท Debugging ยท August 30, 2026

๐Ÿงฑ 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:

An error occurred.
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.

This source does not support 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.

This source does not support 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.

โœ… Fix: click "Back to Library," switch to the My Templates tab, then click Import Template again with the same 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

  • 01
    An 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.
  • 02
    A 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.
  • 03
    Fixing 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."
  • 04
    Before 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.
  • 05
    A 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.

โœจ๐Ÿ›โœจ

Filed away in ELEMENTOR-V04-GUIDE.md for next time โ€” both the fixes that mattered and the ones that didn't, so nobody has to re-learn this the slow way.

SolarBlu
Scroll to Top