Madrid lost the 2nd leg encounter at home 1-3 against Juventus, but progressed through with an overall 4-3 aggregate.
On the other hand, Bayern Munich were held to a 0-0 draw at home by Sevilla, but that was enough for them to secure last-four qualification.
10-man Juve put up a commanding show
Being 0-3 down in the first leg, Juventus gave their all to level the score at 3-3 at the Santiago Bernabeu.
Mario Mandzukic scored two goals in first-half with well taken headers to give his side the impetus.
Frenchman Blaise Matuidi then made the most of an error by Navas to make it 3-0.
But it all fell apart in the injury-time.
Buffon red card, CR7's calm finish change tie
The match was heading towards extra-time until Gianluigi Buffon was awarded a red card by the referee for reacting on the penalty awarded to Real Madrid.
Mehdi Benatia had brought down Lucas Vazquez, and the whole scenario of the tie changed.
In the 97th minute Ronaldo finished calmly from the penalty spot to send Real in last four.
Ronaldo continues to get goals
Ronaldo's goal was his 15th this campaign in UCL. It was also his third against Juventus over two legs. The man for the big occasion has scored in every knockout tie since 2016-17 UCL season. It was his 120th goal in 150 UCL appearances.
Sevilla go down after spirited show
Bayern Munich reached their seventh semi-final in nine campaigns after a 0-0 draw at the Allianz Arena.
After a 2-1 victory at Seville, the Bundesliga giants failed to get past the Spanish opponents this time.
Sevilla need to be credited for holding Bayern. Bayern have enjoyed a dominating season at home.
Bayern failed to score for the first time in 22 Champions League home-matches.
Real, Bayern join Roma and Liverpool in semis
And then there were four!
Liverpool 🏴 Roma 🇮🇹 Bayern 🇩🇪 Real Madrid 🇪🇸