An encouraging start saw Marco Asensio hit the post from close range inside the first five minutes after being picked out by Karim Benzema. The French striker had a shot saved himself, before Asensio went close again with half an hour played, combining with Martin Odegaard before seeing his effort tipped over the bar.
Things went horribly wrong after half-time, though. Thibaut Courtois saved well from Taison before substitute Dentinho capitalised on a Raphael Varane mistake to put Shakhtar ahead. Then, as the visitors pushed for an equaliser, Manor Solomon scored a stunning second on the counterattack to leave Madrid's hopes of progressing to the knockout stage in real jeopardy.
Benzema's return to the team was welcome, given his status and importance to the attack. He needs to stay fit now if Madrid are to achieve anything this season. There was plenty to like about the performance in the first half, too, with Asensio and Odegaard impressive, but that will be entirely overshadowed by what happened after the break.
A win here would have seen Madrid put their group-stage worries behind them and qualify for the round of 16. Instead, they were left worrying about what happens between Borussia Monchengladbach and Internazionale, after another frustratingly inconsistent night. A largely positive first-half display was marred by the failure to make any of the chances created count, and in the second half familiar defensive failings returned to haunt them. A cold, snowy night in Kiev ended up being another, potentially costly slip up. Madrid have now won just one of their past five matches in all competitions.
Manager rating out of 10
4 -- Zinedine Zidane made four changes to the team beaten by Alaves in La Liga. The most notable was the return of Benzema from injury, while Ferland Mendy replaced Marcelo at left-back, Odegaard came into midfield and Rodrygo came in for the injured Eden Hazard. The team looked good in the first half, but when things went wrong in the second, there didn't seem to be any clear action plan to steady the ship. Zidane waited far too long before making changes, introducing Isco, Vinicius Junior and Mariano far too late.
Player ratings (1-10; 10 = best. Players introduced after 70 minutes get no rating)
GK Thibaut Courtois, 6 -- No errors to match his dreadful mistake against Alaves at the weekend. Barely had a save to make in the first half, and then did really well to deny Taison. Not to blame for either goal.
DF Lucas Vazquez, 5 -- One of Madrid's more consistent players in recent weeks, but was part of the collective failure here that led to a second-half defensive collapse. Offers an outlet on the right and gives the team width, even if the end product isn't always there.
DF Raphael Varane, 4 -- No player has made more mistakes leading to goals in the Champions League this year. Took an early yellow card to prevent a Shakhtar break, hurting their top scorer Junior Moraes in the process. Lucky to escape a second yellow for a foul on his replacement Dentinho. Beaten for pace by Taison after half-time, and was then responsible for the opening goal.
DF Nacho, 5 -- Admitted pre-match that he's relishing the chance to play in his preferred centre-back position with Sergio Ramos out. A first-half mistake gave Shakhtar the opportunity to counter, resulting in Varane's yellow. Had one second-half half chance to score, heading over.
DF Ferland Mendy, 6 -- Had a share of the blame for Shakhtar's opening goal, too. Didn't get forward too often. Madrid don't tend to lose when Mendy starts, but they did on this occasion.
MF Toni Kroos, 7 -- Not at the supreme level we saw last time out in Europe against Inter, but far from the team's worst performer. One late overhit free kick when Madrid desperately needed a goal summed up the night.
MF Luka Modric, 6 -- Played a lovely first-half through ball for Benzema. Still incredibly mobile, but appeared to tire a little later.
MF Martin Odegaard, 7 -- Growing in confidence and influence. Combined beautifully with Asensio for a first-half chance. He's starting to find his role in the team now.
FW Marco Asensio, 8 -- Looked better than he has for a long time. Busy from the start, hitting the post inside the first five minutes, and then having a shot tipped over. Asensio has been a fairly consistent disappointment since coming back from his long-term injury but Zidane says he just needs to be left alone to find his form.
FW Rodrygo, 6 -- It sometimes feels like if Rodrygo doesn't score, his contribution to the team is limited. One nice moment of skill just after half-time, but not much else.
FW Karim Benzema, 6 -- Back from injury and captained the team in Ramos' absence. Has now played 124 Champions League games, putting him in the competition's top ten. An active first half, crossing for Asensio's early chance and having a fierce shot saved. Less involved in the second, and was taken off.
FW Vinicius Junior, N/R -- Made a difference immediately on the left-hand side, looking dangerous whenever he got the ball.
MF Isco, N/R -- Couldn't provide any late magic to spark a comeback.
FW Mariano Diaz, N/R -- Barely touched the ball in his 15 minutes on the pitch.