# AI search in Morocco: the 2026 guide for Moroccan businesses

> Three scripts, two written languages, a spoken language almost never written down, addresses with no postal convention, and opening hours that change for one month a year. The Moroccan market stacks up everything an answer engine handles worst — which is exactly where the advantage sits.

Published: 2026-08-26 · Updated: 2026-08-26 · 6 min read
Source: https://indexonic.com/en/blog/ai-search-optimization-morocco/

Ask an assistant "which freight forwarder in Casablanca?". You will get two or three names, often the same ones, rarely the most competent. That is not a ranking: it is the result of what the model was able to read and corroborate. In Morocco five very concrete obstacles keep most businesses unreadable — and none of them is about budget.

## 1. Your name exists in three scripts. Say so.

"Marrakech", "Marrakesh", "مراكش". "Tanger", "Tangier", "طنجة". "Casablanca", "Casa", "الدار البيضاء". A human knows these are the same city; a model generally knows it too, for cities. It does not know it for _your company_, whose name may be spelled differently on your site, on your Google listing, on your invoices and on your Facebook page.

The fix is mechanical. Declare every spelling in `alternateName`, and link every real profile in `sameAs`. You stop being three vague entities and become one entity whose three names are known.

*One entity, all its spellings*

```
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "@id": "https://example.ma/#business",
  "name": "Atlas Transit Maroc",
  "alternateName": ["أطلس ترانزيت المغرب", "Atlas Transit Morocco", "ATM Transit"],
  "address": { "@type": "PostalAddress", "addressLocality": "Casablanca", "addressCountry": "MA" },
  "sameAs": [
    "https://www.linkedin.com/company/atlas-transit-maroc",
    "https://www.pagesjaunes.ma/..."
  ]
}
```

> **Absolute rule** — Put only profiles that exist and answer into `sameAs`. An invented link — we have watched an automated generator produce one — is a checkable falsehood, and the worst signal you can publish.

## 2. The Moroccan NAP: the phone number is almost always wrong

A number written "06 12 34 56 78" is comparable to nothing. International format is not obtained by gluing +212 in front: **the leading zero disappears**. 0612345678 becomes `+212612345678`. It is the single most frequent defect we see on Moroccan sites, and on its own it prevents your site, your business listing and any directory from being matched to each other.

| Written on the site | What to publish | Why |
| --- | --- | --- |
| 06 12 34 56 78 | +212612345678 | International format, no spaces, no leading zero |
| 05 22 00 00 00 | +212522000000 | Casablanca landline, same rule |
| WhatsApp: 0612345678 | https://wa.me/212612345678 | Clickable link, country code required |
| Bd Zerktouni, Casa | 45 boulevard Zerktouni, Casablanca 20250, MA | Street, city, code, country — always in that order |

The address raises a problem specific to the country: many real locations are expressed as landmarks — a derb in the medina, a résidence, a quartier — that international postal formats cannot encode. Two complementary answers: fill in `geo` coordinates, which depend on no writing convention, and add a landmark in the visible text ("opposite the Shell station", "200 m from the station"). That last detail is what a human asks for and what an assistant can repeat.

## 3. Ramadan: one month of wrong opening hours, every year

Nearly every Moroccan business changes its hours during Ramadan, and nearly none declares it anywhere except an image on social media. The result: for a month, the most consulted source about you — your own site — is wrong, and an assistant repeats it.

schema.org can express a period. A second `openingHoursSpecification` block with `validFrom` and `validThrough` is enough, provided you think of it _beforehand_.

*Exceptional hours, dated*

```
"openingHoursSpecification": [
  { "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
    "opens": "08:30", "closes": "18:00" },
  { "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
    "opens": "09:00", "closes": "15:30",
    "validFrom": "2027-02-08", "validThrough": "2027-03-09" }
]
```

Put the same information in visible text on the contact page — markup describes what the page shows, never the other way round — and diary the date you return to normal hours. Exceptional hours left in place in April are as wrong as hours never declared.

## 4. Three languages, and one decision to make

Darija is the language of conversation, not of writing: almost nobody types a query in transcribed darija, and writing it on your site has no documented use. The real decision is between three options.

- **French** — the default commercial language for services, B2B, real estate, healthcare, and craft sold locally. If you build only one version, build this one.
- **Modern Standard Arabic** — essential for consumer services, public administration, training and neighbourhood healthcare. Correct Arabic content, with `lang="ar"` and an RTL layout, makes you readable to a share of the market that French-only competitors ignore.
- **English** — tourism, export, tech, and anything aimed at a foreign buyer. Questions asked by a foreign visitor reach an assistant in English, not in French.

Whatever your combination, each version must be its own page, with its own URL and reciprocal `hreflang` tags (`fr-MA`, `ar-MA`, `en`). A translation loaded by JavaScript on the same URL does not exist as far as an agent is concerned: it will only ever see the default language.

## 5. Local corroboration, where it is actually verifiable

A model cites you more readily when it finds the same facts elsewhere. In Morocco the useful list is short, and it is better handled seriously than padded with worthless listings.

1. **Your Google Business Profile** ([google.com/business](https://www.google.com/business/)) — name, address and phone strictly identical to the site's. It is the first source cross-checked.
2. **The national directories that genuinely exist** — [pagesjaunes.ma](https://www.pagesjaunes.ma/) and [telecontact.ma](https://www.telecontact.ma/) are online and consultable. One accurate entry there beats ten listings on ghost directories.
3. **Press and sector sites** — a mention in a Moroccan trade publication weighs more than a release syndicated everywhere, because it is unique and dated.
4. **Federations and professional associations** — an entry in a member directory is independent confirmation that you exist, which is exactly what a cautious model is looking for.

## What the local market sells, and how to check it

Moroccan agencies now offer "GEO" and "ChatGPT ranking" services. The discipline is real; some of the promises are not. Three questions sort it out, and they work on us too.

- **"What exactly do you measure?"** An honest answer names server logs, referrers and a frozen question panel — not a proprietary score presented as a count of citations.
- **"What do you guarantee?"** Nobody controls a model's output. You can guarantee delivered, verifiable work; never a position inside a generated answer.
- **"Can I check every published claim?"** Every URL added to your site must answer 200 and every fact must be true. Ask for the list; if it does not exist, it was never checked.

## The Moroccan checklist, in twelve points

1. Phone as `+212…` with no leading zero, identical everywhere.
2. WhatsApp published as a `wa.me` link with the country code.
3. Full address, plus `geo` coordinates, plus a landmark in plain text.
4. `addressCountry: "MA"` in the JSON-LD.
5. `alternateName` carrying the Arabic, French and English spellings.
6. `areaServed` listing the cities you actually serve.
7. `availableLanguage` reflecting the languages you really answer in.
8. Normal hours _and_ dated Ramadan hours.
9. One page per language, with reciprocal `hreflang` tags.
10. Google listing and national directories matching the site character for character.
11. Prices in MAD with `priceCurrency: "MAD"` wherever a price is shown.
12. Every published URL tested: it must answer 200, without exception.

> **Check your site now** — Indexonic's free audit tests these points on your domain — phone format, markup consistency, declared languages, links that actually answer — and hands back the list of what is missing. No account needed for the first scan.


## Frequently asked questions

### Do I need an Arabic site to be visible in Morocco?
It depends on your market. For consumer or neighbourhood services, a Modern Standard Arabic version opens a share of the market French-only competitors leave empty. For B2B or export, French and English come first. What is certain: one version per URL, never a JavaScript-loaded translation.

### Should I write in darija?
No, beyond occasional marketing use. Darija is rarely written, has no settled orthography, and does not match the shape of typed queries. Modern Standard Arabic covers the need of an Arabic-speaking reader.

### Does a .ma domain improve AI visibility?
It helps an engine place your market, like any geographic signal, but it is not decisive. A Moroccan .com with a clear address, a +212 phone number and a consistent business listing is better located than a .ma with none of those.

### How long until I see an effect?
Technical corrections — readability, markup, links — take effect as soon as pages are re-fetched, often within days. External corroboration builds over months. Any promise of results in two weeks concerns something nobody controls.

---
Indexonic — https://indexonic.com · https://agent.indexonic.com
