Samuel Umtiti was the hero for France as his second-half header sealed a 1-0 victory over Belgium and a place in the World Cup final.
The Barcelona defender rose high at the near post on 51 minutes to divert an Antoine Griezmann corner beyond Thibaut Courtois as France edged a tense, tactical semi-final in Saint Petersburg.
Sensational saves from Hugo Lloris and Courtois prevented the game from setting alight in the first half before Umtiti’s header and a resilient defensive unit proved too tough an obstacle for Roberto Martinez’s men to overcome.
The result means it will be bronze at best for Belgium’s golden generation at Russia 2018 while France can set their sights on Moscow and a third World Cup final, where either England or Croatia stand between them and football’s greatest prize.
Kylian Mbappe set pulses racing with a dart into Belgium territory inside the first minute, but if France thought that would herald in a period of first-half dominance they were quickly proven wrong by a classy Belgian outfit, not overawed by their first World Cup semi-final since 1986.
Eden Hazard nearly capped an electric start to the game with a crisp strike into the top corner after 19 minutes, but an excellent defensive header from Raphael Varane rescued France.
Olivier Giroud should have done better when Griezmann and Mbappe combined to present him with a sight of the Belgian goal on 34 minutes.
When France did manage to find the target, they found Courtois in inspired form, the Chelsea goalkeeper thwarting Benjamin Pavard with a sprawling save at the end of an intricate attack on 40 minutes.
Romelu Lukaku had the chance to put a subdued first half behind him when Axel Witsel’s cross landed perfectly for him within two minutes of the restart, but he headed over the bar.
After Giroud had seen a shot blocked behind for a corner off Vincent Kompany, Manchester United striker Lukaku was made to pay as Umtiti stole a march at the near post to power a header beyond Courtois.
France pushed for a quick-fire second as brilliance from Mbappe set up Blaise Matuidi and Giroud for chances, both of which were blocked, before the introduction of Dries Mertens brought Belgium back into contention.
But there was no way through the French defence for Belgium – Lloris parrying away Witsel’s long-range effort – as their World Cup hopes fizzled out at one end, and fine saves from Courtois to deny Griezmann and Corentin Tolisso kept the scoreline respectable at the other.