The Spaniard beat the Swiss legend 6-3, 6-4, 6-2 at the Philippe-Chatrier Court in the 39th meeting between the two stalwarts.
While Federer was playing the French Open for the first time since the 2015 edition, it was Nadal who re-established himself as the best player in the world on clay court after a brief slump due to injuries.
The 11-time champion will now face either world No. 1 Novak Djokovic or Austrian fourth seed Dominic Thiem who will clash in the other semifinal later in the day.
It was a windy day in Paris and despite water being poured on the court to keep the clay down, the wind kept kicking up the dust. Nadal raced to a 3-0 lead in the first set before Federer fought back with a hold and a break to make it 3-2. Nadal responded by breaking back and then went on to win the next two games to pocket the set.
Federer took a 2-0 lead in the second set as Nadal struggled to adjust to the dust that was being blown due to the wind, but soon levelled up the set. It was an even contest until 4-4 before Nadal broke Federer and then served out the set.
The third was a more one-sided affair, although Federer did initially take a 1-0 lead. His next win in the set, however, came only to delay Nadal’s victory as the Swiss held his serve at 5-2. Nadal eventually served for the match and raised his arms to soak in the applause from the crowd at the Philippe-Chatrier Court.