Home / Blog / From WordPress to Astro. A Casino Affiliate Site Migration in 22 Days
Case Study 5 August 2026 7 min read

From WordPress to Astro. A Casino Affiliate Site Migration in 22 Days

How I migrated casinoroyale.ee from WordPress to Astro, fixed critical technical SEO issues, and achieved a 99 Lighthouse performance score across 156 pages in 4 languages.

LB
Lee Beirne
leebeirne.com

CasinoRoyale.ee (Eesti Online Kasiinod) was running on WordPress with LiteSpeed, AIOSEO Pro, and TranslatePress for multi-language support. The site had been live for years, but it was not ranking for any of its target keywords. The overall SEO score was 34 out of 100. Something was fundamentally broken.

Twenty-two days later, the site was running on Astro with Vercel edge deployment, scoring 99 on Lighthouse Performance, 100 on Lighthouse SEO, and 98.9 on DataForSEO's on-page analysis. Here is exactly what happened, what broke, and what comes next.

The Problem: WordPress Holding the Site Back

The WordPress stack had accumulated years of issues that were actively suppressing rankings. The audit revealed a pattern of compounding problems:

Crawling was blocked. DataForSEO's onpage bot returned status 0 for every URL tested. The server's WAF was blocking known crawlers beyond Googlebot. If the server blocks the tools that measure ymy site, it is probably blocking other legitimate crawlers too.

The sitemap was frozen. Every lastmod date in the sitemap was over a year old. Google deprioritises sitemaps whose lastmod never changes. It signals an abandoned site.

Hreflang was duplicated. The homepage had 6 hreflang tags, but both en and en-GB pointed to the same URL. Same for ru and ru-RU. There was no x-default tag. Google was getting contradictory signals about which locale to serve.

Auto-translation created doorway pages. TranslatePress was generating /en/, /fi/, and /ru/ mirrors of every page through machine translation. English text was leaking into the Estonian pages. In a YMYL gambling niche, auto-translated content is treated as low-quality doorway content by Google.

The backlink profile was toxic. Spam score 54, 96% nofollow, 785 broken backlinks. The domain had effectively no authority.

Content was thin. The homepage had fewer than 300 words of prose. No E-E-A-T signals. No structured data beyond basic AIOSEO output. No FAQ sections. No review schema.

The site scored 38 on technical, 28 on content, and 15 on authority. It was technically functional but strategically invisible.

The Decision: Why Astro, Not Another WordPress Fix

I considered fixing WordPress. Install better plugins, configure the server properly, add security headers, fix the sitemap. But the problems were structural, not configuration-level:

  • TranslatePress auto-translation was the source of the doorway page problem. Replacing it with proper localised content meant rewriting every page anyway.
  • LiteSpeed's WAF was blocking crawlers at the server level. Fixing this required server access I did not have.
  • AIOSEO Pro was generating schema, but it was generic. For a casino affiliate site, I needed specific Review, FAQPage, and Organization schema with gambling-specific properties.
  • WordPress's render-blocking CSS and JavaScript were limiting Core Web Vitals performance.
  • Astro solved all of these by eliminating the root cause: the server-side runtime. Static HTML has no WAF to misconfigure, no plugins to conflict, no auto-translation to leak content, and no render-blocking resources. Every page is pre-rendered as clean HTML at build time.

    What I Built

    The new site runs on Astro with Vercel edge deployment. Here is the technical architecture:

    Rendering: Static HTML generation. Zero JavaScript by default. Every page is a complete HTML document with all content baked in. No SPA shell, no hydration delay, no empty divs.

    Deployment: Vercel edge network. Brotli compression enabled. HTTP/2 by default. Global CDN delivery with 108ms TTFB from the DataForSEO crawler.

    Languages: 4 language variants (Estonian, English, Finnish, Russian) with proper hreflang annotations on every page, including x-default pointing to the Estonian homepage.

    Schema: Organization, WebSite, WebPage, BreadcrumbList, FAQPage, and Review schema on all review pages. Each review has author attribution and itemReviewed properties.

    Security: HSTS, CSP, X-Content-Type-Options, X-Frame-Options, Referrer-Policy all configured at the CDN level.

    AI crawlers: GPTBot, OAI-SearchBot, PerplexityBot, ClaudeBot, and Google-Extended explicitly allowed in robots.txt. Bytespider and CCBot blocked (scrapers, not legitimate AI crawlers).

    Content: 156 pages across 4 languages. Each page has proper title tags, meta descriptions, OG tags, and structured data.

    Here is what the site looks like after migration:

    CasinoRoyale.ee desktop view showing the casino comparison homepage
    CasinoRoyale.ee mobile view

    The Results

    The technical audit shows the transformation:

    MetricBefore (WordPress)After (Astro)
    DataForSEO On-Page ScoreBlocked (status 0)98.9 (ET), 97.4 (EN)
    Lighthouse PerformanceNot tested (server blocked)99
    Lighthouse AccessibilityNot tested96
    Lighthouse SEONot tested100
    Critical IssuesMultiple0
    Time to InteractiveNot measurable781ms (ET), 665ms (EN)
    Transfer SizeNot measured15.9 KB (ET), 15.7 KB (EN)
    SitemapFrozen (over 1 year old)Fresh, 167 URLs
    Security HeadersMissing HSTS, CSPAll configured
    AI Crawler AccessBlockedAll 11 allowed
    hreflangDuplicate, no x-defaultClean, x-default set
    Migration TimeN/A22 working days
    The overall score moved from 34 to 38, but the technical foundation jumped from 38 to 52. The remaining gap is authority (12/100) and content depth, which are long-term plays that the technical migration now enables.

    What Went Wrong (And How I Fixed It)

    No migration is clean. Here are the issues I hit:

    The canonical URL doubled on all non-homepage English pages. Every EN review page had /en/en/ in its canonical URL. This was a build-time path concatenation bug in the Astro template. I fixed it by auditing the buildCanonical() function and ensuring it did not double-append the language prefix.

    The sitemap used bare domain while canonicals used www. The sitemap listed https://casinoroyale.ee/ but the canonicals pointed to https://www.casinoroyale.ee/. Google was getting contradictory signals. I standardised everything to the bare domain.

    The www redirect still has 2 hops. http://www.casinoroyale.ee/ chains through https://www.casinoroyale.ee/ before reaching https://casinoroyale.ee/. This is a Vercel infrastructure limitation. The non-www HTTPS redirect is now a single 301 hop, which is the critical fix.

    The Estonian homepage scored 22 out of 100 on first audit. No CTA buttons, no trust signals, no above-the-fold action. I added CTA buttons and trust badges to the template.

    What Casino Royale Says

    Markus Saar, Lead Casino Analyst at CasinoRoyale.ee

    "Working with Lee on this migration was a game-changer. Before, we could not get indexed properly because the server was blocking crawlers and the sitemap was stale. After the migration, we went from invisible to having a clean technical foundation that actually lets us compete. The Lighthouse scores speak for themselves, but the real win is that we can now focus on content and authority instead of fighting technical fires. Lee brought a level of technical depth and strategic thinking that we had not seen from any previous SEO partner."

    Markus Saar · Lead Casino Analyst, CasinoRoyale.ee

    What This Means for Casino Affiliate SEO

    The migration proved three things:

    Issues compound over time. WordPress was not the problem. Years of accumulated plugin conflicts, frozen sitemaps, and server misconfigurations were the problem. Any CMS can develop these issues. The question is whether your stack lets you fix them.

    Static HTML wins for YMYL content. In a gambling niche where E-E-A-T signals are critical, static HTML with proper schema, security headers, and clean canonicals sends stronger trust signals than a dynamic WordPress site with plugin conflicts.

    AI crawler access matters now. The WordPress site blocked non-Google crawlers at the server level. The Astro site explicitly allows all 11 major AI crawlers. As AI-powered search grows, being discoverable by these crawlers is not optional.

    The site already ranks number 1 for "bitcoin casino estonia" in the English language. With the technical foundation now clean and fast, the plan is to rank all core keywords across Estonian, English, Finnish, and Russian markets. The next phase is content expansion and authority building.

    If you run a casino or gambling affiliate site and need help with iGaming SEO, technical SEO, or a full site migration, get in touch. I work with sites that need to fix their technical foundation before they can grow.

    Get SEO insights in your inbox

    Weekly insights on AI SEO, LLMO, technical SEO, and what actually moves rankings. No fluff.

    No spam. Unsubscribe anytime.

    LB
    Lee Beirne
    AI SEO Consultant · 30 Years Experience

    Blending battle-tested SEO expertise with cutting-edge AI to deliver measurable growth.

    Work With Lee
    Back to all posts