Skip to content
All articles
SEOStrategyMorocco

Local SEO for Moroccan Businesses: A Practical Guide

How to rank for the searches that bring paying customers in Casablanca, Marrakech and Rabat — including the bilingual details most guides skip.

Kitsu Digital··3 min read

Ranking nationally for a broad keyword is expensive and often worthless. Ranking for "plombier Casablanca" when someone needs a plumber in Casablanca is the entire game. Here is what actually moves local rankings in Morocco.

Start with your Google Business Profile

For local searches, your Business Profile outranks your website in the results that matter — the map pack sitting above the organic links. It is free, and it is consistently the highest-return hour of work available to a local business.

Complete every field. Not most of them, every one:

  • Exact business name, no keyword stuffing — Google penalises "Plomberie Casablanca Pas Cher" as a business name
  • Precise category, plus secondary categories
  • Real opening hours, updated for Ramadan and public holidays
  • Phone number in international format: +212 5 22 XX XX XX
  • Photos of the actual premises, updated quarterly

Then ask for reviews, consistently, and reply to every one. Review count and recency are ranking factors, and the reply is read by the next customer deciding whether to call you.

Get your NAP identical everywhere

Name, Address, Phone. Google cross-references these across the web to decide whether it believes your business exists where you say it does. Inconsistency dilutes that confidence.

The most common failure: writing your phone number four different ways. 0522 XX XX XX, +212522XXXXXX, 05-22-XX-XX-XX and (212) 522 XX XX XX are, to a crawler, potentially four different businesses. Pick one format and use it on your site, your Business Profile, your social pages and every directory.

Decide your language strategy deliberately

This is where most Moroccan sites lose ground, because they never make an explicit decision.

Your customers search in French, in Arabic, in Darija transliterated into Latin characters, and sometimes in English. You cannot serve all of that from one undifferentiated page.

If you publish in more than one language, give each version its own URL — /fr/services and /ar/services, not one page that swaps text with JavaScript. Then declare the relationship with hreflang tags so Google knows they are translations rather than duplicates:

<link rel="alternate" hreflang="fr-MA" href="https://example.ma/fr/services" />
<link rel="alternate" hreflang="ar-MA" href="https://example.ma/ar/services" />
<link rel="alternate" hreflang="x-default" href="https://example.ma/fr/services" />

Translate properly. Machine-translated Arabic reads as machine-translated Arabic, and it costs you the trust you were trying to build.

Add LocalBusiness structured data

Structured data tells search engines what your pages mean rather than leaving them to guess. For a local business this is not optional — it feeds the knowledge panel and the rich results.

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Your Business",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Casablanca",
    "addressRegion": "Casablanca-Settat",
    "addressCountry": "MA"
  },
  "telephone": "+212522XXXXXX",
  "openingHours": "Mo-Fr 09:00-18:00",
  "priceRange": "$$"
}

Validate it with Google's Rich Results Test before you ship. A malformed block is worse than no block.

Build pages for places, not one page for everywhere

If you serve three cities, one page listing all three will rank for none of them. Build a genuine page per city with real, specific content — local references, local projects, local contact details. Three near-identical pages with the city name swapped is duplicate content, and Google has been detecting that pattern for well over a decade.

What to measure

Set up Google Search Console on day one, before you make any changes. Watch queries and impressions rather than the vanity ranking number, because results are personalised and location-dependent — the position you see is not the position your customer sees.

Local SEO compounds slowly. Expect three to six months before the trend is unambiguous, and be sceptical of anyone who promises otherwise.

Have a project in mind?

Tell us what you are building and we will come back with a plan, a timeline and a number.

Start a conversation