# 2023–24 Ligue 2

The 2023–24 Ligue 2, commonly known as Ligue 2 BKT for sponsorship reasons, was the 85th season of Ligue 2. It began on 5 August 2023 and concluded on 1 June 2024.

## Teams
### Changes

Concarneau (promoted for the first time in history from this season) and Dunkerque (promoted return after two years absence). Replacing Dijon and Nîmes (both relegated after two years in second tier) and Niort (relegated after eleven years in second tier). Later, Sochaux was administratively relegated after nine years in second tier and replaced by Annecy, that was originally relegated to National.
| from Championnat National | to Ligue 1 | from Ligue 1 | to Championnat National |
| Concarneau Dunkerque | Le Havre Metz | Ajaccio Angers Auxerre Troyes | Dijon Nîmes Niort Sochaux (administrative relegation) |

### Promotion and Relegation

Due to the restructuring of the French football leagues, this season was the last with 20 teams as its number was reduced to 18 teams the following season. The top two teams were promoted to 2024–25 Ligue 1, while teams from 3rd to 5th played with the 16th-placed team from 2023–24 Ligue 1 in the promotion play-offs. The four last teams were relegated to 2024–25 Championnat National.

### Stadiums and locations

| Club | Location | Venue | Capacity |
| Ajaccio | Ajaccio | Stade François Coty | 10,446 |
| Amiens | Amiens | Stade de la Licorne | 12,097 |
| Angers | Angers | Stade Raymond Kopa | 18,752 |
| Annecy | Annecy | Parc des Sports | 15,660 |
| Auxerre | Auxerre | Stade de l'Abbé-Deschamps | 21,379 |
| Bastia | Bastia | Stade Armand Cesari | 16,078 |
| Bordeaux | Bordeaux | Matmut Atlantique | 42,115 |
| Caen | Caen | Stade Michel d'Ornano | 21,215 |
| Concarneau | Concarneau | Stade Francis-Le Blé Stade du Moustoir | 15,931 18,110 |
| Dunkerque | Dunkerque | Stade Marcel-Tribut | 4,933 |
| Grenoble | Grenoble | Stade des Alpes | 20,068 |
| Guingamp | Guingamp | Stade de Roudourou | 18,378 |
| Laval | Laval | Stade Francis Le Basser | 18,607 |
| Paris FC | Paris | Stade Sébastien Charléty | 19,151 |
| Pau | Pau | Nouste Camp | 4,031 |
| Quevilly-Rouen | Rouen | Stade Robert Diochon | 12,018 |
| Rodez | Rodez | Stade Paul-Lignon | 5,955 |
| Saint-Étienne | Saint-Étienne | Stade Geoffroy-Guichard | 42,000 |
| Troyes | Troyes | Stade de l'Aube | 21,684 |
| Valenciennes | Valenciennes | Stade du Hainaut | 25,172 |
* ^ Since the Stade Guy-Piriou is not suitable for Ligue 2 regulations, Concarneau played at both the Stade Francis-Le Blé in Brest and the Stade du Moustoir in Lorient.

### Personnel and kits

| Team | Manager | Captain | Kit manufacturer | Sponsors (front) | Sponsors (back) | Sponsors (sleeve) | Sponsors (shorts) | Sponsors (socks) |
| Ajaccio | Olivier Pantaloni | Vincent Marchetti | Adidas | Cullettività di Corsica-Collectivité de Corse, Gamm Vert | Madewis | Air Corsica, AZ Habitat | Ajaccio, Europcar | None |
| Amiens | Omar Daf | Régis Gurtner | Puma | Intersport, Igol Lubrifiants, Gueudet | Igol Lubrifiants | None | Amiens Métropole, E.Leclerc Rivery | None |
| Angers | Alexandre Dujeux | Pierrick Capelle | Nike | École Noir&Blanc, Maison de l'Atoll, Angers | None | None | Système U | None |
| Annecy | Laurent Guyot | Jean-Jacques Rocchi | Adidas | MSC Cruises, E.Leclerc Annecy, Mediaco Vrac, TeamWork | Stgenergy, Nissan Groupe Maurin | Tissier Technique | LP Charpente, Burger King | None |
| Auxerre | Christophe Pélissier | Jubal | Macron | Acadomia, X1, SPPE, Servistores | LCR, X1 | Groupama | Auxerre, Actis Location | None |
| Bastia | Michel Moretti | Christophe Vincent | Adidas | Oscaro Power, Corsica Ferries, Capembal, Roncaglia Blanchisserie, Collectivité de Corse, Coviag, Olivier Bleu, Smart Good Things, Casa di e Lingue | Payfoot, ESSE, Madewis | Groupe Actual, Asco6Tem | Burger King, Garage Corsa, CORSECARLOC | None |
| Bordeaux | Albert Riera | Yoann Barbet | Adidas | Crédit Mutuel du Sud-Ouest, Groupe Vital | MAT IN BAT, Bistro Régent | Cupra | Vigier Groupe, Meyva Fruits Secs | None |
| Caen | Nicolas Seube | Romain Thomas | Kappa | Starwash (H)/Saint James Clothing (A), Künkel, Thalazur | Imprimerie NII, Guilloux | Carrefour Ouistreham | Crédit Agricole Normandie, Printngo Publicité | None |
| Concarneau | Stéphane Le Mignan | Guillaume Jannez | Hummel | GUYOT Environment (H)/AR Collection Hôtels (A), Tanguy Materiaux (H), E.Leclerc (H), Piriou | Concarneau Cornouaille Agglomération (H), Charnel (H)/USINE ONLINE (A) | Concarneau | Barillec (H), Groupe SOFT (H)/Triangle Intérim (A) | None |
| Dunkerque | Luís Castro | Demba Thiam | Adidas | Intersport, Dunkerque Communauté Urbaine, Topensi | DS Levage | 2024 Vivre les JO #dunkerqueagglo Tous en bleu, blanc, rouge | Hauts-de-France, Onet | None |
| Grenoble | Laurent Peyrelade | Brice Maubleu | Nike | Vinci Immobilier (H)/Carrefour Market (A), Carrefour (H)/Vinci Immobilier (A), Smart Good Things, Grenoble Alpes Métropole | Chamrousse, Le Cabanon en Provence | None | LCR | None |
| Guingamp | Stéphane Dumont | Jérémy Livolant | Umbro | Celtigel, Creactuel, Breizh Cola, Ballay | Jardiman, Vital Concept | Cafés Coïc | Bernard Jarnoux Crêpier, Tibbloc | None |
| Laval | Olivier Frapolli | Jimmy Roye | Kappa | Lactel, La Mayenne Le Département, Laval Agglo | V and B Cave & Bar, Groupe Lucas, Mayenne | Groupe Actual | Laval Agglo, SEPAL, Aropiz | None |
| Paris | Stéphane Gilli | Cyril Mandouki | Adidas | Bahrain Victorious, Lycamobile | Vinci | None | None | | None |
| Pau | Nicolas Usaï | Antoine Batisse | Puma | Bullux Services, Pau, Casino de Pau, Intersport | Arobase Intérim, Brico Fenêtre | Bullux Services | Übi Care, Mansion Sports | None |
| Quevilly-Rouen | Jean-Louis Garcia | Alexandre Bonnet | Hummel | Matmut, Métropole Rouen Normandie, TPR, Intersport | SATEB | None | Vikings Auto | None |
| Rodez | Didier Santini | Rémy Boissier | Adidas | Maxoutil, E.Leclerc | JeanStation, Thermatic, Ville de Rodez, Aveyron, Rodez Agglomération, Occitanie | aveyron.fr | Intersport, Maxoutil, Andrieu Construction | None |
| Saint-Étienne | Olivier Dall'Oglio | Anthony Briançon | Hummel | Smart Good Things/Kelyps Intérim, Loire, BYmyCAR, Terroir Halles | Saint-Étienne La Métropole, ZEbet | Kelyps Intérim/Exaltan RH | Aésio Mutuelle, Desjoyaux | None |
| Troyes | David Guion | Xavier Chevalerin | Le Coq Sportif | LCR (H)/La Licorne Hotel & Spa (A), Troyes, norelem, Festilight | Sinfin, Amplitude Groupe Automobile | Century 21 Groupe Martinot | Huguier Frères | None |
| Valenciennes | Ahmed Kantari | Joffrey Cuffaut | Acerbis | Tonsser/Association Emera, Groupe Dhollande, Spefinox | TSR | None | LCR, OCAD | None |

## Managerial changes

| Team | Outgoing manager | Manner of departure | Date of vacancy | Position in table | Incoming manager | Date of appointment |
| Caen | Stéphane Moulin | Resigned | 17 May 2023 | Pre-season | Jean-Marc Furlan | 1 July 2023 |
| Paris FC | Thierry Laurey | Resigned | 3 June 2023 | Pre-season | Stéphane Gilli | 1 July 2023 |
| Pau | Didier Tholot | Sacked | 9 June 2023 | Pre-season | Nicolas Usaï | 1 July 2023 |
| Amiens | Patrice Descamps | End of tenure as caretaker | 30 June 2023 | Pre-season | Omar Daf | 1 July 2023 |
| Valenciennes | Ahmed Kantari | End of tenure as caretaker | 30 June 2023 | Pre-season | Jorge Maciel | 5 July 2023 |
| Dunkerque | Mathieu Chabert | Sacked | 24 September 2023 | 17th | Luís Castro | 26 September 2023 |
| Bordeaux | David Guion | Sacked | 7 October 2023 | 13th | Albert Riera | 11 October 2023 |
| Caen | Jean-Marc Furlan | Sacked | 7 November 2023 | 12th | Nicolas Seube | 30 November 2023 |
| Troyes | Patrick Kisnorbo | Sacked | 26 November 2023 | 17th | David Guion | 6 December 2023 |
| Saint-Étienne | Laurent Batlles | Sacked | 6 December 2023 | 8th | Olivier Dall'Oglio | 12 December 2023 |
| Valenciennes | Jorge Maciel | Sacked | 6 December 2023 | 20th | Ahmed Kantari | 6 December 2023 |
| Quevilly-Rouen | Olivier Echouafni | Sacked | 15 January 2024 | 18th | Jean-Louis Garcia | 22 January 2024 |
| Bastia | Régis Brouard | Sacked | 29 January 2024 | 16th | Michel Moretti | 29 December 2024 |
| Grenoble | Vincent Hognon | Sacked | 13 March 2024 | 7th | Laurent Peyrelade | 15 March 2024 |

## League table

| Pos | Team | Pld | W | D | L | GF | GA | GD | Pts | Promotion or Relegation |
| 1 | Auxerre (C, P) | 38 | 21 | 11 | 6 | 72 | 36 | +36 | 74 | Promotion to Ligue 1 |
| 2 | Angers (P) | 38 | 20 | 8 | 10 | 56 | 42 | +14 | 68 | Promotion to Ligue 1 |
| 3 | Saint-Étienne (O, P) | 38 | 19 | 8 | 11 | 48 | 31 | +17 | 65 | Qualification for promotion play-offs final |
| 4 | Rodez | 38 | 16 | 12 | 10 | 62 | 51 | +11 | 60 | Qualification for promotion play-offs semi-final |
| 5 | Paris FC | 38 | 16 | 11 | 11 | 49 | 42 | +7 | 59 | Qualification for promotion play-offs semi-final |
| 6 | Caen | 38 | 17 | 7 | 14 | 51 | 45 | +6 | 58 | |
| 7 | Laval | 38 | 15 | 10 | 13 | 40 | 45 | −5 | 55 | |
| 8 | Amiens | 38 | 12 | 17 | 9 | 36 | 36 | 0 | 53 | |
| 9 | Guingamp | 38 | 13 | 12 | 13 | 44 | 40 | +4 | 51 | |
| 10 | Pau | 38 | 13 | 12 | 13 | 60 | 57 | +3 | 51 | |
| 11 | Grenoble | 38 | 13 | 12 | 13 | 43 | 44 | −1 | 51 | |
| 12 | Bordeaux (D, R) | 38 | 14 | 9 | 15 | 50 | 52 | −2 | 50 | Administrative relegation to National 2 |
| 13 | Bastia | 38 | 14 | 9 | 15 | 44 | 48 | −4 | 50 | |
| 14 | Annecy | 38 | 12 | 10 | 16 | 49 | 50 | −1 | 46 | |
| 15 | Ajaccio | 38 | 12 | 10 | 16 | 35 | 46 | −11 | 46 | |
| 16 | Dunkerque | 38 | 12 | 10 | 16 | 36 | 52 | −16 | 46 | |
| 17 | Troyes | 38 | 9 | 14 | 15 | 42 | 50 | −8 | 41 | Spared from relegation |
| 18 | Quevilly-Rouen (R) | 38 | 7 | 17 | 14 | 51 | 55 | −4 | 38 | Relegation to National |
| 19 | Concarneau (R) | 38 | 10 | 8 | 20 | 39 | 57 | −18 | 38 | Relegation to National |
| 20 | Valenciennes (R) | 38 | 6 | 11 | 21 | 26 | 54 | −28 | 29 | Relegation to National |
* ↑ Bordeaux were deducted 1 point due to federation decision.
* ↑ Bastia were deducted 1 point due to federation decision.

## Results

| Home \ Away | AJA | AMI | ANG | ANN | AUX | BAS | BOR | CAE | CON | DUN | GRE | GUI | LAV | QUE | PFC | PAU | ROD | STE | TRO | VAL |
| Ajaccio | — | 0–0 | 1–1 | 1–3 | 0–1 | 2–0 | 0–0 | 2–1 | 1–0 | 2–2 | 1–2 | 3–0 | 2–0 | 1–1 | 2–1 | 2–0 | 1–1 | 2–0 | 1–0 | 2–1 |
| Amiens | 0–0 | — | 1–4 | 1–0 | 0–0 | 2–1 | 1–1 | 0–0 | 1–1 | 0–1 | 1–2 | 4–1 | 0–0 | 1–0 | 1–1 | 2–3 | 1–1 | 1–0 | 0–0 | 0–0 |
| Angers | 3–1 | 1–3 | — | 0–0 | 2–2 | 2–0 | 2–0 | 3–0 | 2–0 | 0–0 | 1–0 | 1–0 | 1–1 | 3–2 | 2–0 | 2–1 | 2–1 | 0–3 | 2–1 | 2–0 |
| Annecy | 2–0 | 1–1 | 1–2 | — | 0–2 | 3–2 | 3–1 | 1–2 | 0–3 | 3–0 | 0–1 | 1–4 | 1–3 | 0–0 | 2–2 | 0–0 | 1–2 | 1–1 | 0–0 | 2–1 |
| Auxerre | 2–0 | 0–1 | 1–0 | 4–0 | — | 1–1 | 3–1 | 2–1 | 4–1 | 0–1 | 0–0 | 1–1 | 4–0 | 3–2 | 2–0 | 2–2 | 3–1 | 5–2 | 2–0 | 0–0 |
| Bastia | 1–0 | 1–2 | 2–0 | 2–1 | 0–0 | — | 3–1 | 1–2 | 2–0 | 1–1 | 1–0 | 0–0 | 0–3 | 0–0 | 1–1 | 1–4 | 0–2 | 0–4 | 3–2 | 3–0 |
| Bordeaux | 4–0 | 2–0 | 1–0 | 3–1 | 2–4 | 2–3 | — | 1–1 | 1–0 | 2–0 | 1–0 | 1–0 | 0–1 | 0–0 | 3–3 | 3–2 | 2–2 | 0–0 | 0–1 | 3–1 |
| Caen | 3–0 | 2–0 | 2–0 | 2–1 | 1–1 | 1–0 | 0–1 | — | 1–0 | 1–0 | 1–2 | 0–1 | 1–0 | 3–3 | 0–1 | 2–0 | 1–0 | 1–2 | 0–0 | 3–0 |
| Concarneau | 2–1 | 0–0 | 2–4 | 1–1 | 1–2 | 0–0 | 4–2 | 0–2 | — | 4–3 | 0–3 | 2–3 | 1–3 | 0–0 | 2–2 | 1–2 | 1–2 | 0–1 | 1–0 | 1–0 |
| Dunkerque | 2–0 | 0–1 | 0–1 | 0–2 | 1–3 | 0–5 | 0–2 | 2–2 | 2–2 | — | 0–0 | 0–1 | 0–2 | 0–1 | 1–3 | 1–0 | 1–2 | 1–0 | 2–2 | 2–1 |
| Grenoble | 0–3 | 1–3 | 0–0 | 1–0 | 1–1 | 0–0 | 2–0 | 5–1 | 2–1 | 2–2 | — | 0–0 | 0–2 | 2–1 | 2–0 | 0–1 | 2–1 | 0–2 | 0–0 | 3–3 |
| Guingamp | 3–0 | 0–0 | 1–2 | 1–4 | 2–1 | 0–1 | 0–0 | 1–0 | 0–1 | 0–1 | 2–2 | — | 0–1 | 2–2 | 0–1 | 4–0 | 3–3 | 2–2 | 0–0 | 3–0 |
| Laval | 1–1 | 1–1 | 1–0 | 0–3 | 1–3 | 1–2 | 1–0 | 2–1 | 0–3 | | 1–1 | 2–1 | — | 2–4 | 1–1 | 1–1 | 1–0 | 0–1 | 1–2 | 1–0 |
| Quevilly-Rouen | 0–1 | 3–3 | 0–1 | 1–2 | 4–3 | 0–1 | 3–2 | 1–2 | 2–3 | 1–2 | 1–1 | 0–1 | 0–0 | — | 0–0 | 2–2 | 3–1 | 2–1 | 1–1 | 0–0 |
| Paris FC | 2–0 | 3–0 | 3–1 | 2–1 | 0–2 | 1–0 | 1–2 | 0–2 | 3–0 | 1–2 | 2–1 | 2–1 | 0–1 | 2–2 | — | 1–1 | 2–0 | 0–0 | 3–2 | 2–1 |
| Pau | 1–1 | 1–0 | 4–4 | 0–3 | 2–2 | 1–2 | 3–0 | 2–3 | 2–0 | 1–1 | 3–2 | 1–2 | 3–0 | 0–2 | 2–0 | — | 2–2 | 0–1 | 1–1 | 3–1 |
| Rodez | 2–0 | 2–2 | 4–1 | 1–3 | 2–0 | 1–1 | 2–2 | 5–3 | 2–0 | 0–0 | 3–1 | 0–0 | 1–2 | 3–3 | 1–0 | 2–1 | — | 2–1 | 2–1 | 0–1 |
| Saint-Étienne | 0–0 | 0–1 | 2–0 | 2–1 | 1–0 | 3–2 | 2–1 | 1–0 | 1–0 | 2–0 | 0–1 | 1–3 | 0–0 | 2–1 | 0–1 | 1–2 | 1–1 | — | 5–0 | 0–0 |
| Troyes | 3–1 | 2–0 | 1–4 | 1–1 | 1–2 | 2–0 | 2–1 | 2–1 | 0–0 | 1–2 | 3–1 | 0–1 | 3–1 | 2–2 | 1–2 | 2–2 | 2–3 | 0–1 | — | TBD |
| Valenciennes | 1–0 | 0–1 | 0–0 | 0–0 | 1–4 | 3–1 | 1–2 | 2–2 | 0–1 | 0–1 | 2–0 | 0–0 | 1–1 | 2–1 | 0–1 | 1–4 | 0–2 | 0–2 | 1–1 | — |

## Promotion play-offs

A promotion play-off competition is held at the end of the season, involving the 3rd, 4th and 5th-placed teams in 2023–24 Ligue 2, and the 16th-placed team in 2023–24 Ligue 1.
The quarter-final was played on 21 May, and the semi-final on 24 May.
| Quarter-final | Quarter-final | Quarter-final | Semi-final | Semi-final | Semi-final | Final | Final | Final | Final | Final |
| | | | 3B | Saint-Étienne | 2 | | | | | |
| | | | 4B | Rodez | 0 | | | | | |
| 4B | Rodez | 2 (3) | 4B | Rodez | 0 | | | | | |
| 5B | Paris FC | 2 (2) | | | | | | | | |
| 5B | Paris FC | 2 (2) | | | | 3B | Saint-Étienne | 2 | 2 | 4 |
| | | | | | | 16A | Metz | 1 | 2 | 3 |
Quarter-final
Semi-final
Promotion Play-off Final 1st leg
2nd leg
Saint-Étienne won 4–3 on aggregate and were promoted to Ligue 1, while Metz were relegated to Ligue 2.

## Season statistics
### Top goalscorers

| Rank | Player | Club | Goals |
| 1 | Alexandre Mendy | Caen | 22 |
| 2 | Loïs Diony | Angers | 15 |
| 2 | Ado Onaiwu | Auxerre | 15 |
| 2 | Moussa Sylla | Pau | 15 |
| 2 | Louis Mafouta | Amiens | 15 |
| 6 | Andréas Hountondji | Rodez | 14 |
| 7 | Kilian Corredor | Rodez | 12 |
| 7 | Pape Ibnou Ba | Concarneau | 12 |
| 7 | Sambou Soumano | Quevilly-Rouen | 12 |
| 7 | Kalifa Coulibaly | Quevilly-Rouen | 12 |
| 7 | Migouel Alfarela | Bastia | 12 |
| 7 | Ibrahim Sissoko | Saint-Étienne | 12 |

## Attendances

AS Saint-Étienne drew the highest average home attendance in the 2023-24 edition of the Ligue 2.
| # | Football club | Home games | Average attendance |
| 1 | AS Saint-Étienne | 19 | 24,608 |
| 2 | Girondins de Bordeaux | 19 | 21,545 |
| 3 | SM Caen | 19 | 15,479 |
| 4 | AJ Auxerre | 19 | 14,936 |
| 5 | SC Bastia | 19 | 10,104 |
| 6 | Angers SCO | 19 | 9,420 |
| 7 | EA Guingamp | 19 | 8,649 |
| 8 | Stade Lavallois | 19 | 7,961 |
| 9 | Amiens SC | 19 | 6,953 |
| 10 | Valenciennes FC | 19 | 6,309 |
| 11 | FC Annecy | 19 | 6,230 |
| 12 | Grenoble Foot 38 | 19 | 6,109 |
| 13 | Paris FC | 19 | 5,588 |
| 14 | ESTAC | 19 | 5,192 |
| 15 | US Quevilly-Rouen | 19 | 3,987 |
| 16 | AC Ajaccio | 19 | 3,928 |
| 17 | USL Dunkerque | 19 | 3,658 |
| 18 | Pau FC | 19 | 3,225 |
| 19 | Rodez AF | 19 | 2,946 |
| 20 | US Concarneau | 19 | 1,906 |