Having lost 3-2 in October in Madrid, the 13-time winner fell 2-0 in Kiev on Tuesday thanks to a second half goals from Dentinho and Manor Solomon.
The Brazilian forward, who came on as a first half substitute because of an injury to teammate Júnior Moraes, was the beneficiary of some sloppy defending from Rafael Varane and tapped home the first goal of the game.
And it was another quick counterattack that carved Madrid open yet again, with Solomon driving from inside his own half before powering the ball home.
A victory in Ukraine would have secured a last-16 spot for Madrid but defeat leaves it third in Group B with just one round of fixtures left.
“In the first half we were very good, but we didn’t cap things off with a goal,” coach Zinedine Zidane said afterwards. “We pressed well, played the ball well, but the ball didn’t want to go in tonight and then things just got more complicated.
“It would have changed the dynamic hugely if we’d got that first goal. When Shakhtar scored it really damaged us because we’d been playing really well. We made two or three really good chances and hit the post. Yes we are on a bad run of results but the only way forward is to continue. This was a ‘final’ and we prepared well for it; the ball just wouldn’t go in tonight. Now we have a game left — we must win it and go through.
“I’m an optimist, this is a complicated moment but we have to draw on our character and pride. It’s a real pity about this because we didn’t deserve to lose here. Now it’s time to believe.”
Despite having the prestige and the high-value players, Real Madrid has stuttered during the 2020 Champions League.
The memorable upset by Shakhtar in the opening round of fixtures — in which the Ukraine side was without seven starting players, and 10 in total due to a combination of positive coronavirus cases and injuries — perhaps offered a glimpse of what was to come for Real.
A dramatic equalizer salvaged a point at Borussia Monchengladbach before two wins against Inter Milan gave Madrid hope.
However, after a run of inconsistent results in La Liga, including three games without a win — two defeats and one draw — Madrid looked bereft of ideas after traveling east.
Despite the inclusion of young, attacking players Martin Ødegaard and Marco Asensio, it was the Ukraine side who looked the most dangerous throughout.
Without creating too many openings, Madrid dominated possession but were eventually caught on the break, as Dentinho was the quickest to react after a deflected pass just missed Varane’s clutches to fire past Thibaut Courtois.
Zidane threw on exciting attackers Vinicius Junior and Isco in the hopes of creating an opening but yet again, with men thrown forward, was caught cold.
Having picked up the ball well in his own half, Solomon drove at a backpedaling Real Madrid defense before extending the Ukraine club’s lead.
Madrid huffed and puffed for the final 10 minutes but created very little, as the game fizzled out with Shakhtar overtaking the Champions League specialists with just one game left in the group stages.
Real has never failed to qualify for the knockout stages of a Champions League campaign in 24 attempts — so the pressure will be on to get a result when it faces Borussia Monchengladbach next week.