Moroccan tourism has a peculiar visibility problem: most properties are described at length — on booking platforms, never on their own site. When an assistant assembles an itinerary it draws on what it can read and corroborate; if your own site carries no price, no terms and no usable location, you exist only through the summary an intermediary wrote on your behalf.
What the assistant needs to find, and where it looks
A travel request decomposes into checkable constraints: a city, dates, a budget, an atmosphere, a distance from the airport, a cancellation policy. Each constraint is a filter. A page that answers none of them is not dropped for poor quality: it is dropped because it contains no information to filter on.
| Traveller's constraint | What to publish | Where |
|---|---|---|
| "quiet, in the medina" | Precise location, landmark, honest noise level | Visible text + description |
| "mid-range budget" | A real range in MAD and EUR, by season | Text + Offer |
| "flexible cancellation" | The exact window, as a standalone sentence | Text + terms page |
| "near the airport" | Distance in km and real driving time | Text + geo |
| "do you speak English?" | Languages actually spoken on site | availableLanguage |
| "travelling with kids" | Ages accepted, beds, facilities | amenityFeature |
The most commonly missed item is price. Many accommodation sites show no rate at all, for fear of comparison. The result is mechanical: on any question carrying a budget you cannot be queried, so you are absent. An honest range — "750 to 1,400 MAD per night depending on season, breakfast included" — makes you eligible without committing to a firm rate.
The markup that matters for accommodation
{
"@context": "https://schema.org",
"@type": "BedAndBreakfast",
"@id": "https://riad-example.ma/#lodging",
"name": "Riad Zitoun",
"description": "An 8-room riad in the Marrakech medina, patio, roof terrace, open year-round.",
"url": "https://riad-example.ma/",
"telephone": "+212524000000",
"numberOfRooms": 8,
"petsAllowed": false,
"checkinTime": "14:00",
"checkoutTime": "11:00",
"priceRange": "750-1400 MAD",
"currenciesAccepted": "MAD, EUR",
"availableLanguage": ["ar", "fr", "en", "es"],
"address": {
"@type": "PostalAddress",
"streetAddress": "12 derb Zitoun, medina",
"addressLocality": "Marrakech",
"postalCode": "40000",
"addressCountry": "MA"
},
"geo": { "@type": "GeoCoordinates", "latitude": 31.625, "longitude": -7.985 },
"amenityFeature": [
{ "@type": "LocationFeatureSpecification", "name": "Wi-Fi", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Air conditioning", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Swimming pool", "value": false },
{ "@type": "LocationFeatureSpecification", "name": "Airport transfer", "value": true }
]
}Note the false values. Declaring what you do not have is an advantage, not a confession: a traveller looking for a pool will not be disappointed on arrival, and an assistant that finds precise information uses you with more confidence. Ambiguity protects nobody — it gets you recommended to the wrong guests, who then review you.
Day trips: describe the route, not the emotion
"An unforgettable day in the Agafay desert" contains nothing usable. An itinerary does: departure time and place, total duration, named stops, driving time between them, what is included, what is not, group size, the guide's language, the bad-weather policy. An assistant building a five-day plan needs durations and distances to check that the day holds together — give it those and you become placeable inside its plan.
{
"@context": "https://schema.org",
"@type": "TouristTrip",
"name": "Ourika Valley from Marrakech — full day",
"description": "Departs Marrakech 8:30am, returns around 6pm. Setti Fatma, waterfalls, riverside lunch.",
"touristType": ["Family", "Beginner hiker"],
"itinerary": {
"@type": "ItemList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Depart Marrakech (8:30am)" },
{ "@type": "ListItem", "position": 2, "name": "Argan cooperative (30 min)" },
{ "@type": "ListItem", "position": 3, "name": "Setti Fatma, walk to the waterfalls (2h)" },
{ "@type": "ListItem", "position": 4, "name": "Riverside lunch (1h30)" }
]
},
"offers": {
"@type": "Offer",
"price": "450",
"priceCurrency": "MAD",
"availability": "https://schema.org/InStock",
"validThrough": "2026-12-31"
}
}Transfers and car hire: the detail that decides
This segment turns on information almost nobody publishes and everybody asks for. A traveller preparing an arrival in Marrakech, Agadir or Fès always asks the same questions: what the ride costs, who waits where exactly, what happens if the flight is three hours late, whether an international licence is needed, and how large a deposit is held on the card. An operator who answers those five points in plain text becomes the most useful source in its city, with no advertising budget.
The deposit is the perfect example of information that decides a booking and is almost never written down. An amount, a hold method, a release delay: three facts, one sentence, and you have answered the question that worries customers most — which is therefore the one an assistant will try to answer from somebody.
- The meeting point, described physically. "Arrivals exit, right after the taxi rank, sign with your name" beats "our driver will greet you".
- A firm price per journey, not "from": a conditional rate is comparable to nothing.
- The delay policy: how long the driver waits, and what waiting beyond that costs.
- Documents required for a rental: minimum age, licence held for how long, international permit or not.
- What the insurance actually covers, excess included, in numbers rather than commercial tiers.
The review trap
The temptation is familiar: add a flattering aggregateRating to the markup. It is the easiest violation to detect — a rating with no real reviews visible on the page — and the one that damages trust most when it is spotted. The right strategy is the opposite: few claims, all true, and solid outside corroboration on the platforms where your guests already write.
The pages that get quoted, and that almost nobody writes
Travellers' questions are remarkably stable from year to year. Each answers in one page, in English and in French, and those are the pages that get pulled into generated answers.
- "How do I get from Marrakech airport to the medina?" — indicative taxi fares, duration, where the rank is, what your own transfer costs.
- "How much should I tip in Morocco?" — real practice, by situation, with amounts.
- "What should I wear in Marrakech in April?" — temperatures, dress conventions, what to bring for the evening.
- "Can you drink the tap water?" — a direct answer, with no commercial detour.
- "Can a car reach the riad?" — the question that decides a medina booking, and which almost no site answers clearly.
Each of those pages must open with the answer, in two lines, before any elaboration. That block is what gets extracted. The rest serves the human reader, who does keep reading.
Direct booking: the only economic reason for any of this
The gain is not a position, it is a channel. A recommendation inside a generated answer brings you a visitor who passed through no platform and on whom no commission is charged. That visitor still has to be able to book with you in two clicks: a visible contact link, a clickable WhatsApp number in international format, an answer within twenty-four hours. Being cited and being unreachable simply hands the audience to the next intermediary.