Last year I started building PuzzleGenio — a free online puzzle maker for crosswords, word searches, sudoku, jigsaw puzzles, and more. What began as
a simple weekend project turned into a platform with 20+ tools supporting 8 languages.
Here's what I learned along the way.
## Why Puzzles?
Teachers, parents, and event planners constantly search for "free crossword maker" or "printable word search generator." The existing tools are either paywalled, riddled with
ads, or stuck in 2005 UI. I saw a gap.
The core idea: one URL = one tool = one keyword. Each puzzle maker is a standalone page that works as both a functional tool AND an SEO landing page. Users generate their
puzzle, customize it, and download a print-ready PDF — all on the same page, no signup required.
## Tech Stack
- Next.js 15 (App Router) with TypeScript
- next-intl for i18n (8 locales: en, zh, de, es, fr, pt, it, id)
- Client-side generation — puzzles are generated in the browser, no server load
- PDF export — vector-based PDFs using jsPDF, so prints look crisp at any size
- Tailwind CSS — responsive design that works on mobile and desktop
## The i18n Challenge
Supporting 8 languages isn't just about translating strings. Here's what actually matters:
1. Localized keyword research, not literal translation
"Word Search" in German isn't "Wort Suche" — German users search for "Buchstabenrätsel" or "Suchsel." I researched Google Autocomplete and competitor sites for each language
to find what real users actually type.
2. Native language puzzle content
A Spanish user generating a crossword expects Spanish words in the puzzle, not English ones. So I built a locale-aware word list system that generates puzzles with native
vocabulary for each supported language.
3. SEO metadata per locale
Every page has localized meta titles and descriptions, hreflang tags, and JSON-LD structured data (FAQPage, HowTo, WebApplication) — all using translated strings, never
hardcoded English.
## What Worked for SEO
A few things that moved the needle:
-
One keyword = one page. Instead of one generic "puzzle maker" page, I have dedicated pages for
crossword-puzzle-maker,printable-crossword-puzzles,word-search-for-kids,large-print-word-search, etc. Each targets a specific long-tail keyword. -
Subdirectory i18n (
/es/crossword-puzzle-maker,/de/sudoku-puzzle-maker) instead of query params or cookies. Google treats each as a separate indexable page. - Schema markup on every tool page — FAQPage schema gets you those expandable FAQ snippets in search results.
- Fast load times — puzzle generation happens client-side, so the server just delivers static HTML. No spinners, no "generating..." wait screens.
## Lessons Learned
Start with fewer languages, do them well. I initially translated everything with AI and shipped it. The German and Spanish translations had embarrassing errors (wrong
grammatical cases, invented words). Now I research each language individually and verify with native speakers.
PDF export quality matters more than you think. My first version used canvas-based screenshots for PDFs. They looked blurry when printed. Switching to vector-based PDF
generation (drawing shapes and text directly) made the output print-perfect and reduced file sizes.
Don't over-engineer early. I spent too long on a fancy puzzle-sharing system before realizing 90% of users just want to download a PDF and print it. Build for the dominant
use case first.
## Numbers So Far
The /es/ and /de/ pages are now getting real organic traffic. Some long-tail keywords are ranking on page 1 within weeks — that's the power of low-competition keywords +
quality localized content.
## Try It Out
If you need puzzles for your classroom, party, or just for fun:
Everything is free, no signup required. Available in English, Chinese, German, Spanish, French, Portuguese, Italian, and Indonesian.
I'd love to hear your feedback — especially if you're a teacher or parent who uses puzzle tools regularly. What features would make your life easier?
Top comments (0)