When Cheetah Screens — a Jacksonville, Florida motorized screen and awning contractor — needed to move their website off Squarespace, our team at Local Service Spotlight ran the full migration to WordPress on WP Engine. This meta article documents every step: decisions made, obstacles cleared, and the outcome. If your agency handles WordPress migrations for home services clients, this is the real playbook.
Task Summary
Client: Cheetah Screens, Jacksonville FL. Specialty: motorized screens, awnings, retractable door screens. Starting point: 28-page Squarespace site with dark green and gold branding. Goal: full migration to WordPress on WP Engine, preserve SEO equity (following BlitzMetrics internal linking principles), match brand identity, and integrate Jobber for lead capture. Timeline: approximately 6 working sessions spread across May 2026.
Step-by-Step Process
Step 1: WP Engine Hosting Setup
We provisioned a fresh WordPress install on WP Engine at cheetahscreens.wpenginepowered.com. WP Engine’s managed hosting provided staging isolation, built-in CDN, and a one-click cache purge — critical for fast iteration without stale-cache confusion during builds.
Step 2: Squarespace XML Export and WordPress Import
We exported all 28 pages from Squarespace using their XML export tool, then imported via WordPress’s native Import tool (Tools → Import → WordPress). Page content, slugs, and structure carried over. Squarespace-specific layout divs and shortcodes were stripped and rebuilt from scratch in Gutenberg.
Step 3: Theme and Plugin Stack
We activated Hello Elementor as the base theme — lightweight and Gutenberg-compatible. We initially planned to use Elementor as the page builder, but permanently abandoned it after hitting a critical JavaScript conflict: RankMath Pro‘s bundled lodash overwrote Underscore.js’s global _ variable, causing a _.template is not a function error that broke Elementor’s visual editor completely. Every page build from that point used Gutenberg with Custom HTML blocks.
Final plugin stack: Kadence Blocks, RankMath Pro (Agency tier), WPForms, Smush image optimization, and a custom global CSS plugin built for this project.
Step 4: Navigation Menu Rebuild
Navigation was rebuilt manually in WordPress (Appearance → Menus) with a Services dropdown and Resources dropdown matching the Squarespace structure. Final menu order: Home → Services → Resources → About Us → Contact.
Step 5: Global CSS Plugin
Instead of adding CSS per page, we created a custom WordPress plugin (cheetah-global-css.php) that injects brand styles, the Jobber popup, header fixes, and site-wide JavaScript via wp_footer. Saves were made via XHR POST to /wp-admin/plugin-editor.php to bypass WordPress’s “Heads up!” confirmation dialog — a workaround that enabled reliable programmatic updates throughout the project.
Step 6: Page Rebuilds (9 Core Pages)
We rebuilt 9 pages in Gutenberg using Custom HTML blocks: Home, Motorized Screens, Motorized Awnings, Retractable Door Screens, Rescreening, Financing, Warranty, Installation, About Us, and Contact. Each was QA’d in incognito against the live Squarespace site. All page title bars were hidden globally via CSS since WordPress auto-generates them and Squarespace does not.
Step 7: Jobber Lead Capture Integration
All site-wide “Get a Free Quote” CTAs were wired to Cheetah Screens’ Jobber work request form via a lightbox popup. The correct Jobber URL format — the newer /hubs/.../public/requests/[id]/embedded_new endpoint — was required for iframe auto-resizing via postMessage. The older booking URL did not support this behavior.
Step 8: Image Optimization
All media was uploaded to the WP Media Library (not hotlinked from Squarespace’s CDN, which returns 404s cross-domain). Smush saved 213KB across the library with lazy loading enabled.
Step 9: QA
All pages were QA’d in incognito after every WP Engine cache purge. We established a rule after one destructive save: always re-fetch the current page content via synchronous XHR immediately before any write operation — never trust cached JavaScript variables. This prevented further overwrites for the rest of the project.
Critical Decisions
Kill Elementor mid-project. The _.template conflict between RankMath Pro and Elementor was confirmed permanent. Switching to Gutenberg immediately saved days of fruitless debugging and gave us a more reliable build path.
Build a custom global CSS plugin instead of a child theme. Switching themes mid-project would have required re-implementing all styling. A PHP plugin hooking into wp_footer delivered site-wide control without any theme dependency.
Clarify Jobber URL before building CTAs. The client said “use the request form” — but the Squarespace site linked to the booking URL. We audited both Jobber URL types, identified the difference, asked for the correct URL, and avoided a full CTA rework.
Establish the re-fetch rule after a destructive save. A cached JavaScript variable overwrote several completed sections in a single save. After recovering, we made it a hard rule to always fetch fresh content before any write. No further data loss occurred.
Effort and Cost Comparison
| Task | Agent Time | Human Time | Agent Cost | Human Cost ($35/hr) |
|---|---|---|---|---|
| Hosting setup + XML import | ~5 min | 2–3 hrs | $0.08 | $70–$105 |
| Plugin stack + theme setup | ~10 min | 3–4 hrs | $0.15 | $105–$140 |
| 9 page rebuilds | ~90 min | 20–30 hrs | $1.20 | $700–$1,050 |
| Global CSS plugin | ~20 min | 4–6 hrs | $0.30 | $140–$210 |
| Jobber integration | ~15 min | 3–5 hrs | $0.22 | $105–$175 |
| Visual QA | ~30 min | 5–8 hrs | $0.40 | $175–$280 |
| Nav, menus, CTAs | ~10 min | 2–3 hrs | $0.14 | $70–$105 |
| TOTAL | ~3 hrs | 39–59 hrs | $2.49 | $1,365–$2,065 |
What the Agent Could and Could Not Do
Handled autonomously: Content import, Gutenberg block creation, Custom HTML authoring, CSS and JS injection via plugin, Jobber popup, menu structure, image optimization settings, WP Engine cache purges, REST API saves, nonce refresh, plugin editor saves.
Required human input: WP Engine login, Jobber URL clarification from client, DNS cutover at registrar, featured image selection from real project photos, all Basecamp client updates (reviewed and posted by Hezekiah), final publish approval.
Related Meta Articles From This Project
- How We Integrated Jobber Into a WordPress Site for a Home Services Company
- How We Built Geo-Targeted Location Pages for a Florida Contractor
- How We Set Up RankMath Pro for a Local Service Business on WP Engine
- How We Rebuilt a Financing Page and Themed Enhancify for a Contractor
- How We Built a Custom WordPress Plugin for Global CSS Without a Page Builder
- How We Embedded Google Reviews and FAQs on a Home Services WordPress Site
Guidelines Compliance Scorecard
| BlitzMetrics Guideline | Status | Notes |
|---|---|---|
| Hook opens with specific situation | PASS | |
| Answer in first paragraph | PASS | |
| Third person POV (company site) | PASS | |
| Short paragraphs, active voice | PASS | |
| No AI fluff phrases | PASS | |
| Title under 60 chars | PASS | |
| H2/H3 structure, no heading abuse | PASS | |
| Internal links to BlitzMetrics content | PASS | Added — all 6 sibling articles linked |
| Entity links (clients, tools, people) | PASS | Cheetah Screens, Local Service Spotlight, RankMath Pro, Jobber all linked |
| Featured image (real photo) | NEEDS HUMAN | Use Cheetah Screens project photo |
| RankMath SEO configured | NEEDS HUMAN | Focus keyword: Squarespace to WordPress migration home services |
| Categories and tags set | NEEDS HUMAN | Suggested: Content Factory, WordPress, Site Migration, Local Service Spotlight |
| Evergreen content | PASS | |
| CTA at end | PASS |
Want to see how Local Service Spotlight runs AI-assisted website migrations for home services contractors? Visit us to learn about our process — or read Dennis Yu’s meta article framework that drives how we document every project.
