Rennes edged out Lille and Monaco to secure a top-four finish while Nantes' first league win since February saw them stay up at Auxerre's expense on a dramatic final day of Ligue 1 action.
Rennes clinched a 2-1 victory against Brest thanks to a Benjamin Bourigeaud brace, seizing on Lille's 1-1 draw with relegated Troyes and Monaco's 2-1 reverse against Toulouse to take fourth.
Bruno Genesio's side thus secured Europa League football for next season, while Paulo Fonseca's Lille must settle for a Europa Conference League spot and Monaco missed out entirely.
Champions Paris Saint-Germain squandered a two-goal lead in a 3-2 loss to Clermont, meaning they finished just one point clear of runners-up Lens, who ended the season with a 3-1 win at Auxerre.
That victory allowed Nantes to finalise a great escape in their final game, vaulting Auxerre to secure safety with a 1-0 win over relegated Angers.
Nantes therefore secured top-flight football for another year, evading the expanded four-team relegation zone by a single point ahead of the division being cut to 18 teams.
Auxerre, Ajaccio, Troyes and Angers will play in Ligue 2 next season, with Le Havre and either Metz or Bordeaux coming up from the second tier.