"Appartement à louer Almadies", "villa à vendre Cocody Abidjan", "studio meublé Plateau Dakar" — chaque mois, ces requêtes représentent 180 000+ recherches Google cumulées. Pourtant la majorité des agences africaines fonctionnent encore via WhatsApp + bouche-à-oreille, ratant 90 % du marché digital.
TL;DR
- Portail listings + filtres + photos pro = +250 % de demandes mandat.
- Stack 2026 : Next.js + Strapi + Algolia search + WhatsApp lead capture.
- 6-9 mois pour Top 3 Maps + 50K visites/mois sur grandes villes.
Architecture portail immobilier
`
[Visiteur] → [Page accueil avec recherche puissante]
↓
[Listings filtré : type / quartier / budget]
↓
[Fiche bien : 15-25 photos + plan + localisation + visite virtuelle]
↓
[CTA : visite, devis, contact agent direct]
↓
[Lead capture WhatsApp + email]
↓
[Auto-attribution agent + suivi CRM]
`
Étape 1 — modèle de données (Prisma)
`prisma
model Property {
id String @id @default(cuid())
slug String @unique
reference String @unique
title String
type PropertyType // APARTMENT / HOUSE / VILLA / COMMERCIAL / LAND
transaction TransactionType // SALE / RENT
price Int // en plus petite unité (XOF entier)
currency String @default("XOF")
surface Int? // m²
bedrooms Int?
bathrooms Int?
city String // Dakar / Abidjan / Lagos
district String // Almadies / Cocody / Lekki
address String?
latitude Float?
longitude Float?
description String // markdown
features String[] // ["pool", "garage", "garden", "ac"]
images Image[]
status PropertyStatus // AVAILABLE / RESERVED / SOLD / RENTED
agentId String
agent Agent @relation(fields: [agentId], references: [id])
views Int @default(0)
createdAt DateTime @default(now())
@@index([city, district, type, status])
@@index([transaction, price])
}
model Image {
id String @id @default(cuid())
propertyId String
property Property @relation(fields: [propertyId], references: [id])
url String // CDN
caption String?
order Int
}
model Agent {
id String @id @default(cuid())
name String
phone String // E.164
whatsapp String
email String
photoUrl String?
bio String?
properties Property[]
}
`
Étape 2 — recherche puissante avec Algolia
`tsx
// app/recherche/page.tsx
'use client';
import { InstantSearch, SearchBox, Hits, RefinementList, RangeInput } from 'react-instantsearch';
import algoliasearch from 'algoliasearch/lite';
const client = algoliasearch(
process.env.NEXT_PUBLIC_ALGOLIA_APP_ID!,
process.env.NEXT_PUBLIC_ALGOLIA_SEARCH_KEY!
);
export default function SearchPage() {
return (
);
}
`
Algolia : 0$ jusqu'à 10K recherches/mois, $50/100K au-delà. Indispensable pour expérience search rapide.
Étape 3 — fiche bien optimisée SEO
`tsx
// app/biens/[slug]/page.tsx
export async function generateMetadata({ params }) {
const property = await getPropertyBySlug(params.slug);
return {
title: ${property.title} - ${property.district}, ${property.city},
description: ${property.type} de ${property.surface}m² en ${property.transaction === 'SALE' ? 'vente' : 'location'} à ${property.district}, ${property.city}. Prix : ${property.price.toLocaleString()} ${property.currency}.,
openGraph: {
images: property.images.map(i => ({ url: i.url })),
},
};
}
export default async function PropertyPage({ params }) {
Besoin d'un site web professionnel ?
Kolonell crée des sites web qui attirent des clients, optimisés pour le marché sénégalais. Devis gratuit en 2 minutes.
const property = await getPropertyBySlug(params.slug);
return (
{property.title}
