It was a bittersweet victory for the Danes, who had to settle for second place in Group A1 despite their comprehensive victory over the reigning champions.
Denmark started the game on the front foot, but they failed to capitalise on their early pressure.
France grew into the game and came close to opening the scoring when a corner found its way to Kylian Mbappe. But the Paris Saint-Germain striker was denied by Kasper Schmeichel.
The OGC Nice goalie was called into action again to keep out Antoine Griezmann after some intricate play with Mbappe.
Despite France’s pressure, the Danes drew first blood just after the half-hour mark after they caught Didier Deschamps’ side out on the transition.
Christian Eriksen found Mikkel Damsgaard on the left wing. The Brentford winger then put in an early cross into the box for Kasper Dolberg to finish past Alphonse Areola.
There was a flurry of chances for the Danes after the first goal, with Thomas Delaney heading Eriksen’s cross straight at Areola.
The West Ham United goalkeeper was called into action again from close range by Damsgaard before Eriksen’s audacious attempt to score directly from a corner was tipped over the crossbar.
Denmark’s pressure paid off in the 39th minute. Les Bleus failed to deal with a corner, and the ball fell kindly for Andreas Skov Olsen, who rifled a shot past Areola to put the Danes 2-0 up.
France began the second 45 minutes with renewed vigour, perhaps hit with the realisation that relegation looms if they fail to secure a win.
Mbappe became more of a threat down the left and came close to pulling one back for France. He was played through by Griezmann but was denied by Schmeichel.
The PSG star was at it again, picking up the ball in a central position and having a go, but again Schmeichel did enough to turn it away for a France corner.
Nkunku came on for Giroud, looking to make a difference. His glancing header set Mbappe up for another chance, but his fierce shot was straight at the Danish goalie.
Schmeichel was determined to see out the game with a clean sheet, and he stood tall to deny another effort from Griezmann as Denmark held on for a memorable victory.
Kasper Hjulmand’s side got the win, but they failed to usurp Croatia for a place in the Nations League finals after Croatia’s victory over Austria.
France failed to secure consecutive victories after ending their winless streak with a 2-0 win over Austria last week.
Deschamps’ side looked clueless for most of the first half. Despite their attacking firepower failed to break down a dogged Danish defence.
They have narrowly escaped relegation from the Nations League, but they look far from a team ready to defend their World Cup title.
France will get their chance for vengeance against Denmark when both sides battle it out at the World Cup on November 26.
- Argentina 2-0 Mexico: Player ratings as Albicelestes defeat El Tri
- Messi hauls Argentina past Mexico, France book a knockout berth & more
- ‘It was a dream come true’ – Robert Lewandowski in euphoric mood after netting first-ever World Cup goal
- France 2-1 Denmark: Player ratings as Mbappe hits brace
- ‘We’re not dead yet’ – Herve Renard keeps the faith following Poland defeat