Memphis Depay grabbed a late winner as Lyon triumphed against Marseille 3-2 in the battle for a European place.
Elsewhere in France, the relegation battle continued for another week with Troyes, Lille and Metz all dropping points once again.
For all the action in Ligue 1 this weekend, read below:
Monaco 2-1 Lille
Monaco tightened their grip on second place, after coming from behind to defeat relegation contenders Lille.
The visitors started the matchday in the bottom three, but started superbly and took a surprise lead after 16 minutes. Lebo Mothiba steered Thiago Mendes’ delivery past Danjiel Subasic at the near post, after creating a yard of space and finishing coolly.
Lille could have moved two goals in front, but Mothiba was denied by Subasic after being released by the returning Yassine Benzia, following the attacker’s efforts to rob Djibril Cisse of possession.
But Monaco finally found the leveller moments before half-time, former Lille forward Rony Lopes slotting home at the second time of asking after being teed up by Keita Balde. And last season’s champions took the lead, and the three points, on the hour mark when substitute Stevan Jovetic delicately steered a chipped effort over Mike Maignan.
Toulouse 2-2 Strasbourg
Yaya Sanogo and Bakary Kone’s last-minute efforts forced a share of the spoils between Toulouse and Strasbourg.
The scoring was opened in the first attack after the restart, Jeremy Blayac prodding Jonas Martin’s cross past Alban Lafont with his knee. Stephane Bahoken then headed home after 62 minutes, but the goal was ruled out for offside.
The game then fully burst into life in the latter stages. Yaya Sanogo headed Issiaga Sylla’s delivery beyond Alexandre Oukidja, before seemingly finding the winner with a strike two minutes into stoppage time.
But Strasbourg, without a win in their last five, fought back with one of the final kicks of the game – Kone’s header deflecting off Max Gradel and finding the back of the net.
Montpellier 2-2 Dijon
Wesley Said snatched a late draw for Dijon at high-flying Montpellier. With just four points separating the sides, the mid-table clash saw the visitors move into the lead just before the half hour mark.
Said was played through one-on-one against Benjamin Lecomte, and ruthlessly slotted through the shot stopper’s legs, his eighth Ligue 1 goal of the season.
But Montpellier fought back after half-time, and fired themselves into the lead. Ellyes Skhiri collected Casimir Ninga’s pull back and fired past Baptiste Reynet to level, before Giovanni Sio turning home Jonathan Ikone’s cross after 66 minutes. The home side should have wrapped up the three points minutes later, but Isaac Mbenza inadvertently fired wide from close range.
The miss was punished in the 91st minute, when Said finished off a rapid counter-attack to rescue a point in the dying stages.
Angers 3-0 Caen
Angers picked up from their impressive performance against Paris Saint-Germain in midweek with a comfortably home victory over Caen.
The scoring was superbly opened after just ten minutes, when Flavien Tait hammered home an effort from 25 yards into the top corner. Angers moved into a two goal lead just before the half-time break, Karl Toko Ekambi scoring his 16th of the season after latching onto Tait’s flick and finishing past Remy Vercoutre emphatically.
The third goal arrived after 74 minutes. Angelo Fulgini played the ball across the penalty area, and Prince Oniangue converted from close range, his first goal since joining the club in January.
Amiens 1-1 Troyes
A key clash near the foot of the Ligue 1 table resulted in Amiens and Troyes sharing the points after a 1-1 stalemate.
The home side took the lead after 37 minutes, from the penalty spot. Mathieu Deplagne tugged back Lacina Traore inside the area, and Moussa Konate continued his rich vein of scoring form after stroking home from 12 yards despite Erwin Zelazny’s best efforts.
But within two minutes of the restart, Troyes were level. Adama Niane was impeded inside the box and fired home the resulting penalty, his seventh of the season. The shared spoils means that both sides remain fiercely in the relegation scrap heading into the final part of the season.
Bordeaux 0-2 Rennes
Rennes’ hopes of European qualification continued after easing to victory over struggling Bordeaux.
The first half passed with few notable chances, but the deadlock was broken soon after a mistake from Bordeaux goalkeeper Benoit Costil. Whabi Khazri’s strike was spilled by the shot stopper onto the post, and Ismaila Sarr was on hand to bundle home the rebound, continuing his recent form in front of goal.
Four minutes before time, Rennes secured the three points. Khazri teed up ex-Bordeaux midfielder Yohann Gourcuff, who slotted calmly past Costil.
Nice 1-2 Paris Saint-Germain
Leaders Paris Saint-Germain came from behind to beat Nice in Sunday’s lunchtime kick off, the Parisians ninth consecutive victory.
Edinson Cavani fired an early effort off the woodwork, but it was Nice who took the lead soon after. Alassane Plea slotted through Allan Saint-Maximin, who raced clear of Yuri Berchiche and finished unerringly past Alphonse Areola.
But PSG were level just four minutes later. Berchiche robbed goalscorer Saint-Maximin of possession before releasing Angel di Maria, the Argentine then nutmegged Dante and fired into the net.
Kylian Mbappe saw a finish chalked off after 63 minutes following di Maria’s clever flick, before Dani Alves was denied spectacularly by Walter Benitez. Mario Balotelli, Nice’s leading goalscorer, twice struck the woodwork before Alves, the smallest player on the pitch, headed Adrien Rabiot’s delivery past Benitez for the winner.
Metz 1-1 Nantes
Basement side Metz were held to a home draw against struggling Nantes, whose hopes for a European place took another blow.
The visitors were dealt an early blow after 12th minute, when Nolan Roux stole in from close range to poke home Danijel Milicevic’s corner – his 12th league goal of the season.
Eiji Kawashima denied Rene Khrin’s volley after 22 minutes, but was beaten just 60 seconds later by Valentin Rongier’s effort into the far corner.
Neither side could find another goal, leaving Metz adrift at the bottom of the table and Rennes’ European hopes in the balance.
St Etienne 2-0 Guingamp
St Etienne extended their unbeaten streak in Ligue 1 to eight games, after a comfortable home victory over Guingamp.
The home side made a deserved breakthrough in the 29th minute. Remy Cabella’s corner kick wasn’t dealt with, and Robert Beric was able to deliver for Neven Subotic to finish from close range.
And eleven minutes before time, St Etienne wrapped up another three points. Cabella cut infield from the left, danced into the penalty area and fired past Karl-Johan Johnsson – his fourth league goal of the season.
Marseille 2 – 3 Lyon
Lyon’s hopes of securing a top three place received a major boost after Memphis Depay’s last minute winner secured a late victory against Marseille.
The home side took the lead after half hour, when Rolando converted from close range after Adil Rami’s flicked header. But it was Marseille’s other centre-half Adil Rami who inadvertently provided Lyon with the equaliser just three minutes before the interval, after slotting past his own goalkeeper.
In the 52nd minute, Lyon edged in front. Bertrand Traore fed Houssem Aouar, who drilled into the bottom corner past the experienced Steve Mandanda. But Marseille pushed hard for an equaliser after falling behind and deserved fired themselves level on 84 minutes, Kostas Mitroglou heading past Anthony Lopes.
But just as it looked as though Lyon would be forced to settle for a point, substitute Memphis Depay nodded the visitors to victory after Mariano’s clever cushioned assist.