Leicester Tigers fly-half Ford scored a try to go with three penalties and two conversions as England came through in Treviso, Italy.
Now Ford and his colleagues, including Tigers flanker Matt Everard and prop Ryan Bower, will face defending champions New Zealand in Sunday’s final.
A try from London Wasps wing Christian Wade gave England a great start but France’s response was immediate as Perpignan prop Sebastian Taofifenua burrowed over to score.
Jean Pascal Barraque for France and Ford for England exchanged penalties and some good footwork from the England No10 – the youngest man in the tournament at 18 – gave him the opening to dive over for the second try and a 13-10 lead at the break.
A Barraque penalty levelled the scores missed and then wing Marvin O’Connor scored for France for a five-point lead at 18-13.
England hit back five minutes later as full-back Ben Ransom touched down and Ford’s conversion gave England the lead again.
A Ford penalty after 65 minutes opened England’s lead up to five points, but France almost scored their third try 10 minutes later in bizarre circumstances. A French line-out was won by England, but another ball appeared on the pitch and the line-out was taken again. France won at the second attempt and almost scored in the corner, but the TV Match Official ruled that the ball wasn’t touched down.
Ford converted a long-range penalty to give England an eight point lead before France went over England’s tryline, only for Irish referee John Lacey to pull play back after spotting a forward pass.
With the clock past 80, France were throwing everything at England, but a loose pass in their own half was snapped up by captain Alex Gray who ran through unopposed to touch down between the posts and Ford’s conversion brought the game to a close.
England U20: 15 Ben Ransom (Saracens), 14 Jonathan Joseph (London Irish), 13 Guy Armitage (London Irish), 12 Owen Farrell (Saracens), 11 Christian Wade (London Wasps), 10 George Ford (Leicester Tigers), 9 Chris Cook (Bath Rugby); 1 Mako Vunipola (Saracens), 2 Mikey Haywood (Northampton Saints), 3 Will Collier (Harlequins), 4 Joe Launchbury (London Wasps), 5 Charlie Matthews (Harlequins), 6 Matt Kvesic (Worcester Warriors), 7 Matt Everard (Leicester Tigers), 8 Alex Gray (c) (Newcastle Falcons). Replacements: 16 Rob Buchanan (Harlequins) for Haywood 53 mins, 17 Ryan Bower (Leicester Tigers) for Collier 77 mins, 18 Sam Twomey (Harlequins) for Launchbury 77 mins, 19 Sam Jones (London Wasps) for Kvesic 57 mins, 20 Dan Robson (Gloucester Rugby) for Cook 65 mins, 21 Mills (Gloucester Rugby) for Farrell 50 mins, 22 Marland Yarde (London Irish) for Armitage 56 mins