Christophe Galtier’s side headed into Sunday evening’s last round of 2020/21 fixtures holding a one-point lead over Paris Saint-Germain at the summit and knowing that a win away at Angers would see them claim only a fourth French top-flight title.
Angelo Fulgini did reduce the deficit for Angers in second-half stoppage time, but Lille - who finished fourth last season - held on to claim a crucial 2-1 victory and complete a remarkable story.
Rivals PSG needed to win at relegation-threatened Brest and hope that Lille did not beat Angers, though a 2-0 win for Mauricio Pochettino’s men sealed thanks to Kylian Mbappe - crowned Ligue 1 player of the year in addition to winning the Golden Boot - and a Romain Faivre own goal was ultimately in vain.
PSG did seal second spot and automatic qualification for next season’s Champions League group stages, while the Parisians - beaten by Manchester City in the semi-finals of this year’s competition - did also avoid a rare trophy-less season last week by beating AS Monaco in the French Cup Final.
Monaco also still had a chance to win the Ligue 1 title on the final day, though would have needed to beat Lens and hope that Lille and PSG both lost, while also making up a goal difference deficit.
As it was, they drew 0-0 at the Stade Bollaert-Delelis, though Lyon were unable to sneak into the top three and snatch the last Champions League spot at their expense after a 3-2 defeat at home to Nice.
Monaco will enter next season’s Champions League in the third qualifying round, while Lyon will be joined in the Europa League group stages by Marseille, who clinched fifth spot with a 1-1 draw against Metz.
Rennes, meanwhile, beat Nimes 2-0 to take sixth and a place in the inaugural Europa Conference League ahead of Lens.
At the other end of the table, Brest secured another season in Ligue 1 despite losing to PSG as Nantes were defeated 2-1 by Montpellier and will now face a relegation/promotion play-off against Toulouse next week.
Nimes and Dijon had already been relegated.