2019–20 Ligue 2

{{Short description|81st season of the second-tier football league in France}}

{{Infobox football league season

| competition = Ligue 2

| season = 2019–20

| dates = 26 July 2019 – 30 April 2020

| winners = Lorient

| promoted = Lorient
Lens

| relegated = Orléans
Le Mans

| league topscorer = 20 goals
Tino Kadewere, Le Havre

| biggest home win = Sochaux 4–0 Clermont
Round 10, 5 October 2019
Lens 4–0 Sochaux
Round 15, 23 November 2019
Le Havre 4–0 Guingamp
Round 15, 25 November 2019

| biggest away win = Chambly 1–5 Guingamp
Round 13, 1 November 2019
Troyes 0–4 Chambly
Round 15, 22 November 2019
Orléans 0–4 Lorient
Round 17, 3 December 2019
Châteauroux 1–5 Guingamp
Round 19, 20 December 2019
Sochaux 0–4 Lorient
Round 22, 1 February 2020

| highest scoring = 8 goals
Niort 4–4 Paris FC
Round 22, 31 January 2020

| matches = 280

| total goals = 610

| longest wins = 5 (Lorient)

| longest unbeaten = 12 (Clermont)

| longest winless = 9 (Paris FC
Auxerre
Sochaux)

| longest losses = 5 (Le Mans
Rodez
Niort)

| highest attendance = 32,011
Lens 1–0 Lorient
Round 13, 2 November 2019

| lowest attendance = 391
Chambly 3–2 Niort
Round 18, 13 December 2019

| average attendance = 6,768{{cite web|url=https://www.espn.com/soccer/stats/_/league/FRA.2/view/performance|title=French Ligue 2 Performance Stats – 2019–20|publisher=ESPN|access-date=9 March 2020}}

| prevseason = 2018–19

| nextseason = 2020–21

}}

The 2019–20 Ligue 2 (referred to as the Domino's Ligue 2 for sponsorship reasons{{cite news |title=Coup d'envoi pour la Domino's Ligue 2 |url=http://www.lfp.fr/ligue2/article/coup-d-envoi-pour-la-domino-s-ligue-2.htm | publisher=lfp.fr |access-date=15 May 2016 |date=14 April 2016|language = fr}}) season was the 81st season since its establishment. The season was suspended indefinitely on 12 March 2020 due to the COVID-19 pandemic.{{cite web|url=https://www.eurosport.co.uk/football/ligue-1/2019-2020/football-news-france-suspends-all-football-over-coronavirus_sto7702591/story.shtml|title=France suspends all football over coronavirus|publisher=Eurosport|date=12 March 2020}}

On 28 April 2020, the French Prime Minister Édouard Philippe announced that there would be no sporting events, even behind closed doors, before September 2020, thus in effect ending the season. On 30 April 2020, the LFP declared Lorient as champions of Ligue 2, and that the top two clubs would be promoted to Ligue 1, meaning Lens were promoted as well.{{cite web|url=http://www.foot-national.com/foot-lfp-le-communique-de-la-ligue-132950.html|title=LFP : le communiqué de la Ligue|publisher=foot-national.com|language=fr|date=30 April 2020}} The decision on relegations was deferred to the general assembly of the FFF on 20 May 2020.{{cite web|url=http://www.foot-national.com/foot-le-mans-et-orleans-dans-l-attente-une-l2-a-22-132949.html|title=Le Mans et Orléans dans l'attente, une L2 à 22 ?|publisher=foot-national.com|language=fr|date=30 April 2020}}

On 27 May 2020, the executive committee of the FFF rejected a proposal by the LFP to have 22 clubs in the 2020–21 competition, which would have seen Orléans and Le Mans remain in the competition.{{cite web|url=http://www.foot-national.com/foot-la-ligue-2-avec-22-clubs-refusee-par-la-fff-134082.html|title=La Ligue 2 avec 22 clubs refusée par la FFF|publisher=foot-national.com|language=fr|date=27 May 2020}}

Teams

=Team changes=

The following were team changes with respect to the 2018–19 Ligue 2 season.

{{Col begin|width=auto}}

{{Col-2}}

Promoted from 2018–19 Championnat National

Relegated from 2018–19 Ligue 1

{{Col-break|gap=5em}}

Promoted to 2019–20 Ligue 1

Relegated to 2019–20 Championnat National

{{Col-end}}

=Stadia and locations=

{{Location map+ |France |width=450|float=right |caption=Location of teams in 2019–20 Ligue 2 |places=

{{Location map~ |France |lat=41.92667 |long=8.73694 |label=Ajaccio|position=bottom}}

{{Location map~ |France |lat=47.786753 |long=3.588664 |label=Auxerre|position=bottom}}

{{Location map~ |France |lat=49.179461 |long=-0.396767 |label=Caen|position=left}}

{{Location map~ |France |lat=49.1672 |long=2.2489 |label=Chambly|position=right}}

{{Location map~ |France |lat=46.8103 |long=1.6911 |label=Châteauroux|position=right}}

{{Location map~ |France |lat=45.783088 |long=3.082352 |label=Clermont |position=left}}

{{Location map~ |France |lat=45.2002 |long=5.7222 |label=Grenoble |position=right}}

{{Location map~ |France |lat=48.566186 |long=-3.164706 |label=Guingamp|position=top}}

{{Location map~ |France |lat=49.501942 |long=0.171061 |label=Le Havre|position=left}}

{{Location map~ |France |lat=48.0077 |long=0.1984 |label=Le Mans|position=top}}

{{Location map~ |France |lat=50.43285 |long=2.814853 |label=Lens |position=left}}

{{Location map~ |France |lat=47.748889 |long=-3.369444 |label=Lorient}}

{{Location map~ |France |lat=48.6955 |long=6.210687 |label=Nancy|position=right}}

{{Location map~ |France |lat=46.3258333|long=-0.4605555|label=Niort}}

{{Location map~ |France |lat=47.8337 |long=1.9686 |label=Orléans|position=left}}

{{Location map~ |France |lat=48.841422 |long=2.393053 |label=Paris FC|position=bottom}}

{{Location map~ |France |lat=44.3506 |long=2.575 |label=Rodez|position=left}}

{{Location map~ |France |lat=47.512311 |long=6.811345 |label=Sochaux|position=bottom}}

{{Location map~ |France |lat=48.2997 |long=4.0792 |label=Troyes|position=right}}

{{Location map~ |France |lat=50.318925 |long=3.626847 |label=Valenciennes}}

}}

class="wikitable sortable"
Club

! Location

! Venue

! Capacity

{{sort|Ajaccio|Ajaccio}}

|Ajaccio

|Stade François Coty

|style=text-align:center;|10,446

{{sort|Auxerre|Auxerre}}

|Auxerre

|Stade de l'Abbé-Deschamps

|style=text-align:center;|21,379

{{sort|Caen|Caen}}

|Caen

|Stade Michel d'Ornano

|style=text-align:center;|21,215

{{sort|Chambly|Chambly}}

|Chambly

|Stade Pierre Brisson{{efn|Chambly arranged to play 15 of their home matches at Stade Pierre Brisson and four at Stade Charléty as their home stadium, Stade des Marais, did not meet the required standards to host Ligue 2 football and would be undergoing renovation during the season.}}{{cite news|title=Promu en Ligue 2 sans stade aux normes, le FC Chambly arrache un accord pour jouer à Beauvais |url=https://france3-regions.francetvinfo.fr/hauts-de-france/oise/beauvais/promu-ligue-2-stade-aux-normes-fc-chambly-jouera-domicile-beauvais-1666443.html |publisher=francetvinfo.fr |date=11 May 2019 |access-date=22 May 2019 |language=fr}}

|style=text-align:center;|10,178

{{sort|Châteauroux|Châteauroux}}

|Châteauroux

|Stade Gaston Petit

|style=text-align:center;|17,173

{{sort|Clermont|Clermont Foot}}

|Clermont-Ferrand

|Stade Gabriel Montpied

|style=text-align:center;|11,980

{{sort|Grenoble|Grenoble}}

|Grenoble

|Stade des Alpes

|style=text-align:center;|20,068

{{sort|Guingamp|Guingamp}}

|Guingamp

|Stade de Roudourou

|style=text-align:center;|18,378

{{sort|Le Havre|Le Havre}}

|Le Havre

|Stade Océane

|style=text-align:center;|25,178

{{sort|Le Mans|Le Mans}}

|Le Mans

|MMArena

|style=text-align:center;|25,064

{{sort|Lens|Lens}}

|Lens

|Stade Bollaert-Delelis

|style=text-align:center;|37,705

{{sort|Lorient|Lorient}}

|Lorient

|Stade du Moustoir

|style=text-align:center;|18,890

{{sort|Nancy|Nancy}}

|Tomblaine

|Stade Marcel Picot

|style=text-align:center;|20,087

{{sort|Niort|Niort}}

|Niort

|Stade René Gaillard

|style=text-align:center;|10,886

{{sort|Orléans|Orléans}}

|Orléans

|Stade de la Source

|style=text-align:center;|7,000

{{sort|Paris|Paris FC}}

|Paris {{small|(13th arrondissement)}}

|Stade Charléty

|style=text-align:center;|20,000

{{sort|Rodez|Rodez}}

|Rodez

|Stade Paul-Lignon

|style=text-align:center;|5,955

{{sort|Sochaux|Sochaux}}

|Montbéliard

|Stade Auguste Bonal

|style=text-align:center;|20,005

{{sort|Troyes|Troyes}}

|Troyes

|Stade de l'Aube

|style=text-align:center;|21,684

{{sort|Valenciennes|Valenciennes}}

|Valenciennes

|Stade du Hainaut

|style=text-align:center;|25,172

{{notelist}}

=Personnel and kits=

class="wikitable sortable" style="text-align: left;"
Team

! Manager

! Captain

! Kit manufacturer

! Main sponsor

Ajaccio

|{{flagicon|FRA}} {{sortname|Olivier|Pantaloni}}

|{{flagicon|FRA}} {{sortname|Johan|Cavalli}}

|Adidas

Auchan Atrium
Auxerre

|{{flagicon|FRA}} {{sortname|Jean-Marc|Furlan}}

|{{flagicon|BEN}} {{sortname|Jordan|Adéoti}}

|Macron

Remorques LOUALT
Caen

|{{flagicon|FRA}} {{sortname|Pascal|Dupraz}}

|{{flagicon|CGO}} {{sortname|Prince|Oniangué}}

|Umbro

|Maisons France Confort (H), Campagne de France (A & 3)

Châteauroux

|{{flagicon|FRA}} {{sortname|Nicolas|Usaï}}

|{{flagicon|CMR}} {{sortname|Yannick|M'Boné}}

|Nike

|Monin

Chambly

|{{flagicon|FRA}} {{sortname|Bruno|Luzi}}

|{{flagicon|FRA}} {{sortname|Thibault|Jaques}}

|Umbro

|Flint

Clermont

|{{flagicon|FRA}} {{sortname|Pascal|Gastien}}

|{{flagicon|URU}} {{sortname|Jonathan|Iglesias}}

|Patrick

|Crédit Mutuel

Grenoble

|{{flagicon|FRA}} {{sortname|Philippe|Hinschberger}}

|{{flagicon|FRA}} {{sortname|Brice|Maubleu}}

|Nike

|Carrefour, Sempa, BONTAZ

Guingamp

|{{flagicon|FRA}} {{sortname|Sylvain|Didot}}

|{{flagicon|FRA}} {{sortname|Christophe|Kerbrat}}

|Umbro

|Servagroupe (H), Aroma Celte (A)

Le Havre

|{{flagicon|FRA}} {{sortname|Paul|Le Guen}}

|{{flagicon|FRA}} {{sortname|Alexandre|Bonnet}}

|Joma

|Filiassur, SEAFRIGO Group

Le Mans

|{{flagicon|FRA}} {{sortname|Réginald|Ray}}

|{{flagicon|FRA}} {{sortname|Stéphen|Vincent|dab=footballer}}

|Kappa

|Veolia

Lens

|{{flagicon|FRA}} {{sortname|Franck|Haise}}

|{{flagicon|ALG}} {{sortname|Walid|Mesloub}}

|Macron

|Auchan Retail

Lorient

|{{flagicon|FRA}} {{sortname|Christophe|Pélissier|dab=footballer}}

|{{flagicon|FRA}} {{sortname|Fabien|Lemoine}}

|Kappa

|B&B Hotels, Jean Floc'h

Nancy

|{{flagicon|FRA}} {{sortname|Jean-Louis|Garcia}}

|{{flagicon|GUI}} {{sortname|Ernest|Seka}}

|Nike

|Sempa

Niort

|{{flagicon|FRA}} {{sortname|Franck|Passi}}

|{{flagicon|FRA}} {{sortname|Matthieu|Sans}}

|Erima

|Restaurant Le Billon (H), Cheminées Poujoulat (A)

Orléans

|{{flagicon|FRA}} {{sortname|Cyril|Carrière}}

|{{flagicon|FRA}} {{sortname|Gauthier|Pinaud}}

|Kappa

|CTVL

Paris FC

|{{flagicon|FRA}} {{sortname|René|Girard|dab=footballer}}

|{{flagicon|FRA}} {{sortname|Vincent|Demarconnay}}

|Nike

|Vinci

Rodez

|{{flagicon|FRA}} {{sortname|Laurent|Peyrelade}}

|{{flagicon|FRA}} {{sortname|Pierre|Bardy|Pierre Bardy (footballer)}}

|Adidas

|Max Outil

Sochaux

|{{flagicon|SEN}} {{sortname|Omar|Daf}}

|{{flagicon|FRA}} {{sortname|Maxence|Prévot}}

|Lotto

|Nedey Automobiles

Troyes

|{{flagicon|FRA}} {{sortname|Laurent|Batlles}}

|{{flagicon|FRA}} {{sortname|Stéphane|Darbion}}

|Le Coq Sportif

|Babeau Seguin

Valenciennes

|{{flagicon|FRA}} {{sortname|Olivier|Guégan}}

|{{flagicon|FRA}} {{sortname|Laurent|Dos Santos}}

|Acerbis

|Mutuelle Just

=Managerial changes=

class="wikitable sortable"
Team

!Outgoing manager

!Manner of departure

!Date of vacancy

!Position in table

!Incoming manager

!Date of appointment

Nancy

|{{flagicon|FRA}} {{sortname|Alain|Perrin}}

|rowspan=2|End of interim

|14 May 2019{{cite news |title=Alain Perrin s'en va |url=http://www.asnl.net/58/actualites/actualites/fiche/25809 |work=asnl.net |language=fr |date=14 May 2019 |access-date=22 May 2019}}

|rowspan=8|Pre-season

|{{flagicon|FRA}} {{sortname|Jean-Louis|Garcia}}

|30 May 2019

Auxerre

|{{flagicon|FRA}} {{sortname|Cédric|Daury}}

|17 May 2019

|{{flagicon|FRA}} {{sortname|Jean-Marc|Furlan}}

|17 May 2019

Lorient

|{{flagicon|FRA}} {{sortname|Mickaël|Landreau}}

|rowspan=4|Mutual consent

|18 May 2019{{cite news |title=Mickaël Landreau n'est plus l'entraîneur de Lorient |url=https://www.lequipe.fr/Football/Actualites/Lorient-mickael-landreau-sur-le-depart/1019964 |work=L'Équipe |language=fr |date=18 May 2019 |access-date=18 May 2019}}

|{{flagicon|FRA}} {{sortname|Christophe|Pélissier|dab=footballer}}

|29 May 2019{{cite news|title=Ligue 2: Lorient confirme l'arrivée de Christophe Pelissier|url=https://www.lequipe.fr/Football/Actualites/Ligue-2-lorient-confirme-l-arrivee-de-christophe-pelissier/1024132|work=L'Équipe|language=FR}}

Guingamp

|{{flagicon|FRA}} {{sortname|Jocelyn|Gourvennec}}

|24 May 2019{{cite news |title=Communiqué Officiel Commun EAG / Jocelyn Gourvennec |url=https://www.eaguingamp.com/communique-officiel-commun-eag-jocelyn-gourvennec/ |work=eaguingamp.com |language=fr |date=22 May 2019 |access-date=22 May 2019}}

|{{flagicon|FRA}} {{sort|name|Patrice Lair}}

|29 May 2019{{cite web |url=https://www.ouest-france.fr/sport/football/ea-guingamp/ea-guingamp-patrice-lair-officiellement-nomme-entraineur-6374018|title=EA Guingamp. Patrice Lair officiellement nommé entraîneur

|website=ouest-france.fr|date=29 May 2019|access-date=27 February 2023|language=fr}}

Caen

|{{flagicon|FRA}} {{sortname|Fabien|Mercadal}}

|25 May 2019

|{{flagicon|POR}} {{sortname|Rui|Almeida}}

|9 June 2019

Le Havre

|{{flagicon|FRA}} {{sortname|Oswald|Tanchot}}

|28 May 2019

|{{flagicon|FRA}} {{sortname|Paul|Le Guen}}

|29 May 2019

Valenciennes

|{{flagicon|FRA}} {{sortname|Réginald|Ray}}

|End of contract

|6 June 2019

|{{flagicon|FRA}} {{sortname|Olivier|Guégan}}

|6 June 2019

Troyes

|{{flagicon|POR}} {{sortname|Rui|Almeida}}

|Signed by Caen

|9 June 2019

|{{flagicon|FRA}} {{sortname|Laurent|Batlles}}

|14 June 2019

Guingamp

|{{flagicon|FRA}} {{sortname|Patrice|Lair}}

|rowspan=6|Sacked

|23 September 2019{{cite web|url=http://www.foot-national.com/foot-guingamp-patrice-lair-va-partir-122914.html|title=Guingamp: Patrice Lair va partir|publisher=foot-national.com|language=fr|date=23 September 2019}}

|14th

|{{flagicon|FRA}} {{sortname|Sylvain|Didot}}

|24 September 2019 (caretaker){{cite web|url=https://www.ouest-france.fr/sport/football/ea-guingamp/ea-guingamp-apres-le-licenciement-de-patrice-lair-sylvain-didot-pour-au-moins-deux-matches-6534533|title=EA Guingamp. Après le licenciement de Patrice Lair, Sylvain Didot pour au moins deux matches ?|publisher=Ouest France|language=fr|date=24 September 2019}}
7 October 2019 (permanent){{cite web|url=http://www.foot-national.com/foot-guingamp-le-nouvel-entraineur-officialise-le-communique-du-club-123552.html|title=Guingamp: Le nouvel entraîneur officialisé, le communiqué du club|publisher=foot-national.com|language=fr|date=7 October 2019}}

Caen

|{{flagicon|POR}} {{sortname|Rui|Almeida}}

|28 September 2019{{cite web|url=http://www.foot-national.com/foot-caen-rui-almeida-suspendu-de-ses-fonctions-123133.html|title=Caen: Rui Almeida suspendu de ses fonctions|publisher=foot-national.com|language=fr|date=28 September 2019}}

|17th

|{{flagicon|FRA}} {{sortname|Pascal|Dupraz}}

|1 October 2019{{cite web|url=http://www.foot-national.com/foot-caen-pascal-dupraz-nouvel-entraineur-off-123225.html|title=Caen: Pascal Dupraz nouvel entraîneur (off)|publisher=foot-national.com|language=fr|date=1 October 2019}}

Paris FC

|{{flagicon|BIH}} {{sortname|Mehmed|Baždarević}}

|30 December 2019{{cite news |title=C'est fini entre le Paris FC et Bazdarevic |url=https://www.eurosport.fr/football/ligue-2/2019-2020/c-est-fini-entre-le-paris-fc-et-mecha-bazdarevic_sto7591765/story.shtml |website=Eurosport |date=30 December 2019 |access-date=5 January 2020 |language=fr}}

|19th

|{{flagicon|FRA}} {{sortname|René|Girard|dab=footballer}}

|2 January 2020{{cite news |title=René Girard, nouvel entraîneur du Paris FC |url=http://www.rfi.fr/sports/20200102-rene-girard-nouvel-entraineur-paris-fc |website=Radio France Internationale |date=2 January 2020 |access-date=5 January 2020 |language=fr}}

Niort

|{{flagicon|FRA}} {{sortname|Pascal|Plancque}}

|5 January 2020{{cite news |title=Niort se sépare de Pascal Plancque |url=http://sports.tv5monde.com/niort-se-separe-de-pascal-plancque-9627067.html |website=TV5Monde |date=5 January 2020 |access-date=5 January 2020 |language=fr}}

|18th

|{{flagicon|FRA}} {{sortname|Franck|Passi}}

|13 January 2020{{cite web|url=http://www.foot-national.com/foot-niort-un-ancien-marseillais-comme-entraineur-off-127692.html|title=Niort: a former Marseille coach (off)|publisher=foot-national.com|language=fr|date=13 January 2020}}

Orléans

|{{flagicon|FRA}} {{sortname|Didier|Ollé-Nicolle}}

|16 January 2020{{cite web|url=http://www.foot-national.com/foot-orleans-olle-nicolle-ecarte-off-130030.html|title=Orléans : Ollé-Nicolle écarté (off.)|publisher=foot-national.com|language=fr|date=16 January 2020}}

|20th

|{{flagicon|FRA}} {{sortname|Cyril|Carrière}}

|17 January 2020 (interim){{cite web|url=http://www.foot-national.com/foot-orleans-carriere-on-a-tout-a-gagner-130083.html|title=Orléans - Carrière : "On a tout à gagner"|publisher=foot-national.com|language=fr|date=17 January 2020}}

Le Mans

|{{flagicon|FRA}} {{sortname|Richard|Déziré}}

|23 February 2020{{cite web|url=http://www.foot-national.com/foot-le-mans-richard-dezire-et-le-club-se-separent-off-130381.html|title=Le Mans : Richard Déziré et le club se séparent (off)|publisher=foot-national.com|language=fr|date=23 February 2020}}

|19th

|{{flagicon|FRA}} {{sortname|Réginald|Ray}}

|2 March 2020{{cite web|url=http://www.foot-national.com/foot-le-mans-ray-enclencher-une-nouvelle-dynamique-130739.html|title=Le Mans - Ray : "Enclencher une nouvelle dynamique"|publisher=foot-national.com|language=fr|date=2 March 2020}}

Lens

| {{flagicon|FRA}} {{sortname|Philippe|Montanier}}

|rowspan=6|Sacked

| 25 February 2020{{cite news|title=Ligue 2 : Lens écarte son entraîneur Philippe Montanier|url=http://www.leparisien.fr/sports/football/ligue-2-lens-ecarte-son-entraineur-philippe-montanier-25-02-2020-8266584.php/|work=Le Parisien|language=FR|access-date=2020-05-16|archive-date=2020-02-26|archive-url=https://web.archive.org/web/20200226210306/http://www.leparisien.fr/sports/football/ligue-2-lens-ecarte-son-entraineur-philippe-montanier-25-02-2020-8266584.php|url-status=dead}}

| 2nd

| {{flagicon|FRA|football}} {{sortname|Franck|Haise}}

| 25 February 2020{{cite news|title=COMMUNIQUÉ DU RACING|url=https://www.rclens.fr/fr/news/communique-rclens-20200225.php|work=RC Lens|language=FR}} {{Dead link|date=January 2022 |bot=InternetArchiveBot |fix-attempted=yes }}

League table

{{#invoke:Sports table|main|style=WDL

|show_limit=5

|source=[https://www.ligue2.fr/classement?seasonId=2019-2020&matchDay=28&matchLoc=all Ligue 2]

|team1=LOR|team2=LEN|team3=AJA|team4=TRO|team5=CLE|team6=HAC|team7=VAL|team8=GUI|team9=GRE|team10=FCC|team11=AUX|team12=NAN|team13=CAE|team14=SOC|team15=CHA|team16=ROD|team17=PFC|team18=NIO|team19=LMF|team20=ORL

|update=complete

|win_AJA=15|draw_AJA=7 |loss_AJA=6 |gf_AJA=38|ga_AJA=22

|win_AUX=8 |draw_AUX=10|loss_AUX=10|gf_AUX=31|ga_AUX=30

|win_CAE=8 |draw_CAE=10|loss_CAE=10|gf_CAE=33|ga_CAE=34

|win_FCC=9 |draw_FCC=8 |loss_FCC=11|gf_FCC=26|ga_FCC=32

|win_CHA=9 |draw_CHA=7 |loss_CHA=12|gf_CHA=22|ga_CHA=38

|win_CLE=14|draw_CLE=8 |loss_CLE=6 |gf_CLE=35|ga_CLE=25

|win_GRE=7 |draw_GRE=14|loss_GRE=7 |gf_GRE=27|ga_GRE=29

|win_GUI=10|draw_GUI=9 |loss_GUI=9 |gf_GUI=40|ga_GUI=33

|win_HAC=11|draw_HAC=11|loss_HAC=6 |gf_HAC=38|ga_HAC=25

|win_LMF=7 |draw_LMF=5 |loss_LMF=16|gf_LMF=30|ga_LMF=45

|win_LEN=15|draw_LEN=8 |loss_LEN=5 |gf_LEN=39|ga_LEN=24

|win_LOR=17|draw_LOR=3 |loss_LOR=8 |gf_LOR=45|ga_LOR=25

|win_NAN=6 |draw_NAN=16|loss_NAN=6 |gf_NAN=27|ga_NAN=26

|win_NIO=6 |draw_NIO=8 |loss_NIO=14|gf_NIO=30|ga_NIO=41 |note_NIO=Originally, the 18th-placed Ligue 2 team would play in promotion-relegation play-offs at the end of the season with a team from the Championnat National to decide whether they would remain in Ligue 2 for the 2020–21 season, but the play-offs were cancelled and the 18th- placed team remained in Ligue 2.

|win_ORL=4 |draw_ORL=7 |loss_ORL=17|gf_ORL=21|ga_ORL=43

|win_PFC=7 |draw_PFC=7 |loss_PFC=14|gf_PFC=22|ga_PFC=40

|win_ROD=8 |draw_ROD=8 |loss_ROD=12|gf_ROD=31|ga_ROD=34

|win_SOC=8 |draw_SOC=10|loss_SOC=10|gf_SOC=28|ga_SOC=30

|win_TRO=16|draw_TRO=3 |loss_TRO=9 |gf_TRO=34|ga_TRO=25

|win_VAL=11|draw_VAL=9 |loss_VAL=8 |gf_VAL=24|ga_VAL=20

|name_AJA=Ajaccio

|name_AUX=Auxerre

|name_CAE =Caen

|name_FCC=Chambly

|name_CHA=Châteauroux

|name_CLE=Clermont

|name_GRE=Grenoble

|name_GUI=Guingamp

|name_HAC=Le Havre

|name_LMF=Le Mans

|name_LEN=Lens

|name_LOR=Lorient

|name_PFC=Paris FC

|name_NAN=Nancy

|name_NIO=Niort

|name_ORL=Orléans

|name_ROD=Rodez

|name_SOC=Sochaux

|name_TRO=Troyes

|name_VAL=Valenciennes

|class_rules=1) Points; 2) Goal difference; 3) Number of goals scored; 4) Head-to-head goal difference; 5) Fair play points

|res_col_header=Promotion or Relegation

|col_PRO=green1 |text_PRO=Promotion to Ligue 1

|col_REL=red1 |text_REL=Relegation to Championnat National

|result1=PRO |result2=PRO

|result19=REL |result20=REL

|status_LOR=CP

|status_LEN=P

|status_LMF=R

|status_ORL=R

}}

Results

{{#invoke:sports results|main

|source=[https://www.ligue2.fr/calendrier-resultats?seasonId=2019-2020&matchDay=28 Ligue 2]

|update=complete

|a_note=yes

|matches_style=FBR

|team1=AJA|team2=AUX|team3=CAE|team4=FCC|team5=CHA|team6=CLE|team7=GRE|team8=GUI|team9=HAC|team10=LMF|team11=LEN|team12=LOR|team13=NAN|team14=NIO|team15=ORL|team16=PFC|team17=ROD|team18=SOC|team19=TRO|team20=VAL

|name_AJA=Ajaccio

|name_AUX=Auxerre

|name_CAE=Caen

|name_FCC=Chambly

|name_CHA=Châteauroux

|name_CLE=Clermont

|name_GRE=Grenoble

|name_GUI=Guingamp

|name_HAC=Le Havre

|name_LMF=Le Mans

|name_LEN=Lens

|name_LOR=Lorient

|name_NAN=Nancy

|name_NIO=Niort

|name_ORL=Orléans

|name_PFC=Paris FC

|name_ROD=Rodez

|name_SOC=Sochaux

|name_TRO=Troyes

|name_VAL=Valenciennes

|match_AJA_AUX=2–3

|match_AJA_CAE=1–2

|match_AJA_FCC=null

|match_AJA_CHA=0–1

|match_AJA_CLE=1–1

|match_AJA_GRE=3–1

|match_AJA_GUI=null

|match_AJA_HAC=2–2

|match_AJA_LMF=2–0

|match_AJA_LEN=1–2

|match_AJA_LOR=1–0

|match_AJA_NAN=0–0

|match_AJA_NIO=null

|match_AJA_ORL=0–0

|match_AJA_PFC=1–0

|match_AJA_ROD=1–0

|match_AJA_SOC=null

|match_AJA_TRO=null

|match_AJA_VAL=2–0

|match_AUX_AJA=3–1

|match_AUX_CAE=1–1

|match_AUX_FCC=0–0

|match_AUX_CHA=null

|match_AUX_CLE=0–0

|match_AUX_GRE=0–1

|match_AUX_GUI=2–2

|match_AUX_HAC=2–0

|match_AUX_LMF=2–0

|match_AUX_LEN=null

|match_AUX_LOR=null

|match_AUX_NAN=0–0

|match_AUX_NIO=3–1

|match_AUX_ORL=2–2

|match_AUX_PFC=null

|match_AUX_ROD=null

|match_AUX_SOC=2–1

|match_AUX_TRO=1–2

|match_AUX_VAL=1–1

|match_CAE_AJA=0–1

|match_CAE_AUX=null

|match_CAE_FCC=0–0

|match_CAE_CHA=1–1

|match_CAE_CLE=0–0

|match_CAE_GRE=2–0

|match_CAE_GUI=null

|match_CAE_HAC=0–3

|match_CAE_LMF=3–3

|match_CAE_LEN=0–2

|match_CAE_LOR=1–2

|match_CAE_NAN=1–0

|match_CAE_NIO=4–3

|match_CAE_ORL=2–1

|match_CAE_PFC=null

|match_CAE_ROD=null

|match_CAE_SOC=null

|match_CAE_TRO=0–1

|match_CAE_VAL=0–0

|match_FCC_AJA=0–2

|match_FCC_AUX=1–4

|match_FCC_CAE=0–1

|match_FCC_CHA=0–0

|match_FCC_CLE=0–1

|match_FCC_GRE=0–0

|match_FCC_GUI=1–5

|match_FCC_HAC=null

|match_FCC_LMF=2–2

|match_FCC_LEN=null

|match_FCC_LOR=0–1

|match_FCC_NAN=2–1

|match_FCC_NIO=3–2

|match_FCC_ORL=1–0

|match_FCC_PFC=1–2

|match_FCC_ROD=null

|match_FCC_SOC=0–0

|match_FCC_TRO=null

|match_FCC_VAL=1–0

|match_CHA_AJA=0–1

|match_CHA_AUX=1–0

|match_CHA_CAE=2–1

|match_CHA_FCC=0–3

|match_CHA_CLE=null

|match_CHA_GRE=1–1

|match_CHA_GUI=1–5

|match_CHA_HAC=0–3

|match_CHA_LMF=null

|match_CHA_LEN=3–2

|match_CHA_LOR=1–3

|match_CHA_NAN=null

|match_CHA_NIO=1–1

|match_CHA_ORL=null

|match_CHA_PFC=0–1

|match_CHA_ROD=0–0

|match_CHA_SOC=1–1

|match_CHA_TRO=0–1

|match_CHA_VAL=null

|match_CLE_AJA=null

|match_CLE_AUX=1–1

|match_CLE_CAE=null

|match_CLE_FCC=null

|match_CLE_CHA=3–0

|match_CLE_GRE=null

|match_CLE_GUI=null

|match_CLE_HAC=2–1

|match_CLE_LMF=0–1

|match_CLE_LEN=1–1

|match_CLE_LOR=0–2

|match_CLE_NAN=2–2

|match_CLE_NIO=1–0

|match_CLE_ORL=3–1

|match_CLE_PFC=0–1

|match_CLE_ROD=0–1

|match_CLE_SOC=2–0

|match_CLE_TRO=3–2

|match_CLE_VAL=3–1

|match_GRE_AJA=0–1

|match_GRE_AUX=null

|match_GRE_CAE=1–0

|match_GRE_FCC=0–0

|match_GRE_CHA=0–1

|match_GRE_CLE=1–1

|match_GRE_GUI=null

|match_GRE_HAC=1–1

|match_GRE_LMF=null

|match_GRE_LEN=2–2

|match_GRE_LOR=null

|match_GRE_NAN=1–1

|match_GRE_NIO=3–1

|match_GRE_ORL=0–0

|match_GRE_PFC=0–0

|match_GRE_ROD=2–1

|match_GRE_SOC=null

|match_GRE_TRO=1–1

|match_GRE_VAL=1–3

|match_GUI_AJA=1–1

|match_GUI_AUX=1–0

|match_GUI_CAE=1–1

|match_GUI_FCC=null

|match_GUI_CHA=null

|match_GUI_CLE=1–2

|match_GUI_GRE=3–3

|match_GUI_HAC=null

|match_GUI_LMF=3–0

|match_GUI_LEN=1–1

|match_GUI_LOR=2–1

|match_GUI_NAN=1–1

|match_GUI_NIO=null

|match_GUI_ORL=1–0

|match_GUI_PFC=null

|match_GUI_ROD=4–1

|match_GUI_SOC=1–1

|match_GUI_TRO=0–1

|match_GUI_VAL=0–1

|match_HAC_AJA=null

|match_HAC_AUX=1–0

|match_HAC_CAE=1–1

|match_HAC_FCC=1–1

|match_HAC_CHA=0–1

|match_HAC_CLE=null

|match_HAC_GRE=3–1

|match_HAC_GUI=4–0

|match_HAC_LMF=2–0

|match_HAC_LEN=0–0

|match_HAC_LOR=2–2

|match_HAC_NAN=1–1

|match_HAC_NIO=1–1

|match_HAC_ORL=1–2

|match_HAC_PFC=0–0

|match_HAC_ROD=null

|match_HAC_SOC=null

|match_HAC_TRO=1–0

|match_HAC_VAL=null

|match_LMF_AJA=2–4

|match_LMF_AUX=0–1

|match_LMF_CAE=null

|match_LMF_FCC=1–0

|match_LMF_CHA=1–2

|match_LMF_CLE=null

|match_LMF_GRE=0–0

|match_LMF_GUI=2–1

|match_LMF_HAC=null

|match_LMF_LEN=1–2

|match_LMF_LOR=1–2

|match_LMF_NAN=1–1

|match_LMF_NIO=1–0

|match_LMF_ORL=3–2

|match_LMF_PFC=null

|match_LMF_ROD=0–0

|match_LMF_SOC=2–0

|match_LMF_TRO=null

|match_LMF_VAL=1–2

|match_LEN_AJA=null

|match_LEN_AUX=0–0

|match_LEN_CAE=1–4

|match_LEN_FCC=3–0

|match_LEN_CHA=1–0

|match_LEN_CLE=1–1

|match_LEN_GRE=0–0

|match_LEN_GUI=2–0

|match_LEN_HAC=1–3

|match_LEN_LMF=null

|match_LEN_LOR=1–0

|match_LEN_NAN=null

|match_LEN_NIO=1–0

|match_LEN_ORL=1–0

|match_LEN_PFC=2–1

|match_LEN_ROD=null

|match_LEN_SOC=4–0

|match_LEN_TRO=1–0

|match_LEN_VAL=null

|match_LOR_AJA=0–0

|match_LOR_AUX=1–0

|match_LOR_CAE=2–1

|match_LOR_FCC=1–2

|match_LOR_CHA=null

|match_LOR_CLE=0–1

|match_LOR_GRE=2–1

|match_LOR_GUI=0–1

|match_LOR_HAC=null

|match_LOR_LMF=4–2

|match_LOR_LEN=null

|match_LOR_NAN=2–1

|match_LOR_NIO=4–1

|match_LOR_ORL=null

|match_LOR_PFC=3–0

|match_LOR_ROD=2–1

|match_LOR_SOC=1–0

|match_LOR_TRO=0–1

|match_LOR_VAL=null

|match_NAN_AJA=null

|match_NAN_AUX=null

|match_NAN_CAE=null

|match_NAN_FCC=3–0

|match_NAN_CHA=2–1

|match_NAN_CLE=1–2

|match_NAN_GRE=null

|match_NAN_GUI=0–1

|match_NAN_HAC=null

|match_NAN_LMF=2–1

|match_NAN_LEN=0–0

|match_NAN_LOR=1–1

|match_NAN_NIO=2–1

|match_NAN_ORL=0–0

|match_NAN_PFC=2–0

|match_NAN_ROD=1–1

|match_NAN_SOC=1–1

|match_NAN_TRO=0–0

|match_NAN_VAL=1–0

|match_NIO_AJA=0–1

|match_NIO_AUX=2–2

|match_NIO_CAE=1–1

|match_NIO_FCC=null

|match_NIO_CHA=3–0

|match_NIO_CLE=null

|match_NIO_GRE=0–1

|match_NIO_GUI=0–0

|match_NIO_HAC=0–1

|match_NIO_LMF=null

|match_NIO_LEN=null

|match_NIO_LOR=null

|match_NIO_NAN=1–1

|match_NIO_ORL=2–0

|match_NIO_PFC=4–4

|match_NIO_ROD=2–1

|match_NIO_SOC=0–2

|match_NIO_TRO=0–2

|match_NIO_VAL=1–0

|match_ORL_AJA=0–3

|match_ORL_AUX=null

|match_ORL_CAE=null

|match_ORL_FCC=0–1

|match_ORL_CHA=1–1

|match_ORL_CLE=0–1

|match_ORL_GRE=null

|match_ORL_GUI=2–0

|match_ORL_HAC=2–2

|match_ORL_LMF=null

|match_ORL_LEN=1–4

|match_ORL_LOR=0–4

|match_ORL_NAN=null

|match_ORL_NIO=0–1

|match_ORL_PFC=0–1

|match_ORL_ROD=1–2

|match_ORL_SOC=1–0

|match_ORL_TRO=0–2

|match_ORL_VAL=0–1

|match_PFC_AJA=2–3

|match_PFC_AUX=2–0

|match_PFC_CAE=2–4

|match_PFC_FCC=0–3

|match_PFC_CHA=null

|match_PFC_CLE=0–2

|match_PFC_GRE=null

|match_PFC_GUI=0–3

|match_PFC_HAC=1–0

|match_PFC_LMF=0–3

|match_PFC_LEN=0–2

|match_PFC_LOR=null

|match_PFC_NAN=null

|match_PFC_NIO=0–1

|match_PFC_ORL=null

|match_PFC_ROD=0–0

|match_PFC_SOC=1–1

|match_PFC_TRO=1–0

|match_PFC_VAL=null

|match_ROD_AJA=null

|match_ROD_AUX=2–0

|match_ROD_CAE=2–1

|match_ROD_FCC=2–0

|match_ROD_CHA=1–2

|match_ROD_CLE=null

|match_ROD_GRE=null

|match_ROD_GUI=2–1

|match_ROD_HAC=1–2

|match_ROD_LMF=4–1

|match_ROD_LEN=1–2

|match_ROD_LOR=0–1

|match_ROD_NAN=1–1

|match_ROD_NIO=null

|match_ROD_ORL=3–3

|match_ROD_PFC=2–1

|match_ROD_SOC=0–2

|match_ROD_TRO=null

|match_ROD_VAL=1–1

|match_SOC_AJA=0–2

|match_SOC_AUX=1–0

|match_SOC_CAE=0–0

|match_SOC_FCC=null

|match_SOC_CHA=null

|match_SOC_CLE=4–0

|match_SOC_GRE=1–1

|match_SOC_GUI=3–1

|match_SOC_HAC=2–0

|match_SOC_LMF=1–0

|match_SOC_LEN=null

|match_SOC_LOR=0–4

|match_SOC_NAN=3–0

|match_SOC_NIO=null

|match_SOC_ORL=null

|match_SOC_PFC=1–1

|match_SOC_ROD=1–1

|match_SOC_TRO=0–1

|match_SOC_VAL=0–0

|match_TRO_AJA=2–1

|match_TRO_AUX=3–1

|match_TRO_CAE=2–1

|match_TRO_FCC=0–4

|match_TRO_CHA=2–0

|match_TRO_CLE=1–2

|match_TRO_GRE=1–2

|match_TRO_GUI=null

|match_TRO_HAC=1–2

|match_TRO_LMF=2–1

|match_TRO_LEN=2–0

|match_TRO_LOR=null

|match_TRO_NAN=null

|match_TRO_NIO=null

|match_TRO_ORL=1–2

|match_TRO_PFC=1–1

|match_TRO_ROD=1–0

|match_TRO_SOC=null

|match_TRO_VAL=1–0

|match_VAL_AJA=0–0

|match_VAL_AUX=null

|match_VAL_CAE=null

|match_VAL_FCC=null

|match_VAL_CHA=0–1

|match_VAL_CLE=1–0

|match_VAL_GRE=0–2

|match_VAL_GUI=0–0

|match_VAL_HAC=0–0

|match_VAL_LMF=1–0

|match_VAL_LEN=2–0

|match_VAL_LOR=3–0

|match_VAL_NAN=1–1

|match_VAL_NIO=1–1

|match_VAL_ORL=null

|match_VAL_PFC=1–0

|match_VAL_ROD=1–0

|match_VAL_SOC=3–2

|match_VAL_TRO=null

}}

Promotion play-offs

A promotion play-off competition was originally to be held at the end of the season, involving the third, fourth and fifth-placed teams in 2019–20 Ligue 2, and the 18th-placed team in 2019–20 Ligue 1. However, the matches were cancelled and the 18th-placed Ligue 1 team remained in the same division.

;Cancelled bracket

{{5TeamBracket|nowrap=y|byes=2|legs=1/1/2|aggregate=score

| RD1= Quarter-final

| RD2= Semi-final

| RD3= Final

| RD1-seed1=

| RD1-team1=N/A

| RD1-score1=

| RD1-seed2=

| RD1-team2=N/A

| RD1-score2=

| RD2-seed1=3

| RD2-team1=N/A

| RD2-score1=

| RD2-seed2=

| RD2-team2=N/A

| RD2-score2=

| RD3-seed1=

| RD3-team1=N/A

| RD3-score1-1=

| RD3-score1-2=

| RD3-score1-agg=

| RD3-seed2=18th

| RD3-team2=N/A

| RD3-score2-1=

| RD3-score2-2=

| RD3-score2-agg=

}}

Relegation play-offs

A relegation play-off was originally to be held at the end of the season between the 18th-placed Ligue 2 team and the third-placed team of the 2019–20 Championnat National. However, the matches were cancelled and both teams remained in their respective divisions.{{cite web|url=http://www.foot-national.com/foot-le-comex-valide-les-montees-de-pau-et-dunkerque-133360.html|title=Le COMEX valide les montées de Pau et Dunkerque|publisher=foot-national.com|language=fr|date=11 May 2020}}

Top scorers

class="wikitable" style="text-align:center"
Rank

!Player

!Club

!Goals{{cite web |url=https://www.soccerway.com/national/france/ligue-2/20192020/regular-season/r54072/|title=French Ligue 2 Statistics |website=Soccerway |access-date=9 March 2020}}

1

|align="left"|{{flagicon|ZIM}} Tino Kadewere

|align="left"|Le Havre

|20

2

|align="left"|{{flagicon|AUT}} Adrian Grbić

|align="left"|Clermont

|17

rowspan=2|3

|align="left"|{{flagicon|FRA}} Yoane Wissa

|align="left"|Lorient

|rowspan=2|15

align="left"|{{flagicon|FRA}} Ibrahim Sissoko

|align="left"|Niort

5

|align="left"|{{flagicon|FRA}} Teddy Chevalier

|align="left"|Valenciennes

|12

6

|align="left"|{{flagicon|FRA}} Ugo Bonnet

|align="left"|Rodez

|11

rowspan=2|7

|align="left"|{{flagicon|FRA}} Gaëtan Courtet

|align="left"|Ajaccio

|rowspan=2|10

align="left"|{{flagicon|SEN}} Abdoulaye Sané

|align="left"|Sochaux

9

|align="left"|{{flagicon|FRA}} Pierre-Yves Hamel

|align="left"|Lorient

|9

rowspan=3|10

|align="left"|{{flagicon|SEN}} Jamal Thiaré

|align="left"|Le Havre

|rowspan=3|8

align="left"|{{flagicon|FRA}} Vincent Créhin

|align="left"|Le Mans

align="left"|{{flagicon|FRA}} Florian Sotoca

|align="left"|Lens

References

{{Reflist}}