Document de référence

Cahier des charges — FILIA (2025-2026)

Version courte et opérationnelle pour la conception de sites d’agences immobilières en Europe, compatibles avec l’indexation par FILIA, agrégateur IA des annonces publiées sur les sites d’agences (sans API centralisée, sans contrainte d’UI/UX uniforme).

Périmètre

  • Sites d’agences indépendants (design libre)
  • Back‑office d’édition / publication des annonces
  • Exposition à l’indexation FILIA (crawling)

Objectifs

  • Indexabilité IA & SEO
  • Performance & accessibilité
  • Conformité RGPD / ePrivacy
Sommaire
  1. Objectifs & principes
  2. Périmètre fonctionnel
  3. Exigences d’indexation FILIA
  4. Stack technique recommandée
  5. Sécurité & durcissement
  6. RGPD & ePrivacy
  7. SEO, accessibilité & performance
  8. Observabilité & SRE
  9. Qualité, CI/CD & recette
  10. Livrables, jalons & SLA
  11. Annexes (exemples JSON‑LD, robots.txt)
  12. Checklist de conformité

1) Objectifs & principes

Concevoir des sites d’agences indépendants, faciles à parcourir par les utilisateurs et par les crawlers, afin que FILIA, agrégateur IA, puisse indexer l’ensemble du marché sans dépendance à une API centralisée.

  • Indépendance : chaque agence possède son propre back‑office et sa base de données.
  • Indexabilité : structure sémantique, sitemaps, métadonnées et contenus stables.
  • Respect des personnes : RGPD & ePrivacy (cookies first‑party seulement si nécessaires).
  • Durabilité : performance, sobriété, hébergement en UE, sécurité by design.

2) Périmètre fonctionnel

MVP

  • Pages : Accueil, Liste des biens, Fiche bien, L’agence, Équipe, Contact, Mentions légales, Politique de confidentialité.
  • Recherche locale (facultative) : filtrage simple (type, transaction, budget, surface, localisation).
  • Formulaires : contact, demande de visite, estimation bien (sans cookies tiers).
  • Back‑office : création/édition des biens, médias, statuts (à vendre / à louer / vendu / loué).
  • SEO de base : titres/desc, canonicals, sitemaps, robots.txt.

Évolutions possibles

  • Comptes propriétaires/acheteurs (favoris, alertes e‑mail).
  • Articles / actualités, FAQ, pages de quartier.
  • PWA (offline, push opt‑in), prise de rendez‑vous, chat.

3) Exigences d’indexation FILIA (sans API)

FILIA indexe les sites par crawling. Les sites doivent donc exposer clairement leurs contenus publics.

  • Sitemaps : sitemaps XML complets (/sitemap.xml) + sitemaps par type (biens, agence, articles) ; mise à jour du champ <lastmod>.
  • URLs stables : slugs canoniques lisibles, pas de paramètres obligatoires pour accéder aux fiches.
  • Robots : autoriser l’exploration des listes et des fiches (robots.txt non bloquant pour ces pages).
  • Contenus SSR/SSG : les fiches doivent être rendues côté serveur pour être indexables.
  • Structured data : JSON‑LD schema.org pour l’agence et les biens (voir annexes).
  • Images : URLs publiques, balises <img> avec alt et dimensions ; lazy‑loading.
  • Internationalisation : balises hreflang (fr, de, en) si multilingue.
  • Stabilité DOM : pas d’interstitiels bloquants, pas d’injection tardive qui masque le contenu principal.

4) Stack technique recommandée

  • Frontend : Next.js (React) — SSR/SSG/ISR ; alternatives : Nuxt (Vue), SvelteKit.
  • Backend : Node.js (Next API routes / Express / NestJS). Option : Python (FastAPI/Django).
  • Base de données : PostgreSQL (privilégié) ou MongoDB. ORM : Prisma / Mongoose.
  • Cache : Redis (cache de pages, sessions, rate‑limit).
  • Recherche interne (facultatif) : Meilisearch ou Elasticsearch.
  • Hébergement UE : Vercel/Netlify (front), OVHcloud/Scaleway/Google Cloud régions UE (API/DB).
  • UI : TailwindCSS ; animations sobres ; système de design réutilisable.

5) Sécurité & durcissement

  • TLS 1.2/1.3, HSTS, redirection HTTPS, rotation des certificats.
  • En‑têtes : CSP non permissive, X‑Content‑Type‑Options, Referrer‑Policy, Permissions‑Policy.
  • Protection formulaires : validation serveur, CAPTCHA respectueux (Turnstile), rate‑limit.
  • Gestion des secrets : variables d’environnement, coffre (Vault/SM), jamais en dépôt Git.
  • Backups chiffrés, PRA : RPO ≤ 24h, RTO ≤ 4h (cible) ; tests de restauration.

6) RGPD & ePrivacy

  • Cookies first‑party uniquement, minimum fonctionnel (session, préférence langue).
  • Analytics : Plausible, Matomo (self‑hosted) ou Simple Analytics. Google Analytics classique à éviter.
  • Consentement : CMP conforme, granularité et journalisation des choix ; pas de bannière si aucun cookie non‑essentiel.
  • Formulaires : information, base légale, finalités, conservation ; droits d’accès/suppression.
  • Hébergement et sous‑traitants : UE only, DPA signés ; registre des traitements.

7) SEO, accessibilité & performance

  • Accessibilité : WCAG 2.2 AA (focus visible, ARIA, contraste, navigation clavier, alternatives media).
  • Core Web Vitals : LCP ≤ 2.5s, INP ≤ 200ms, CLS ≤ 0.1 ; images responsives et préchargement malin.
  • Lighthouse : score ≥ 90 sur Performance/SEO/Accessibilité.
  • SEO : titles/desc, canoniques, hreflang, Open Graph, sitemaps ; contenus riches non dupliqués.

8) Observabilité & SRE

  • Logs structurés (JSON), traçabilité des erreurs (Sentry/équivalent, sans PII).
  • Métriques (Prometheus, Grafana), uptime, alertes.
  • Journal des changements (CHANGELOG), versions sémantiques.

9) Qualité, CI/CD & recette

  • CI : lint, tests unitaires & e2e (Playwright), audit accessibilité (axe‑core), Lighthouse CI.
  • Sécurité : SAST/DAST, analyse de dépendances, SBOM (CycloneDX).
  • CD : déploiement staging puis production (approbation), migrations DB versionnées.

10) Livrables, jalons & SLA

  • Livrables : code source, documentation, guides d’admin, runbook d’exploitation, SBOM, export DB.
  • Jalons (exemple) : cadrage → design system → MVP → recette → mise en ligne → hypercare (30 j).
  • SLA cible : front 99,9 %, backend 99,5 % ; support heures ouvrées (EU).

Annexes

Exemple JSON‑LD — Agence

{
  "@context": "https://schema.org",
  "@type": "RealEstateAgent",
  "name": "Agence Exemple",
  "url": "https://agence-exemple.eu",
  "logo": "https://agence-exemple.eu/logo.png",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "10, Rue Principale",
    "postalCode": "75000",
    "addressLocality": "Paris",
    "addressCountry": "FR"
  },
  "telephone": "+33 1 23 45 67 89"
}

Exemple JSON‑LD — Fiche bien

{
  "@context": "https://schema.org",
  "@type": "Offer",
  "priceCurrency": "EUR",
  "price": "650000",
  "availability": "https://schema.org/InStock",
  "itemOffered": {
    "@type": "Apartment",
    "name": "Appartement 3 pièces — Centre",
    "floorSize": { "@type": "QuantitativeValue", "value": 78, "unitCode": "MTK" },
    "numberOfRoomsTotal": 3,
    "address": {
      "@type": "PostalAddress",
      "addressLocality": "Luxembourg",
      "addressCountry": "LU"
    }
  }
}

robots.txt (exemple)

User-agent: *
Allow: /
Disallow: /admin/
Sitemap: https://agence-exemple.eu/sitemap.xml

Checklist de conformité (extrait)

  • [ ] Sitemaps complets (lastmod à jour), robots non bloquant.
  • [ ] JSON‑LD agence & fiches biens présent et valide.
  • [ ] WCAG 2.2 AA passé (échantillon représentatif).
  • [ ] LCP ≤ 2.5s sur pages critiques (mobile).
  • [ ] Cookies non essentiels désactivés par défaut.
  • [ ] Backups chiffrés, restauration testée & documentée.