Rediriger les parcours alternance 1J1S vers les landing pages LBA dédiées
Mise à jour post test recette (21 avril 2026) : suite retour de LBA, les UTM injectés sur les redirections ont été ajustés. Les valeurs effectives produites par le code sont désormais :
- Candidats :
utm_source=1j1s&utm_medium=website&utm_campaign=landinglba1j1s- Recruteurs :
utm_source=1j1s&utm_medium=website&utm_campaign=recruteurs_landinglba1j1sLes mentions
utm_source=1jeune1solutiondans le corps de ce ticket correspondent à la spec initiale, pas à l'état courant.
Type : User story (avec volet enabler de nettoyage)
Priorité : P1
Échéance : semaine du 20 avril 2026 au plus tard (campagne grand public alternance en mai 2026)
Source : mail DGEFP, Houssine Gartoum, 9 avril 2026. Verbatim et échanges complets dans docs/docs/liens_lba/contexte.md.
USER STORY
En tant que jeune candidat à l'alternance ou recruteur d'apprenti arrivant sur 1jeune1solution.gouv.fr, je veux atterrir directement sur une page dédiée qui me permet d'agir (candidater ou déposer une offre), afin d'éliminer les ruptures de navigation qui dégradent aujourd'hui la conversion sur le parcours alternance.
CONTEXTE
La DGEFP et La Bonne Alternance ont publié deux landing pages aux couleurs 1J1S, l'une côté candidats (/1jeune1solution), l'autre côté recruteurs (/1jeune1solution-recruteurs). Ces landings centralisent désormais le parcours alternance et remplacent les pages de recherche, de détail d'offre, de candidature spontanée et de dépôt d'offre actuellement hébergées sur 1J1S. La bascule doit être en production avant la campagne grand public alternance prévue en mai 2026, sur demande écrite de Houssine Gartoum (DGEFP/SDFIMOD/MISI). Les réponses LBA sur les 8 questions techniques posées en amont sont documentées dans contexte.md.
RÈGLES DE GESTION & DÉPENDANCES
- Redirections permanentes (HTTP 308), indexables par les moteurs, car les URLs cibles LBA sont stables dans le temps (confirmé par LBA).
- Les query params reçus sur les URLs sources sont intégralement transmis aux landings LBA, pour préserver les campagnes et les UTM en cours.
- Un identifiant de provenance fixe
utm_source=1jeune1solutionest ajouté sur chaque redirection. Il doit remonter dans Plausible et Matomo côté LBA pour mesurer le volume basculé. /formations/apprentissage(recherche de formations en apprentissage type CFA) est hors périmètre et reste strictement hébergée sur 1J1S, avec toutes ses dépendances (composantsFormationAlternance, serveurformations, serveurmetiers,ComboboxMetiers, variableNEXT_PUBLIC_FORMATION_LBA_FEATURE).- La landing recruteurs remplace intégralement l'ancien widget iframe LBA embarqué dans
/apprentissage/deposer-offre. Aucune autre instance du widget à conserver. - La landing candidats remplace l'iframe LBA de candidature spontanée actuellement embarquée dans
/apprentissage/entreprise/{id}. - Les 3 entrées du menu principal concernées doivent suivre le pattern d'externalisation déjà en place pour « Stages d'observation » : lien externe, icône « nouvelle fenêtre » automatique, ouverture en nouvel onglet via le hook
useIsInternalLink.
CRITÈRES D'ACCEPTATION
Scénario 1 : redirection côté candidats (URL racine)
Étant donné un visiteur arrivant sur /apprentissage ou /choisir-apprentissage
Quand il accède à l'URL (directement, via Google, ou via un partage externe)
Alors il est redirigé en HTTP 308 vers https://labonnealternance.apprentissage.beta.gouv.fr/1jeune1solution?utm_source=1jeune1solution
Et les query params présents sur l'URL source sont transmis à la destination
Scénario 2 : redirection côté candidats (sous routes indexées)
Étant donné un visiteur arrivant sur /apprentissage/{id} (détail d'offre) ou /apprentissage/entreprise/{id} (candidature spontanée)
Quand il accède à l'URL via un deep link externe ou un résultat Google
Alors il est redirigé en HTTP 308 vers la landing candidats LBA avec utm_source=1jeune1solution et les query params source forwardés
Scénario 3 : redirection côté recruteurs
Étant donné un visiteur arrivant sur /apprentissage-entreprises ou /apprentissage/deposer-offre
Quand il accède à l'URL
Alors il est redirigé en HTTP 308 vers https://labonnealternance.apprentissage.beta.gouv.fr/1jeune1solution-recruteurs?utm_source=1jeune1solution
Et les query params présents sur l'URL source sont transmis à la destination
Scénario 4 : menu de navigation
Étant donné un visiteur du portail 1J1S, sur desktop ou mobile
Quand il ouvre le menu principal
Alors l'entrée « Contrats d'alternance » (section Offres) pointe directement vers la landing candidats LBA
Et l'entrée « Découvrir et trouver sa voie avec l'apprentissage » (section Formations et orientation) pointe directement vers la landing candidats LBA
Et l'entrée « Je recrute un apprenti » (section Je suis employeur) pointe directement vers la landing recruteurs LBA
Et chaque entrée affiche l'icône « nouvelle fenêtre » et ouvre dans un nouvel onglet
Scénario 5 : préservation du périmètre formations
Étant donné que /formations/apprentissage est hors périmètre
Quand un visiteur accède à /formations/apprentissage ou à /formations/apprentissage/{id}
Alors la page répond normalement sans redirection
Et l'entrée « Formations en apprentissage » du menu reste un lien interne vers /formations/apprentissage
Scénario 6 : nettoyage du sitemap
Étant donné le sitemap généré par 1J1S
Quand il est servi sur /sitemap.xml
Alors il ne contient plus aucune des URLs alternance redirigées
Et il contient toujours /formations/apprentissage
Scénario 7 : mesure côté LBA
Étant donné qu'une redirection a été déclenchée depuis une URL 1J1S alternance
Quand le visiteur arrive sur la landing LBA
Alors Plausible et Matomo côté LBA enregistrent la visite avec utm_source=1jeune1solution
HORS PÉRIMÈTRE
/formations/apprentissageet toutes ses dépendances (à préserver strictement).- La landing LBA elle-même, qui est déjà en ligne et maintenue par l'équipe LBA.
- La campagne de communication grand public alternance de mai 2026 (suivie par la DGEFP).
- Le suivi analytique côté 1J1S après bascule (les visiteurs ne touchent plus le portail, seul LBA mesure).
NOTES
Volet enabler : nettoyage du code mort
Après bascule, tout le pan alternance candidats et recruteurs devient inaccessible et constitue du code mort à supprimer. Option « Nettoyage complet » validée. Cartographie exhaustive dans contexte.md :
- 99 fichiers à supprimer : pages, composants
Alternance/*etCampagneApprentissage/*, ServiceCardDecouvrirApprentissage, serveuralternances/*etcampagne-apprentissage/*, test Cypress, routes BFF/api/alternances, feature flagNEXT_PUBLIC_ALTERNANCE_LBA_FEATUREdans les.env.*. - 50+ fichiers à préserver : tout le pan
/formations/apprentissage(pages, composantsFormationAlternance/*, serveurformations/*, serveurmetiers/*, route BFF/api/metiers,ComboboxMetiers). - 14 fichiers à mettre à jour : navigation, sitemap, configuration serveur, liens résiduels dans les composants
JeRecrute/*, cartes de la page d'accueil, tests du plan du site et du header.
Points de vigilance
- Le composant
MonEspaceEntreprise.tsxutilise encoreNEXT_PUBLIC_LA_BONNE_ALTERNANCE_URLpour l'espace pro LBA. Il n'est pas lié au périmètre alternance supprimé. La variable d'env doit rester au runtime. - L'ordre des règles dans
config/redirects.jsest structurant : les règles spécifiques (notamment/apprentissage/deposer-offrevers recruteurs et/apprentissage/simulationexistante) doivent précéder le wildcard/apprentissage/:path*qui cible les candidats, sinon le wildcard prend le dessus. - Next.js 14 forward automatiquement les query params source sur les redirections (vérifié doc officielle). Pas besoin d'énumérer explicitement les UTM dans la config.
QUESTIONS OUVERTES
- Stratégie PR : un seul PR « bascule fonctionnelle plus nettoyage 99 fichiers » (gros diff cohérent) ou deux PR séparées (bascule d'abord pour respecter l'échéance du 20 avril, ménage à froid ensuite) ?
- CTAs résiduels
JeRecrute: dansDecouvrirDispositifsetDecouvrirMesuresEmployeursEtApprentissage, on retarge les liens directement vers les URLs LBA externes (UX optimale, hop direct, icône « nouvelle fenêtre ») ou on supprime purement les CTAs (perte fonctionnelle mineure) ?
VÉRIFICATION DE LIVRAISON
npm run lintsans warning.npm run check-types.npm testvert (suite vitest).curl -Isur chaque URL source (/apprentissage,/apprentissage/abc,/apprentissage/entreprise/xyz,/choisir-apprentissage,/apprentissage-entreprises,/apprentissage/deposer-offre) pour confirmer le 308, la destination exacte et le forward des query params.- Vérification visuelle du header desktop et mobile : les 3 entrées affichent l'icône « nouvelle fenêtre ».
- Lecture de
/sitemap.xml: absence des URLs redirigées, présence de/formations/apprentissage. - Validation côté LBA que Plausible et Matomo reçoivent bien
utm_source=1jeune1solution.
HYPOTHÈSES PRISES
- Le typo « /apprentissage/époser-offre » dans la demande initiale est bien une coquille pour
/apprentissage/deposer-offre(confirmé par LBA). - Les URLs cibles
/1jeune1solutionet/1jeune1solution-recruteurssont stables (confirmé par LBA). - L'approche wildcard pour les query params est techniquement la plus propre (Next.js le fait nativement, recommandation à faire remonter à LBA à titre informatif).
TEST INVEST
- I (Indépendante) : OK, aucune dépendance amont.
- N (Négociable) : CTAs résiduels et stratégie PR restent négociables (cf. questions ouvertes).
- V (Valuable) : bénéfice mesurable via
utm_source=1jeune1solutiondans Plausible et Matomo. - E (Estimable) : périmètre technique cerné (99 fichiers suppression, 14 fichiers modification, pas d'inconnu).
- S (Small) : dépend de la stratégie PR. Un seul PR = moyen à gros. Deux PR = small + medium.
- T (Testable) : 7 scénarios d'acceptation vérifiables.