[{"data":1,"prerenderedAt":387},["ShallowReactive",2],{"blog-/en/wordpress-migration-walkthrough":3,"blog-related-/en/wordpress-migration-walkthrough":287},{"id":4,"title":5,"author":6,"body":7,"date":270,"description":271,"extension":272,"image":273,"meta":274,"navigation":275,"path":276,"seo":277,"stem":278,"tags":279,"__hash__":286},"blog/en/wordpress-migration-walkthrough.md","Migrating a 40-Page Site Off WordPress: An Honest, Start-to-Finish Walkthrough","Martin Swoboda",{"type":8,"value":9,"toc":255},"minimark",[10,14,18,31,38,43,46,49,53,65,68,72,85,88,92,102,105,109,120,130,134,137,141,144,147,151,154,158,174,177,181,184,224,227,231,234,245,248],[11,12,5],"h1",{"id":13},"migrating-a-40-page-site-off-wordpress-an-honest-start-to-finish-walkthrough",[15,16,17],"p",{},"Most \"switch away from WordPress\" articles are sales pages in disguise. They tell you migration is a thirty-minute magic trick, skip the messy parts, and end with a button. This isn't that. This is the actual run we did last week, moving a real customer site — 40 pages, a blog with 60 posts, a contact form, and 1.2 GB of media — from a self-hosted WordPress install to Neleto.",[15,19,20,21,25,26,30],{},"Here's the honest headline: the ",[22,23,24],"em",{},"content migration itself"," — export, import, media — took under an hour of hands-on work. The core content move is genuinely fast. But a real cutover isn't just the content. It's rebuilding the page-builder pages, setting up redirects, swapping the forms, moving the domain, waiting for DNS to propagate, and doing a proper QA pass across every page. Add all of that up and it was ",[27,28,29],"strong",{},"about a working day, start to finish"," — most of it waiting, not clicking.",[15,32,33,34,37],{},"That's the number we'd want someone to tell ",[22,35,36],{},"us",". So here's exactly how it went, including the two things that went wrong.",[39,40,42],"h2",{"id":41},"why-this-site-was-leaving-wordpress","Why this site was leaving WordPress",[15,44,45],{},"The customer is a small German agency running sites for their own clients. Their complaint wasn't ideological. WordPress worked. It was just expensive to keep working: a managed host at €39/month, a security plugin subscription, a caching plugin, monthly update windows where something usually broke, and a recurring worry about where plugin vendors were sending their visitors' data. For a DSGVO-conscious agency, that last one mattered most.",[15,47,48],{},"They wanted three things: predictable hosting in the EU, no plugin update treadmill, and content they could edit by prompt instead of wrestling with the block editor. That's a migration, not a tune-up.",[39,50,52],{"id":51},"step-1-export-about-5-minutes-of-clicking-then-a-long-wait","Step 1 — Export (about 5 minutes of clicking, then a long wait)",[15,54,55,56,59,60,64],{},"WordPress exports its content as a WXR file (it's just XML) from ",[27,57,58],{},"Tools → Export",". We pulled \"All content.\" Media files don't live in that XML — they're referenced by URL — so we also grabbed the ",[61,62,63],"code",{},"/wp-content/uploads"," folder over SFTP in parallel.",[15,66,67],{},"That folder transfer was the slowest single thing in the whole process. 1.2 GB over a residential connection isn't instant, and it ran in the background for the better part of an hour while we did other things. Nothing to babysit — but it's the first place the \"30-minute migration\" story quietly falls apart. The clicking is fast. The bytes moving are not.",[39,69,71],{"id":70},"step-2-import-into-neleto-about-10-minutes","Step 2 — Import into Neleto (about 10 minutes)",[15,73,74,75,80,81,84],{},"Neleto reads WXR directly. Pages became pages, posts became blog entries, and categories and tags carried over as-is. The ",[76,77,79],"a",{"href":78},"/docs/guides/import-pages","importer"," maps WordPress's flat structure onto Neleto's content model automatically, so we didn't hand-build a single schema. Media uploaded to EU-hosted storage and the importer rewrote the old ",[61,82,83],{},"wp-content"," URLs to point at the new locations.",[15,86,87],{},"This is the part that actually is fast, and it's the part the sales pages are technically not lying about. If your site is content-heavy and plugin-light, you could be looking at your imported pages inside ten minutes.",[39,89,91],{"id":90},"step-3-rebuild-the-page-builder-pages-about-20-minutes","Step 3 — Rebuild the page-builder pages (about 20 minutes)",[15,93,94,97,98,101],{},[27,95,96],{},"Gotcha #1:"," Three posts used a page-builder plugin (Elementor) whose layout lives in proprietary shortcodes, not standard HTML. Those came in as raw shortcode text. The importer can't know what ",[61,99,100],{},"[ult_buttons]"," means — nobody can. We rebuilt those three pages by hand in about twenty minutes.",[15,103,104],{},"If your site leans heavily on a page builder, budget real time for this. It's the honest asterisk on every \"one-click migration\" claim, ours included. The upside: rebuilt in Neleto, those pages are now plain components anyone can edit — no shortcode syntax, no locked-in builder.",[39,106,108],{"id":107},"step-4-redirects-about-15-minutes","Step 4 — Redirects (about 15 minutes)",[15,110,111,112,115,116,119],{},"This is the step people forget and then lose their search rankings over. WordPress permalinks (",[61,113,114],{},"/2024/03/post-name/",") rarely match a new CMS's URLs one-to-one. We exported the old URL list, generated a redirect map, and imported it. Neleto handles 301s natively, so there was no ",[61,117,118],{},".htaccess"," to babysit.",[15,121,122,125,126,129],{},[27,123,124],{},"Gotcha #2:"," The old site had a ",[61,127,128],{},"?p=123","-style query permalink structure on a handful of legacy links from an email campaign. Those needed manual redirect rules. Five total. Worth checking your analytics for any odd inbound URLs before you cut over — it's five minutes now versus a month of 404s later.",[39,131,133],{"id":132},"step-5-forms-about-15-minutes","Step 5 — Forms (about 15 minutes)",[15,135,136],{},"The contact form was a WordPress plugin posting to the site's own database. We replaced it with Neleto's built-in form handler, which stores submissions in the EU and emails the agency on receipt — no third-party form SaaS, no US data transfer. Rebuilding the fields and sending a couple of test submissions to confirm the mail landed took about fifteen minutes.",[39,138,140],{"id":139},"step-6-the-domain-and-dns-cutover-about-10-minutes-of-work-then-hours-of-waiting","Step 6 — The domain and DNS cutover (about 10 minutes of work, then hours of waiting)",[15,142,143],{},"Here's the other place the clock stops being about you. Pointing the domain at Neleto is ten minutes of actual work: update the records, done. Then you wait for DNS to propagate. In our case most resolvers picked up the change within a couple of hours, but you can't rush it and you shouldn't cut over your MX and traffic until you've confirmed it's clean.",[15,145,146],{},"We kept the old WordPress host live during propagation so nobody hit a dead site mid-switch, watched the first agent and human requests land on the new stack, and only then decommissioned the old box. This is the single biggest reason \"half an hour\" is a fantasy: the internet's caches don't care how fast your CMS is.",[39,148,150],{"id":149},"step-7-qa-pass-about-45-minutes","Step 7 — QA pass (about 45 minutes)",[15,152,153],{},"Last, we walked every one of the 40 pages and spot-checked the 60 blog posts: images loading from the new EU storage, internal links resolving, the rebuilt Elementor pages looking right, redirects firing, the form emailing. Found and fixed a few internal links that still pointed at the old domain. Boring, essential, and the step that separates \"it's live\" from \"it's actually done.\"",[39,155,157],{"id":156},"the-honest-clock","The honest clock",[159,160,161,168],"ul",{},[162,163,164,167],"li",{},[27,165,166],{},"Hands-on-keyboard time:"," roughly 90 minutes across the whole thing.",[162,169,170,173],{},[27,171,172],{},"Elapsed, start to finish:"," about a working day — dominated by the 1.2 GB media transfer and DNS propagation, both of which are waiting, not working.",[15,175,176],{},"So: fast where the sales pages promise fast (the content import), and honestly slow where every migration is slow (moving bytes, moving domains, checking your work). Anyone who tells you a real 40-page cutover is thirty minutes flat is selling you the demo, not the day.",[39,178,180],{"id":179},"what-changed-measured-honestly","What changed, measured honestly",[15,182,183],{},"The numbers after one week, not promises:",[159,185,186,201,207,213],{},[162,187,188,191,192,196,197,200],{},[27,189,190],{},"Hosting cost:"," €39/month → €59/month flat for the Neleto ",[76,193,195],{"href":194},"/pricing","Team plan",", but that one plan replaced the host ",[22,198,199],{},"and"," two paid plugins the customer was running (roughly €25/month combined). Net, slightly cheaper, with one bill instead of three.",[162,202,203,206],{},[27,204,205],{},"Largest Contentful Paint:"," 2.9s → 0.8s on the homepage. The Rust backend and no plugin overhead do most of that work.",[162,208,209,212],{},[27,210,211],{},"Update windows:"," gone. There's no plugin stack to patch.",[162,214,215,218,219,223],{},[27,216,217],{},"Data location:"," every byte — content, media, form submissions — now sits on ",[76,220,222],{"href":221},"/blog/eu-hosting-compliance","EU infrastructure"," with no US Cloud Act exposure.",[15,225,226],{},"What didn't improve: the three rebuilt pages took real human effort, and the agency had to relearn where a few settings live. Migration removes a treadmill; it doesn't remove a learning curve.",[39,228,230],{"id":229},"should-you-do-this","Should you do this?",[15,232,233],{},"If your WordPress site is content-heavy and plugin-light, a migration like this is genuinely a half-day-to-a-day job and pays for itself in saved maintenance within a quarter. If your site is a pile of page-builder layouts and 30 plugins, be honest with yourself: that's a rebuild wearing a migration costume, and it'll take longer.",[15,235,236,237,240,241,244],{},"Either way, the ",[76,238,239],{"href":78},"content import"," is the free, reversible part — so that's where to start. Run it, look at your pages inside Neleto, and ",[22,242,243],{},"then"," decide whether the rest of the day is worth it. For most content sites we've moved, it is.",[15,246,247],{},"We'll keep publishing these as we run them, gotchas included. If you want us to look at your specific site before you commit, the export step costs you nothing.",[15,249,250,251,254],{},"— ",[27,252,253],{},"Start free at neleto.io"," · the only CMS with a native MCP server, hosted in the EU.",{"title":256,"searchDepth":257,"depth":257,"links":258},"",2,[259,260,261,262,263,264,265,266,267,268,269],{"id":41,"depth":257,"text":42},{"id":51,"depth":257,"text":52},{"id":70,"depth":257,"text":71},{"id":90,"depth":257,"text":91},{"id":107,"depth":257,"text":108},{"id":132,"depth":257,"text":133},{"id":139,"depth":257,"text":140},{"id":149,"depth":257,"text":150},{"id":156,"depth":257,"text":157},{"id":179,"depth":257,"text":180},{"id":229,"depth":257,"text":230},"2026-07-13","The content migration took under an hour. The full cutover — domain, DNS, redirects, forms, QA — took the better part of a day. Here's every step, every gotcha, and the parts the migration guides skip.","md","/img/blog/wordpress-migration-walkthrough.svg",{},true,"/en/wordpress-migration-walkthrough",{"title":5,"description":271},"en/wordpress-migration-walkthrough",[280,281,282,283,284,285],"WordPress","Migration","CMS","GDPR","EU Hosting","Neleto","737hfmJk00RePM-UghvWuvBNEyXDCjfY70oEJzlmj88",[288,290,301,311,321,332,340,351,360,370,378],{"path":276,"title":5,"description":271,"date":270,"author":6,"image":273,"tags":289},[280,281,282,283,284,285],{"path":291,"title":292,"description":293,"date":294,"author":6,"image":295,"tags":296},"/en/html-to-editable-cms","I turned a static HTML page into an editable CMS site with one prompt","Web designers lose days rebuilding finished designs as a CMS. Here's how Neleto's native MCP server does it from a single prompt — animations, custom cursor and all.","2026-07-06","/img/blog/html-to-editable-cms.svg",[297,298,299,300,282,285],"MCP","AI Agents","Web Design","Claude Code",{"path":302,"title":303,"description":304,"date":305,"author":6,"image":306,"tags":307},"/en/console-launch-free-tier","Neleto Console Is Live — and the Free Tier Is Open","Sign up at console.neleto.io, get a real CMS, and pay us nothing. Here's why we built it that way.","2026-06-29","/img/blog/console-launch-free-tier.svg",[308,285,309,310,284,282],"Build in Public","Free Tier","Self-Serve",{"path":312,"title":313,"description":314,"date":315,"author":6,"image":316,"tags":317},"/en/mcp-server-explained","MCP Server Explained: The Deep Dive","How the Model Context Protocol enables secure, native AI agent interaction with your applications — and why native implementation matters.","2026-06-22","/img/blog/mcp-server-explained.svg",[297,318,319,298,320],"MCP Server","Model Context Protocol","AI Integration",{"path":322,"title":323,"description":324,"date":325,"author":6,"image":326,"tags":327},"/en/neleto-vs-contentful","Neleto vs Contentful: Which CMS Should You Choose in 2026?","A practical comparison for developers, agencies, and growing businesses — covering pricing, performance, AI integration, editor experience, and EU compliance.","2026-06-16","/img/blog/neleto-vs-contentful.svg",[285,328,329,330,331],"Contentful","Headless CMS","CMS Comparison","AI CMS",{"path":333,"title":334,"description":335,"date":336,"author":6,"image":337,"tags":338},"/en/agentic-traffic-surpassed-humans","Bots Just Out-Numbered Us: What the Agentic Web Means for Your CMS","Cloudflare says AI agents now drive the majority of web traffic — 18 months early. Here's why that changes how you publish content, and what to do about it.","2026-06-08","/img/blog/agentic-traffic-surpassed-humans.svg",[339,298,297,282,285],"Agentic Web",{"path":341,"title":342,"description":343,"date":344,"author":6,"image":345,"tags":346},"/en/glw-gmbh-case-study","Modernizing a 40-Year Family Business: GLW GmbH's New Website with Neleto","How we delivered a fast, multilingual, and CRM-integrated website for a leading German cable processing specialist — in close collaboration with agency Inhalt.","2026-06-05","/img/blog/glw-gmbh-case-study.svg",[347,348,285,349,350],"Case Study","Customer Story","CRM Integration","Custom Plugin",{"path":352,"title":353,"description":354,"date":355,"author":6,"image":356,"tags":357},"/en/eu-hosting-compliance","Why EU Hosting Compliance Matters for Your Website","Data sovereignty, GDPR, and choosing the right infrastructure in 2026","2026-06-01","/img/blog/eu-hosting-compliance.svg",[283,284,358,359,285],"Data Compliance","Privacy",{"path":361,"title":362,"description":363,"date":364,"author":6,"image":365,"tags":366},"/en/buergerstiftung-ravensburg","Bürgerstiftung Ravensburg: A Modern Website for Community Impact with Neleto","How we built a clear, fast, and emotionally engaging website for a regional community foundation using Neleto CMS — in close collaboration with agency Inhalt.","2026-05-29","/img/blog/buergerstiftung-ravensburg.svg",[347,367,368,285,369],"Nonprofit","Foundation","Website",{"path":371,"title":372,"description":373,"date":374,"author":6,"image":375,"tags":376},"/en/what-is-mcp","What is the Model Context Protocol (MCP)?","The new standard connecting AI agents to your tools and data","2026-05-25","/img/blog/what-is-mcp.svg",[297,377,319,298,282],"AI",{"path":379,"title":380,"description":381,"date":382,"author":6,"image":383,"tags":384},"/en/why-neleto-exists","Why Neleto Exists","The CMS Built for Speed, Simplicity, and the AI Era","2026-05-18","/img/blog/why-neleto-exists.svg",[282,377,385,386,285],"Web Development","Performance",1784008723312]