Comparing what the scanner finds by rendering the live HTML vs. what Elementor actually wrote to the database. The DB is the source of truth; the scanner is reading the rendered output.
_elementor_data in the DB{
"top_level_sections": 6,
"total_widgets": 28,
"widget_type_counts": {
"heading": 8,
"text-editor": 5,
"image": 5,
"eael-testimonial": 5,
"button": 2,
"animated-headline": 1,
"eael-post-carousel": 1,
"shortcode": 1
}
}
Elementor Pro + Essential Addons for Elementor (eael-*) + Premium Addons Pro. 6 top-level sections, 28 widgets total.
If the scanner ran on the live HTML, here's the class-by-class signal it would pick up:
| DB widgetType | CSS class signal | Scanner role |
|---|---|---|
| heading | .elementor-widget-heading | text-heading |
| text-editor | .elementor-widget-text-editor | content / rich-text |
| image | .elementor-widget-image | image |
| button | .elementor-widget-button | button |
| animated-headline | .elementor-widget-animated-headline | hero (with animation) |
| eael-testimonial | .eael-testimonial | testimonial |
| eael-post-carousel | .eael-post-carousel | carousel |
| shortcode | .elementor-widget-shortcode | shortcode (pass-through) |
| Source | Count | Notes |
|---|---|---|
DB _elementor_data |
28 widgets | Exact count of widget nodes in the Elementor JSON |
| Rendered HTML | ~28 widget elements | One .elementor-widget per widget, plus inner DOM nodes |
Scanner's role_count |
~28 role:<type> nodes | After role-mapping, the scanner should see ~28 distinct blocks |
container > container > 3 widgets. The scanner sees a flat list of nodes.An FVS recipe derived from the scanner is a "best effort" reconstruction. A recipe derived from the DB is the ground truth. The CMS should know which is which.
For the FVS CMS prototype, this is a useful distinction:
confidence: 1.0, every widget gets an editable blockconfidence: 0.6-0.8, scanner-best-guess blocks that may need operator reviewconfidence: 0.4, treated as a snapshot, not editable until re-scanned