A trilingual North African market where French carries as much commercial weight as Arabic, and both need to be handled properly.
We build and run programmatic SEO surfaces for Moroccan businesses — Arabic/French bilingual templates, Casablanca-to-Marrakech geography modelling, and a performance budget set for the mid-range Android handsets most Moroccan buyers search from.
Programmatic SEO is not a content order. It is a data model, a template system, a performance budget and a maintenance routine that has to keep working after launch. We own all four.
Moroccan search splits between Modern Standard Arabic, Darija phrasing and French commercial terms, often within the same buyer journey. We model each variant separately and build RTL Arabic templates from the ground up rather than mirroring the French layout.
Casablanca-Settat, Rabat-Salé-Kénitra and Marrakech-Safi each carry distinct search demand at the region and city level. We build that hierarchy rather than flattening the whole country into a handful of city pages.
A minimum-unique-content threshold is enforced at publish time in both language versions. A page that cannot clear it in Arabic or French is held back rather than shipped thin.
We hold LCP under 2.5s and INP under 200ms on a mid-range Android profile over typical Moroccan mobile networks, and the build fails if a template regresses past budget.
Product, Service, FAQ and ItemList JSON-LD shipped per language variant, plus llms.txt and citation-ready summaries so ChatGPT and Gemini can quote Arabic- and French-language pages accurately.
Coverage reports split by language, crawl-budget triage across both variants, cannibalisation checks between Arabic and French URLs, and pruning of pages that never earned impressions in either.
Each vertical has its own page types, its own data source and its own failure mode. Pick yours to see what we'd actually ship.

Travel intent is combinatorial — origin × destination × month × traveller type — which is exactly why it rewards a well-governed template and punishes a lazy one. We model the entity graph first, then publish only the combinations with real demand and real data behind them, with pricing and availability pulled live rather than frozen into the HTML.
Reference implementations, not clients or partners. Listed because their public page architecture is worth studying.
Different buyers, different matrices, different risks. The engine is the same; the model is not.
Marrakech, Fes and coastal Essaouira each attract distinct traveller segments searching in French, Arabic and English simultaneously. We build the destination and route matrix around your real inventory rather than a generic destination page competing with Booking.com for three keywords.
Real operators, described by what they actually publish. We build the same structural discipline into surfaces a fraction of their size.
Mubawab structures its Moroccan property surface around city and neighbourhood entities served in both Arabic and French, with listing data feeding each page live rather than static description text.
No batch of pages goes live before the batch before it has been measured. That sequencing is the reason these surfaces survive core updates.
We pull Search Console performance and competitor indexed page types separately for Arabic and French queries, since tourism, real estate and finance intents often diverge sharply by language in Morocco.
Clean URL paths per language, one canonical entity per product or listing, hreflang wired correctly so Google treats the Arabic and French pair as equivalents.
Shipped across both language variants and measured for 4–6 weeks. If a template underperforms in one language, we diagnose that language's template specifically.
Once the pilot proves out in both languages, the engine publishes in controlled waves with the uniqueness gate, RTL rendering checks and schema validation running on every page.
Hub pages and contextual cross-links generated per language, so authority reaches deep region or city pages instead of pooling on Casablanca and Marrakech.
Monthly review of what ranks in Arabic versus French, what stalls, and what needs a rewritten Arabic variant even where the French version is performing.
Your data, your WordPress, your domain. We bring the engine, the gates and the discipline.
No re-keying, no CSV graveyard, no lost Arabic or French translations.
Google Sheets, your product API, WooCommerce catalogues or a plain CSV drop, with Arabic and French fields kept in the same row so translations never drift out of sync as data updates.
Figures we work from, with the source stated. Where a number is directional, we say so.
Morocco is unusual in Africa for running genuine dual-language commercial search: Arabic (often Darija-inflected rather than Modern Standard Arabic) and French both carry real transactional volume, sometimes for the same query, sometimes for entirely different audience segments — French skewing toward urban, professional and tourism-adjacent search, Arabic toward broader consumer and local-services intent.
RTL handling matters here exactly as it does in Egypt, but the added complication is a template that has to serve RTL Arabic and LTR French cleanly from the same content model, which is a harder engineering problem than either language alone and one that off-the-shelf themes frequently get wrong at the component level, not just the page level.
Morocco's tourism economy — Marrakech, Casablanca's business corridor, coastal cities — creates a second market on top of the domestic one: a substantial international, often French- or English-speaking, audience searching with completely different intent than a Moroccan resident, and templates that don't separate the two produce pages that serve neither well.
Scaled pages don't get demoted for being scaled. They get demoted for being interchangeable, slow, or wrong about the place they claim to serve.
A single template trying to be bilingual without a clean content-model separation ends up serving neither French nor Arabic users well, with mismatched tone and mistranslated idiom in whichever language was the afterthought.
Even themes with page-level RTL support often ship individual components — carousels, forms, breadcrumbs — that don't mirror correctly, and this shows up as a broken layout on the Arabic version specifically.
A Marrakech riad or Casablanca business page written for domestic Moroccan buyers reads wrong to an international tourist audience searching in French or English, and vice versa.
Everyday consumer and local-services queries often run in Darija-inflected Arabic; a strictly formal MSA page can rank but under-converts against the way people actually search and speak.
Similar to Egypt, global CDN coverage in North Africa has improved but needs verification from Casablanca or Rabat specifically, not just assumed from European POP proximity.
Same order every time. The uniqueness gate and the performance budget come before a single page publishes.
French and Arabic versions get independently written and reviewed content rather than one translated from the other, with hreflang connecting them properly.
Every reusable component — forms, carousels, breadcrumbs, navigation — gets checked in the Arabic/RTL context specifically before it ships in any template.
Different templates, different data (pricing in the right currency context, transport for tourists versus locals) rather than one page trying to serve both.
Formal MSA where appropriate (finance, legal, government-adjacent content), Darija-aware register for everyday consumer and local-services content.
Test TTFB from Moroccan vantage points before publishing at scale rather than assuming European-proximate POP coverage is sufficient.
Watching French and Arabic performance separately catches a problem specific to one language that a blended metric would hide.
Not partners — reference implementations. External links are nofollow.
Morocco's interbank card payment processing network.
The standard local payment rail for Moroccan e-commerce checkout, expected alongside or instead of international processors.
cmi.co.maMorocco's largest classifieds and marketplace platform.
The competitive and structural benchmark for Moroccan marketplace and directory programmatic surfaces.
avito.maIndexing and query data platform.
Language segmentation here is essential given how differently French and Arabic query performance behaves.
search.google.comEdge network and caching.
Needs in-country latency verification for Moroccan cities rather than assumed adequacy from nearby European POPs.
cloudflare.comLeading Moroccan real estate portal.
The reference point for a mature bilingual French/Arabic real estate programmatic surface.
mubawab.maPerformance testing with regional test locations.
Useful for validating real-world load times against Moroccan mobile network conditions.
gtmetrix.com| Option | Best for | Trade-off |
|---|---|---|
| Bilingual French/Arabic content teams needing editorial control. | RTL component compatibility needs a dedicated audit before scale. | |
| Tourism and marketing teams under ~10k pages. | RTL support is workable but not native, adding build overhead. | |
| E-commerce brands needing CMI payment integration. | Theme-level bilingual and RTL support varies and needs manual QA. |
Each city has its own angle, its own blockers and its own first moves — because they genuinely differ.
Morocco's commercial and financial capital, with the country's most competitive bilingual SERPs.
Morocco's flagship tourism destination, with the country's strongest international search demand.
Morocco's administrative capital, with government, diplomatic and education-sector search demand distinct from Casablanca's commercial focus.
Morocco's northern gateway city, with strong logistics and cross-strait commercial demand alongside growing tourism.
Separate, independently written content connected by hreflang — a single template stretched across both languages consistently under-serves one of them.
MSA for finance, legal and formal categories; Darija-aware register for everyday consumer and local-services content — matching how the audience actually searches.
Different enough to warrant separate templates — currency framing, transport detail and tone all diverge between a Marrakech tourist page and a Casablanca resident page.
Yes, Morocco's Law 09-08 governs personal data processing; forms and analytics need consent handling appropriate to it.
First crawl within days; meaningful impression data typically in five to seven weeks, faster for French-language pages given the more mature competitive baseline.
We'll audit the data source, size the first batch, set the performance budget and tell you honestly if programmatic is the wrong tool for your category.