DEV Community

Cover image for How I built a 145-page multilingual site with Astro + Cloudflare Pages (and why I didn't use Next.js)
Marvin Munos
Marvin Munos

Posted on • Originally published at siftedtools.com

How I built a 145-page multilingual site with Astro + Cloudflare Pages (and why I didn't use Next.js)

I recently launched SiftedTools, an independent AI tool comparator for e-commerce, published in 7 languages (FR/EN/ES/DE/IT/PT/NL). Here's the technical stack and why I made these choices.

The stack

  • Astro for static site generation (145 pages, builds in under 2 seconds)
  • Cloudflare Pages for hosting (free tier, drag-and-drop deployment)
  • Markdown for all content (65 money pages + 21 guides + 7 homepages)
  • GitHub for version control
  • No database — everything is flat files

Why Astro over Next.js

For a content-heavy site with zero interactivity (no user accounts, no forms beyond a newsletter signup), Astro ships zero JavaScript by default. That means:

  • Perfect Lighthouse scores out of the box
  • Pages that load in under 500ms on any connection
  • No hydration cost, no client-side routing overhead

Next.js would have shipped 80-200KB of JS for features I don't use. For a comparison site where SEO is everything, that's unacceptable overhead.

The i18n architecture

7 languages live under subfolders (/fr/, /en/, /es/, etc.) with:

  • Localized slugs (not just translated content, but native URL structures)
  • Full hreflang network (8 entries per page: 7 languages + x-default)
  • A neutral root language selector at / with soft browser detection
  • Each content page exists as clean .md by appending .md to the slug — this is specifically for LLM crawlers who prefer Markdown

The i18n dictionary lives in a single TypeScript file with ~600 keys across 7 languages.

The GEO layer (AI search optimization)

Beyond traditional SEO, I optimized for AI search engines (ChatGPT, Gemini, Perplexity):

  • robots.txt explicitly allows GPTBot, ClaudeBot, PerplexityBot, and 7 other AI crawlers
  • llms.txt at the root indexes all 145 pages with descriptions (the emerging standard for LLM discoverability)
  • llms-full.txt contains detailed verdicts for deeper context
  • Every content page as .md endpoint — LLMs parse Markdown better than HTML
  • Schema.org with FAQPage, author, Organization on every money page

Deployment

Cloudflare Pages free tier with drag-and-drop. No CI/CD, no build pipeline. I run npm run build locally, drag the dist/ folder to the Cloudflare dashboard, and it's live in 30 seconds. Simple, free, fast.

The entire site costs $0/month to host.

What I'd do differently

  1. I'd set up CI/CD from day one (GitHub Actions → Cloudflare Pages) instead of manual drag-and-drop
  2. I'd use Astro content collections with type-safe schemas earlier (I retrofitted them)
  3. I'd build the 7-language architecture before writing content, not after

Try it

The site: https://siftedtools.com
The repo: https://github.com/MVMStudio34/siftedtools

Happy to answer questions about the Astro i18n setup or the GEO optimization layer.

Top comments (0)