Dan Biggar scored Wales' only try as they beat France 20-13 in Paris on Saturday.
Wales' second win takes them to four points on the Six Nations log, level with England and Ireland, who meet in Dublin on Sunday. With two defeats from three matches, France's Six Nations title hopes are all but gone.
Warren Gatland's men enjoyed 76% possession and 64% territory in the first half, yet only led 6-3 at the break courtesy of two Leigh Halfpenny penalties.
France's first-half points came from a Camille Lopez penalty with the flyhalf missing one just before the break. The hosts were also disappointed not to be awarded a try in the 34th minute when Lopez's pass to Yoann Huget was called forward by the assistant referee.
The kicking duel continued in the second half with Lopez and Halfpenny exchanging penalties, before Wales struck a crucial blow with 20 minutes to go. Rhys Webb broke the line 35m out, with Dan Lydiate giving a pop pass to Dan Biggar, who scored in the right-hand corner. Halfpenny slipped when attempting the conversion, but kicked his fourth penalty to make it 17-6.
France got themselves right back into the game when Brice Dulin scored a 68th-minute try in the left-hand corner and Lopez nailed the touchline conversion.
Halfpenny, though, kicked another penalty to increase Wales' lead to seven, and while France dominated the final few minutes, two knock-ons meant they were unable to score a match-levelling try.
France – Try: Brice Dulin. Conversion: Camille Lopez. Penalties: Lopez (2).
Wales – Try: Dan Biggar. Penalties: Leigh Halfpenny (5).
France – 15 Brice Dulin, 14 Yoann Huget, 13 Rémi Lamerat, 12 Wesley Fofana, 11 Sofiane Guitoune, 10 Camille Lopez, 9 Morgan Parra, 8 Damien Chouly, 7 Bernard Le Roux, 6 Thierry Dusautoir (c), 5 Yoann Maestri, 4 Romain Taofifenua, 3 Rabah Slimani, 2 Guilhem Guirado, 1 Eddy Ben Arous.
Subs: 16 Benjamin Kayser, 17 Uini Atonio, 18 Vincent Debaty, 19 Jocelino Suta, 20 Loann Goujon, 21 Sebastien Tillous-Borde, 22 Rémi Talès, 23 Mathieu Bastareaud.
Wales – 15 Leigh Halfpenny, 14 George North, 13 Jonathan Davies, 12 Jamie Roberts, 11 Liam Williams, 10 Dan Biggar, 9 Rhys Webb, 8 Toby Faletau, 7 Sam Warburton (c), 6 Dan Lydiate, 5 Alun-Wyn Jones, 4 Luke Charteris, 3 Samson Lee, 2 Scott Baldwin, 1 Gethin Jenkins.
Subs: 16 Richard Hibbard, 17 Paul James, 18 Aaron Jarvis, 19 Bradley Davies, 20 Justin Tipuric, 21 Mike Phillips, 22 Rhys Priestland, 23 Scott Williams.
Photo: Franck Fife/AFP Photo