My WordPress sites were slow. Not unusably slow, but slow enough that I knew I could do better.

Three seconds to first contentful paint. Every page. Every load. Acceptable, sure. But I was leaving conversion on the table.

So in February, I rebuilt two of my sites in Astro and deployed them to Cloudflare Pages. First contentful paint is now 0.4 seconds.

Here's why I did it, what broke, and whether you should care.

Why WordPress got slow

WordPress sites get slow because of: 1. Plugins — Every plugin you install makes your site slightly slower 2. Database queries — Each page load hits the database multiple times 3. Image optimization — Photos need to be optimized for mobile, desktop, retina, etc. WordPress doesn't handle this elegantly by default 4. Caching complexity — WordPress needs plugins to cache. Then those plugins need configuration. Then they conflict with other plugins.

I had 12 plugins. Good plugins, but 12 nonetheless. The site was doing 50+ database queries per page load.

Also, WordPress hosting (I used Kinsta, which is actually good) costs $35+/month. Good hosting, but expensive for a simple blog.

What's Astro

Astro is a static site generator. The distinction matters:

WordPress: Server gets request → queries database → runs PHP → generates HTML → sends to browser

Astro: You build the site once → generates HTML files → server just serves the files

The second is way faster because there's no computation happening at request time.

Astro is specifically good because: 1. You can use modern JavaScript frameworks (React, Vue, Svelte) but they only run where you need them 2. It generates static HTML by default 3. It's fast to build 4. Cloudflare Pages (where I host) is basically free ($0 for small projects)

The build process (for non-technical people)

Instead of WordPress's admin dashboard, you write your content in markdown files. Your computer runs a build process that turns those markdown files into HTML. Then you push those HTML files to Cloudflare Pages.

On every deploy, Cloudflare rebuilds your site and pushes it to its global CDN. Now your site is served from the edge, not from a central server.

This is why it's fast.

The honest conversion numbers

Old site (WordPress on Kinsta):

  • First Contentful Paint: 3.2 seconds
  • Cumulative Layout Shift: 0.15
  • Monthly visitors: 8,200
  • Conversion rate (newsletter signup): 2.1%
  • New site (Astro on Cloudflare Pages):

  • First Contentful Paint: 0.4 seconds
  • Cumulative Layout Shift: 0.02
  • Monthly visitors: 9,100 (after two weeks)
  • Conversion rate: 3.8%
  • The faster site converted better. Whether that's causation (people sign up because it's fast) or correlation (I also improved the copy) is unclear. Probably both.

    Newsletter signups are up 40% in two weeks.

    What broke

    WordPress admin dashboard is gone. Now I have to:

  • Write posts in a markdown editor (I use VS Code)
  • Preview locally before deploying
  • Commit changes to Git (not a big deal, but it's a step)
  • Deploy manually (or set up a CI/CD pipeline)
  • If I misspell something, I don't fix it in an admin panel. I fix the markdown file and redeploy.

    This is actually slower for quick corrections. With WordPress, I'd fix a typo in 10 seconds. With Astro, I'd edit the markdown, rebuild, and deploy (2 minutes).

    Also, I lost:

  • The WordPress admin experience (which is good, even if slow)
  • Easy content scheduling (Astro can do this, but it requires a bit of setup)
  • Live previews while editing
  • Plugins that added functionality (related posts, similar products, etc.)
  • Those plugins are useful. Now if I want that functionality, I have to write custom code.

    The cost comparison

    WordPress:

  • Hosting: $35/month
  • Domain: $12/year
  • Maintenance: ~5 hours/year (updates, security, plugin conflicts)
  • Total: ~$425/year
  • Astro + Cloudflare:

  • Hosting: $0 (free tier)
  • Domain: $12/year
  • Maintenance: ~2 hours/year
  • Development time to migrate: 8 hours (one-time)
  • Total: $12/year + 8 hours
  • The 8 hours is the kicker. But if you're building a new site, you don't have that cost.

    Who should switch

    You should switch if:

  • Your blog doesn't need frequent updates
  • You're comfortable with Git and command line
  • You want faster sites
  • You don't need a complex plugin ecosystem
  • You're willing to spend 8-16 hours migrating
  • You shouldn't switch if:

  • You update your blog multiple times per day
  • You want a graphical interface for editing
  • You have non-technical team members who need to edit content
  • You need specific WordPress plugins
  • The bigger picture

    The web is moving away from CMS-centric architecture. Instead of WordPress doing everything (hosting, rendering, database), services are specializing.

    Astro handles static generation. Cloudflare handles CDN and edge computing. If you need a database, you use something like Supabase. If you need a CMS interface, you plug in Decap CMS or Sanity.

    It's more complex to set up, but once it's set up, it's faster, cheaper, and more maintainable.

    Would I do it again

    Yeah. The performance gains are real. The cost savings are real. The developer experience is better.

    But I'm not going to migrate my high-traffic sites. One of my authority sites gets 50K visits per month and serves AdSense. The revenue justifies WordPress hosting and the ecosystem complexity.

    But for new projects and smaller sites? Astro + Cloudflare is my default now.

    The learning curve

    One thing I didn't mention: Astro has a steeper learning curve than WordPress.

    You need to be comfortable with:

  • Git (version control)
  • Markdown (formatting)
  • Terminal commands
  • Basic development concepts
  • If you're non-technical, WordPress is still better. The admin interface is good. Things are documented. You can Google your way through problems.

    Astro requires you to be willing to code a bit. Not a lot, but some.

    Hybrid approach

    You don't have to choose. Some people run Astro for the blog and WordPress for e-commerce or membership. The combination works.

    Or you could use a headless WordPress (database only) + Astro (frontend). That gives you WordPress content management + Astro performance.

    That's probably the future, actually. WordPress gets good at managing content. Astro/Next.js/whatever gets good at presenting it fast.

    The real conclusion

    The web is moving toward decoupled architecture. The tool that stores your content (CMS) is separate from the tool that displays it (static generator or framework).

    WordPress was an all-in-one solution. That made sense when the alternatives sucked. Now the alternatives are better for specific use cases.

    Pick the architecture that makes sense for your specific needs. Don't pick based on what you know. Pick based on what makes business sense.

    That's the competitive advantage now.