I spent the last few months shipping Allo Maison, a home services marketplace for Morocco. Here's the tech stack and the hard-won lessons that might save you a week or three.
The stack
- Next.js 15 App Router with SSG everywhere possible. 148 static pages at build time.
- Tailwind CSS 3 + shadcn/ui for the design system.
- Supabase for the artisan database (Postgres + RLS), plus a small Convex sidecar that runs the scraper pipelines.
- Resend for transactional email, Netlify for hosting, Cloudflare for the DNS and root domain routing.
Morocco has ~250K–435K monthly searches across the home services category (plumbing, electricity, cleaning, AC). There was no programmatic SEO competitor covering all cities × services in French and Arabic, so that became the moat.
Programmatic SEO that actually indexes
I templated every service-city combination (16 services × 10 cities = 160 pages) and every service-ville-urgence (18 more). Each page has:
- Unique intro paragraph generated from a structured data file (service specifics, city particulars, local prices in MAD)
- A dynamic list of verified artisans from Supabase (average 6–12 per page)
- LocalBusiness + Service JSON-LD schema
- Hreflang pairs for
fr-MAandar-MA
For example, our plombier Casablanca page pulls real-time artisan counts, aggregates ratings, and surfaces an urgency CTA for night-time calls. Early ranking signals are encouraging for a brand-new domain.
What I'd do differently
1. Get Google Search Console set up on day zero
I lost three weeks debugging an indexation drop that turned out to be a misconfigured robots.txt rule. GSC's coverage report would have caught it in 24h.
2. Skip the headless scraper for sourcing
I built a Playwright scraper to source 1000+ artisans across MA directories. 40% of records needed manual cleanup anyway. For v2 I moved to a hybrid approach: WhatsApp verification + Google Places API + a lightweight cron that cross-references.
3. Structured data before content polish
Rich results in Google beat pretty copy for a new site. I should have shipped FAQPage + HowTo + BreadcrumbList schemas the first week, not month three.
4. French + Arabic from the start, not retrofitted
Arabic SEO in Morocco is under-served. Competitors ignore it. Going bilingual from v1 would have captured an extra segment that's now cold traffic I have to warm up.
Metrics after launch
- 141 URLs submitted to sitemap
- 9 high-DA backlinks acquired via content + directories in week one
- Average Lighthouse Performance: 92 mobile / 98 desktop
- Time-to-first-interactive on
/plombier-casablanca: 1.3s
Takeaway
A small market with a programmatic SEO gap plus bilingual content plus shipped-this-week schemas beats another generic global SaaS any day. If you're eyeing a vertical nobody has technically taken, the playbook is still alive.
Happy to swap notes in the comments — especially with anyone bootstrapping directory-style products in emerging markets.
Top comments (0)