Benjamin Corgnet scored in each half, either side of Romain Hamouma's fine strike. Mevlut Erding also headed off the post for the visitors.
Valenciennes grabbed one back 12 minutes from time after Moustapha Bayal was harshly adjudged to have handled the ball in the area and Maor Melikson converted the resulting penalty.
Reims drew 0-0 at Montpellier, and Evian won its second successive match, but almost let a comfortable lead slip before securing a 3-2 victory at Ajaccio.
Brice Dja Djedje gave Evian the lead at the end of the first half and a double from Kevin Berigaud seemed to have handed the visitors the points before Paul Lasne and Gadji Tallo scored late to set up a nervy final five minutes.
Newly promoted Nantes beat Sochaux 1-0, with Filip Dordevic heading in Banel Nicoli?a's free kick 15 minutes from time.
Fellow promoted side Guingamp drew 1-1 at home to Bastia, and rued a penalty miss.
Wahbi Khazri fired in a superb opener for Bastia shortly after halftime but Guingamp leveled two minutes from time thanks to Mustapha Yatabare's penalty after Christophe Mandanne was tripped in the area by Drissa Diakite.
Guingamp had a great chance to snatch all three points when it was awarded another penalty in stoppage time after Fethi Harek handled in the area, but Bastia goalkeeper Mickael Landreau saved Yatabare's spot kick, with the Guingamp striker opting to fire to the right again.