Match ends, Denmark 0, France 0.
Denmark joined France in the last 16 of the World Cup after playing out the first goalless draw of the tournament, which was greeted by boos at the final whistle.
A draw was good enough to see a much-changed French side top Group C, while Denmark knew a point would be enough for them too, even if Australia beat Peru.
That scenario resulted in a game that lacked ambition, chances and any element of danger, not helped by news midway through the first half that Peru were winning in Sochi.
The fans in Moscow's Luzhniki Stadium were initially enthusiastic enough, especially the red-shirted Danes who packed one end.
But they saw little in the way of goal-mouth excitement, with the first shot on target arriving in the 39th minute, when France's Antoine Griezmann turned to fire a tame effort at Kasper Schmeichel from the edge of the area.
- How you rated the players in France v Denmark
- Who needs what? Remaining group permutations
- Peru beat Australia for first World Cup win in 40 years
Denmark did fashion the best chance of the first half, when France keeper Steve Mandanda just beat Christian Eriksen to Andreas Cornelius's excellent low cross.
But their only shot on target came after 54 minutes when Mandanda spilled Eriksen's free-kick. The Marseille keeper recovered before Cornelius could capitalise on the rebound.
Both sides stepped up their safety-first approach as the second half progressed - bringing jeers and whistles from many neutrals in the stadium - to ensure they got the result they desired.
France, who rested midfield trio Paul Pogba, Blaise Matuidi and Corentin Tolisso - all of whom were a booking away from a ban - will play the runners-up in Group D in Kazan on Saturday.
That could be any one of the four teams, while Denmark's fate is a little clearer after Peru's 2-0 win over Australia confirmed their qualification in second place. Age Hareide's side will play the Group D winners, either Croatia or Nigeria, in Nizhny Novgorod on Sunday.
France must wait to find their rhythm
France had won their first two games without really finding their rhythm and Didier Deschamps' decision to make six changes meant that was always unlikely to happen here either.
There were some brief glimpses of the quality that Deschamps has at his disposal, thanks to Griezmann's intelligent movement behind the Denmark defence, and right-back Djibril Sidibe's runs up the right flank.
Liverpool target Nabil Fekir also showed some nice touches when he replaced Griezmann for the last 20 minutes, and did come close to breaking the deadlock when he fired into the side-netting.
But otherwise there was little urgency on display, and no sense the France players had any desire to clinch their third successive win.
Denmark through - but not in style
Denmark are into the knockout stages of a World Cup for the first time since 2002 and are unbeaten in their past 18 games, but this display will not have allayed the critics of their head coach Hareide.
Norwegian Hareide's pragmatic approach has already annoyed Danish fans and media alike, and a performance like this one is unlikely to make him many new friends.
A bright start, that saw Middlesbrough's Martin Braithwaite make some incisive runs down the right wing, soon petered out as Denmark defended in numbers.
Even with Australia 2-0 down and Denmark's progress virtually assured, Hareide's side dropped deeper as the second half progressed and made their intentions clear.
Man of the Match - Christian Eriksen (Denmark)
The longest wait for a 0-0 at a World Cup - the key stats
- France have gone unbeaten in the group stage in consecutive World Cup tournaments for the first time (P3 W2 D1 in 2014 and 2018).
- Since their defeat to Portugal in the Euro 2016 final, France have only lost one of their 13 games in competitive action (W9 D3).
- This was the first 0-0 of the 2018 World Cup, making it the longest wait from the start of a single tournament for one - there had been 36 games played prior to today.
- Denmark and France have drawn an international for the first time since September 1976 (1-1), with this being just the second draw in 16 total meetings.
- This was Didier Deschamps' 79th game in charge of France, equalling Raymond Domenech's record with the national team.
- Deschamps' 79 games in charge of France have now produced nine 0-0 results, with this the first since a stalemate with Luxembourg in September 2017.
- Kasper Schmeichel (two in three games) has now kept more clean sheets for Denmark at the World Cup than his father Peter (one in five games).
- Prior to his substitution in the 68th minute, Antoine Griezmann didn't complete a single pass to strike partner Olivier Giroud.
- There were just four shots (including blocks) from inside the box in this game (four for France, none for Denmark) - the fewest in any game so far at the 2018 World Cup.
'Denmark wanted a draw' - what they said
Denmark manager Age Hareide: "We were up against one of the best counter-attack teams in the world, so we would have been stupid to give them space.
"OK, it was a 0-0 but we are very pleased with that."
France manager Didier Deschamps: "It wasn't the most exciting game because Denmark wanted a draw.
"We had a number of opportunities but one point was good enough for them and we didn't have to take any risks. One point was good for everyone.
"It was a difficult and challenging group but we've reached our objective. Now we have a second phase and we must climb to get to the next level.
"It's not that easy - look at big teams like Argentina, Spain or Germany, they've all had difficulties here,"
- 13M JorgensenBooked at 45mins
- 17Stryger Larsen
- 8DelaneySubstituted forLeragerat 90+2'minutes
- 23SistoSubstituted forFischerat 60'minutes
- 21CorneliusSubstituted forDolbergat 75'minutes
- 9N Jørgensen
- 21HernándezSubstituted forMendyat 50'minutes
- 11DembéléSubstituted forMbappéat 78'minutes
- 7GriezmannSubstituted forFekirat 68'minutes
- Sandro Meira Ricci
- Shots on Target
Second Half ends, Denmark 0, France 0.
Substitution, Denmark. Lukas Lerager replaces Thomas Delaney.
Delay over. They are ready to continue.
Delay in match Thomas Delaney (Denmark) because of an injury.
Presnel Kimpembe (France) wins a free kick on the left wing.
Foul by Kasper Dolberg (Denmark).
Attempt saved. Nabil Fekir (France) left footed shot from outside the box is saved in the bottom left corner. Assisted by Kylian Mbappé.
N'Golo Kanté (France) wins a free kick in the attacking half.
Foul by Thomas Delaney (Denmark).
Attempt missed. Olivier Giroud (France) left footed shot from the right side of the box is too high. Assisted by Djibril Sidibe with a headed pass.
Substitution, France. Kylian Mbappé replaces Ousmane Dembélé.
Substitution, Denmark. Kasper Dolberg replaces Andreas Cornelius.
Attempt missed. Olivier Giroud (France) header from the centre of the box misses to the right. Assisted by Benjamin Mendy with a cross.
Steven N'Zonzi (France) wins a free kick in the defensive half.
Foul by Thomas Delaney (Denmark).
Attempt missed. Nabil Fekir (France) left footed shot from outside the box is close, but misses to the left. Assisted by Thomas Lemar.
Offside, Denmark. Jens Stryger Larsen tries a through ball, but Viktor Fischer is caught offside.
Substitution, France. Nabil Fekir replaces Antoine Griezmann.
Foul by Antoine Griezmann (France).