<?xml version="1.0" encoding="UTF-8"?>
<!--
  2026-08-31 — la racine de alkebulanshopping.com sert desormais la cible web de
  l'application (frontend/mobile/client) ; la vitrine vit sous /vitrine.

  Ce fichier est construit dans dist/ par Vite, puis repose A LA RACINE du site
  par l'etape de deploiement — pas sous /vitrine/. Un robot ne lit que
  /robots.txt et le Sitemap qu'il declare : un sitemap enterre sous /vitrine/
  n'est jamais decouvert.

  Les URL ci-dessous ont CHANGE. Les anciennes (/partner, /investors,
  /universe/*, /legal/*) sont indexees depuis des mois : elles sont redirigees en
  301 vers leur equivalent /vitrine/* par cloudDevops/nginx/alkebulan-gateway.conf.
  Retirer ces redirections, c'est perdre le referencement acquis.

  ============================================================================
  2026-09-02 — L'APPLICATION ENTRE DANS LE SITEMAP. ELLE N'Y ETAIT PAS.
  ============================================================================
  Etat mesure avant ce lot : 11 <loc>, toutes sous / ou /vitrine/*. AUCUNE page
  /alkebulan/*. La boutique — c'est-a-dire le produit — n'etait donc decouverte
  par Google que par crawl de liens. Consequence constatee le meme jour : c'est
  /alkebulan/connexion qui ressortait sur le nom de la marque, pas l'accueil.

  ── CRITERE D'INSCRIPTION, APPLIQUE MECANIQUEMENT ─────────────────────────
  Un <loc> affirme « cette URL merite d'etre indexee MAINTENANT ». Les quatre
  conditions ci-dessous ont ete verifiees une par une, le 2026-09-02, pour
  chacune des huit URL /alkebulan/* ajoutees :

    1. PUBLIQUE — presente dans `PUBLIC_WEB_ROUTES`
       (`frontend/mobile/client/app/alkebulan/_layout.web.tsx`). Cette liste
       blanche fait autorite : ce qui n'y est pas est derriere le garde d'auth,
       et une route protegee dans un sitemap est une erreur.
    2. LA ROUTE EXISTE — fichier `app/alkebulan/<route>.web.tsx` en depot.
    3. SANS PARAMETRE — l'ecran ne lit pas `useLocalSearchParams`. C'est ce qui
       exclut `produits`, `souscategories`, `produits-gros`,
       `souscategories-gros`, `details-produit`, `details-boutique` : sans
       `?categoryId=` ou `?id=`, ces URL n'ont pas de contenu propre.
    4. SERVIE ET NON VIDE — `curl` sur la production : HTTP 200 ET un `<title>`
       non vide dans le HTML statique. C'est la condition qui a ecarte cinq
       pages, listees plus bas.

  ── PAS D'ECRAN D'AUTHENTIFICATION ICI, ET C'EST VOLONTAIRE ───────────────
  `connexion`, `connexion-vendeur`, `inscription`, `verification` et
  `mot-de-passe-oublie` sont bien PUBLICS au sens du garde, mais ils passent en
  `noindex` (decision du proprietaire du 2026-09-02). Les inscrire ici tout en
  leur demandant de sortir de l'index serait se contredire dans deux fichiers.
  Meme raison pour `panier` : il est deja `Disallow` dans robots.txt.

  ── CE QUI N'A PAS PU ETRE INSCRIT, ET POURQUOI (a reprendre) ─────────────
  Cinq pages remplissent les conditions 1 a 3 mais ECHOUENT la 4 : la production
  les sert en 200 avec un `<title data-rh="true"></title>` VIDE et aucune
  `<meta name="description">`. Mesure du 2026-09-02 : leur HTML statique ne
  contient que l'entete et le pied de page — le corps de l'ecran ne rend RIEN.

    · /alkebulan/devenir-vendeur   ┐ cause identifiee : `useState(true)` sur
    · /alkebulan/devenir-livreur   ┘ `checkingStatus` + `if (checkingStatus)
      return <spinner>` place AVANT le `<Head>` (DevenirVendeurWeb.tsx:109 et
      :249 ; DevenirLivreurWeb.tsx:38 et :111). Sous Node, rien ne resout jamais
      cet etat : le prerendu ne voit que la roue d'attente. Meme famille que
      `AccueilWeb.tsx:461`. Remonter le `<Head>` AVANT le `return` de chargement
      suffit a rendre ces deux pages inscriptibles — ce sont les deux meilleures
      pages d'acquisition du site.
    · /alkebulan/conditions-utilisation ┐ meme symptome, cause NON identifiee :
    · /alkebulan/politique-confidentialite ┘ leur `<Head>` est pourtant
      inconditionnel (ConditionsUtilisationWeb.tsx:27) et les cles i18n
      `terms.title` / `privacy.title` existent bien en fr ET en en. A instruire.
    · /alkebulan/decouvrir — n'a AUCUN `<Head>` : la route monte l'ecran NATIF
      `channels/alkebulan/screens/DiscoverScreen`, qui n'a ni titre ni
      description. Sans `<Head>`, l'inscrire produirait un resultat sans titre.

  Ces cinq lignes ne sont pas une liste de souhaits : des que la condition 4
  est remplie pour l'une d'elles, son <loc> s'ajoute et cette entree se retire.
-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <!-- ── Racine du domaine. `app/index.web.tsx` la redirige vers
       /alkebulan/accueil ; les deux sont listees, l'une est l'adresse de marque,
       l'autre la page qui porte reellement le contenu. ─────────────────────── -->
  <url><loc>https://alkebulanshopping.com/</loc><priority>1.0</priority><changefreq>weekly</changefreq></url>

  <!-- ══ APPLICATION — boutique Alkebulan (frontend/mobile/client) ══════════ -->
  <url><loc>https://alkebulanshopping.com/alkebulan/accueil</loc><priority>1.0</priority><changefreq>daily</changefreq></url>
  <url><loc>https://alkebulanshopping.com/alkebulan/categories</loc><priority>0.8</priority><changefreq>weekly</changefreq></url>
  <url><loc>https://alkebulanshopping.com/alkebulan/megadeals</loc><priority>0.8</priority><changefreq>daily</changefreq></url>
  <url><loc>https://alkebulanshopping.com/alkebulan/boutiques</loc><priority>0.8</priority><changefreq>weekly</changefreq></url>
  <url><loc>https://alkebulanshopping.com/alkebulan/categories-gros</loc><priority>0.6</priority><changefreq>weekly</changefreq></url>
  <url><loc>https://alkebulanshopping.com/alkebulan/live-shopping</loc><priority>0.5</priority><changefreq>daily</changefreq></url>
  <url><loc>https://alkebulanshopping.com/alkebulan/centre-aide</loc><priority>0.5</priority><changefreq>monthly</changefreq></url>
  <url><loc>https://alkebulanshopping.com/alkebulan/contact-support</loc><priority>0.4</priority><changefreq>monthly</changefreq></url>

  <!-- ══ VITRINE (frontend/website/officielwebsite) — inchangee ═════════════ -->
  <url><loc>https://alkebulanshopping.com/vitrine/</loc><priority>0.9</priority><changefreq>weekly</changefreq></url>
  <url><loc>https://alkebulanshopping.com/vitrine/partner</loc><priority>0.9</priority><changefreq>monthly</changefreq></url>
  <url><loc>https://alkebulanshopping.com/vitrine/partner/apply</loc><priority>0.8</priority><changefreq>monthly</changefreq></url>
  <url><loc>https://alkebulanshopping.com/vitrine/investors</loc><priority>0.9</priority><changefreq>monthly</changefreq></url>
  <url><loc>https://alkebulanshopping.com/vitrine/universe/alkebulan</loc><priority>0.7</priority><changefreq>monthly</changefreq></url>
  <url><loc>https://alkebulanshopping.com/vitrine/universe/thirtymin</loc><priority>0.7</priority><changefreq>monthly</changefreq></url>
  <url><loc>https://alkebulanshopping.com/vitrine/universe/bulanpay</loc><priority>0.7</priority><changefreq>monthly</changefreq></url>
  <url><loc>https://alkebulanshopping.com/vitrine/universe/lodear</loc><priority>0.7</priority><changefreq>monthly</changefreq></url>
  <url><loc>https://alkebulanshopping.com/vitrine/legal/privacy-policy</loc><priority>0.3</priority><changefreq>yearly</changefreq></url>
  <url><loc>https://alkebulanshopping.com/vitrine/legal/terms</loc><priority>0.3</priority><changefreq>yearly</changefreq></url>
</urlset>
