Alcaraz, 19, overcame a fall and ankle injury to beat five-time champion Nadal 6-2, 1-6, 6-3.
"It means a lot to me," the youngster gushed after the win.
"All the hard work that I put in every day pays off today. To beat Rafa, to beat the best player in history on clay, it means a lot to me."
Alcaraz will now face three-time champion Djokovic on Saturday, with the world's top-ranked player flying high after easily brushing aside Poland's Hubert Hurkacz 6-3, 6-4 in the quarterfinals.