Madrid fell behind when substitute Nacho turned away Vedat Muqiri’s header for Andriy Lunin – a late substitute for the injured Thibaut Courtois – on 13 minutes.
The champions toiled long without absent striker Karim Benzema and missed a golden chance to equalize when Predrag Rajkovic saved Asensio’s second-half penalty.
The result meant Los Blancos squandered the chance to close their gap on LaLiga leaders Barcelona ahead of their game against Sevilla on Sunday, handing the Blaugrana a chance of eight points.
Mallorca, fresh from three consecutive home wins, wasted no time in taking the lead. Muriqi met Dani Gonzalez’s cross and his pinpoint header was parried by Nacho before curling past Lunino.
Madrid controlled the rest of a scrappy first half but failed to register a single shot on target before the break as the likes of Federico Valverde and Antonio Rudiger were limited to ambitious long-range efforts to clear the crossbar.
The visitors had a great chance to equalize on the hour mark when a VAR review ruled that Rajkovic had fouled Vinicius Junior. However, the goalkeeper made up for his mistake with a correct guess and brilliantly denied Asensio.
Ancelotti introduced the likes of Luka Modric and Toni Kroos in a bid to inspire Madrid, who had lost just once in their nine previous away games against Mallorca before Sunday’s game.
Substitute Mariano Diaz volleyed just wide and Rudiger headed home late but the stubborn hosts held on to deal a massive blow to their title defence.
Real Madrid player ratings (4-3-3)
GK: Andriy Lunin – 5/10 – Standing in for the injured Thibaut Courtois, Lunin could hardly be blamed for failing to rebuff Nacho’s looping own goal.
RB: Dani Carvajal – 2/10 – Incredibly, criminally, lacklustre in the opening stages of the game. Madrid’s only source of width on the right but offered little going forward.
CB: Antonio Rudiger – 6/10 – Forceful and physical when defending on the deck, less assured up against an aerial threat.
CB: Nacho Fernandez – 4/10 – A little unfortunate to see the ball bounce off the back of his head and beyond Lunin.
LB: Eduardo Camavinga – 7/10 – Showed few signs of fulfilling an unnatural position before he was returned to midfield for the final 20 minutes.
CM: Fede Valverde – 2/10 – Amid blustery conditions, Valverde seemed intent on trying to beat Rajkovic with a swerving effort from range. It didn’t work.
CM: Aurelien Tchouameni – 6/10 – Sweeping up at the base of midfield, Tchouameni broke up a number of Mallorca’s breakaways.
CM: Dani Ceballos – 5/10 – Peppering his performance with penetrative passes, Ceballos flitted in but mostly out of the game.
RW: Marco Asensio – 3/10 – On his return to Mallorca, Asensio departed to boos from the home ground and not many cheers from the away contingent after missing a penalty.
ST: Rodrygo – 5/10 – Buzzing around the fringes of the contest.
LW: Vinicius Junior – 6/10 – Boasting a personal feud with numerous members of Mallorca’s lineup – and the manager – Vinicius was even more eager to take on his marker, getting more joy as the game wore on.
Luka Modric (64′ for Valverde) – 4/10 – Brought on to find a way through the maze, Modric looked as lost as everyone else in white.
Mariano Diaz (71′ for Asensio) – 5/10
Toni Kroos (71′ for Tchouameni) – 5/10
David Alaba (71′ for Ceballos) – 5/10
Carlo Ancelotti – 3/10 – Compared to his usual placid demeanour, Ancelotti was incandescent on the sidelines throughout the match. His side consistently lacked width, scarcely stretched their hosts and deservedly failed to pierce Mallorca’s fierce resolve.