Ante Rebic struck the winner as Milan got the better of Roma in a wild Stadio Olimpico clash to narrow the gap on leaders Inter with a 2-1 victory.
The Serie A title battle might have been all but over if Milan had lost this game, but chances came thick and fast and it was a wonder there were only three goals.
The first was a Franck Kessie penalty in the 43rd minute, but Roma got level early in the second half thanks to Jordan Veretout's fine finish.
Rebic scored a classy winner just before the hour; however, he and Zlatan Ibrahimovic both left the fray with injury concerns, having played their part in trimming Inter's lead to four points.
Ibrahimovic almost scored three times in the opening five minutes, having a powerful shot tipped over by Pau Lopez, another cleared off the line by Federico Fazio, and a backheel trickle wide after he pinched the ball from the feet of the dithering goalkeeper. From the second of those, Fikayo Tomori tucked in the loose ball but was offside.
Milan had the ball in the net for a second time in the ninth minute, Ibrahimovic tapping in Rebic's pass, but again the offside flag was raised. The veteran Swede also headed powerfully over minutes later.
Roma, having posed no threat for the opening 27 minutes, had the ball in the net themselves when Henrikh Mkhitaryan headed in after a corner, but a foul by Gianluca Mancini on Theo Hernandez meant it was ruled out.
Milan were awarded their penalty after a VAR check showed Davide Calabria was caught inches inside the box by Fazio, who stood on the defender's foot. Kessie fired low into the right corner.
Roma drew level in the 50th minute, a delicious strike from Veretout finding the far right corner, and Ibrahimovic, whose threat was diminishing as he battled what looked like a thigh problem, made way for Rafael Leao soon after.
Rebic went from second fiddle to chief orchestrator in attack, and he impressively turned Mancini on the edge of the box before firing across Lopez and into the right corner to restore Milan's lead in the 58th minute.
His game was soon over though, with Rebic complaining of a leg injury as he retreated to the bench, Rade Krunic on in his place.
Mkhitaryan was inches away from making it 2-2 when he fizzed a shot just over, and he was then thwarted by an alert save from Gianluigi Donnarumma. Krunic saw a 45-yard attempt tipped over by Lopez as Milan, in a helter skelter game, held on for a valuable win on the road.
What does it mean? Milan are not going down without a fight
Defeats against Spezia and Inter on consecutive weekends dealt Milan a major blow in their quest for a 19th Scudetto and first for 10 years.
They were unconvincing in edging out Red Star Belgrade in the Europa League too, but this was more like it. However, if those injuries sustained by Ibrahimovic and Rebic are anything but small knocks, that will be a major problem for coach Stefano Pioli.
Milan might have coasted if Zlatan took his chances
Milan led 11-9 on shots at half-time, not taking into account those that were disallowed for offside, with Ibrahimovic having had four goal attempts inside that opening 10 minutes, each one a decent chance.
They had an xG (expected goals) rating of 2.3 by the break, which highlighted the quality of the chances they created. It felt rather harsh on those in blue shirts when Roma levelled, but the home side improved as the game went on while injury-hit Milan faded.
Come full-time, Roma had edged ahead 18-17 on the shots front, but the Giallorossi could not force another goal and trailed 3.1 to 1.4 in the xG stakes.
Mancini caught out
Roma's Mancini was far too easily outfoxed by Rebic on the edge of the penalty area for Milan's second goal. It was not the defender's night, giving away a game-high four fouls, including the one that was spotted before Mkhitaryan headed home in the first half. He won possession nine times for his team, more than anyone else, but was sold a dummy when it mattered most.
Key Opta Facts:
- Kessie has now scored eight goals in the Italian top-flight this season: his record in a single Serie A campaign.
- Prior to Kessie, the last Milan player to score a penalty away to Roma in Serie A was Giampaolo Pazzini in December 2012.
- Milan have taken 15 penalties in Serie A 2020-21 so far: since Opta collected this data (2005), only Lazio (18) and Genoa (16) have had more in a single top-flight campaign (both last season).
- They have also hit the woodwork 16 times, more than any other side this season (twice as many as Roma).
- Rebic is the fourth Milan player with 5+ goals scored in the current Serie A season: only Napoli (five) have more players with 5+ goals.
- Meanwhile, Rebic has scored four goals in his last four Serie A appearances, as many as he managed to score in his previous 21.
Milan face Udinese at San Siro on Wednesday, with Roma travelling to play Fiorentina on the same evening.