The worst Milan performance of the season. At San Siro, on Matchday 32 of Serie A, Runjaic’s Udinese dismantled the Rossoneri 0-3 with a Bartesaghi own goal on 27 minutes, an Ekkelenkamp header on 37 and a clinical Atta finish on 71. It is Milan’s fifth league defeat of the season, the second in a row after the Napoli loss and the fourth in the last seven matches. Leao was substituted in the 77th minute to a storm of boos from a San Siro crowd that had lost all patience. Champions League qualification is no longer a certainty.
First-half horror show: two goals conceded and boos at the break
Allegri went with the 4-3-3 he had announced on the eve of the match, deploying Leao as a central striker flanked by Pulisic and Saelemaekers. But the experiment lasted about as long as a summer storm. Milan started nervously while Udinese pressed high and denied them space.
On 9 minutes Pulisic had the first chance but was wayward. Then at 16 minutes the first alarm bell: Leao caught Kabasele with a stray arm and was booked, then sarcastically applauded referee Marchetti. A needless flash of frustration that set the tone for his evening.
On 27 minutes Udinese took the lead: Zaniolo burst forward, beat Pavlovic with a sharp turn and played in Atta, whose cross-shot deflected off Bartesaghi and wrong-footed Maignan. An unfortunate own goal: 0-1. From that point Milan lost their composure. On 31 minutes Leao slowed down a Pulisic counter-attack by playing a lazy ball backwards: the first audible boos rang around the stadium.
On 35 minutes Davis burst into the box and fired: Maignan got a hand to it and the crossbar came to his rescue. Two minutes later came the second: Zaniolo, in inspired form, floated a cross into the box for Ekkelenkamp, who rose above De Winter and headed home. 0-2 on 37 minutes. Before half-time Kristensen came close to making it three on the break. San Siro booed the players off: it was already a nightmare.
Second half: Milan try but Udinese deliver the knockout blow
Allegri made an immediate change: off came Athekame, on came Fullkrug, with Saelemaekers dropping to right-back. On 51 minutes the Belgian found a superb strike from range: Okoye produced a world-class save, tipping the ball onto the crossbar. It was the moment Milan could have got back into it, but luck said no.
Headers from Fullkrug and Pavlovic sailed over the bar, while Fofana wasted a fine opportunity with a tame effort from close range. Udinese were under pressure but never cracked.
On 66 minutes came the surreal episode: Runjaic substituted Zaniolo (number 10), and Leao, seeing 10 on the board, assumed it was for him. He walked off the pitch and began removing his shin pads before realising his mistake and sheepishly returning. A moment that summed up the Portuguese forward’s mental state.
On 71 minutes the killer blow: Rabiot lost possession in midfield and Udinese broke at lightning speed. Ekkelenkamp laid it off for Atta, who struck a precise right-footed shot inside the near post from the edge of the box. De Winter in front of him and Maignan in goal could only watch: 0-3.
On 77 minutes Leao was replaced by Loftus-Cheek. San Siro erupted into a deafening chorus of boos. Allegri embraced him as he left the pitch, but the message from the stands was unmistakable. On 73 minutes Maignan had prevented a fourth goal with a fine save from Davis’s angled drive.
Milan player ratings
Maignan 5.5 — Blameless on the own goal, sharp save on Davis and again on 73 minutes. Let down by his teammates.
Athekame 5.5 — Tried to push forward but lacked end product. Replaced at half-time.
De Winter 5 — Outjumped by Ekkelenkamp for the second goal, poor positioning for Atta’s strike too.
Pavlovic 5.5 — Zaniolo twisted past him for the first goal. Too many errors in possession.
Bartesaghi 5 — The own goal was unlucky but the whole evening was one to forget. Before kick-off he sweetly carried a frightened mascot girl overwhelmed by the packed San Siro.
Ricci 5.5 — The most wasteful midfielder, gave the ball away too often. Replaced on 60 minutes.
Modric 5.5 — Tried to thread passes but was read every time. Showed signs of fatigue.
Rabiot 6 — Energy and personality, but his 71st-minute turnover led directly to the third goal. A generous pass mark.
Saelemaekers 6 — The brightest performer alongside Pulisic. Superb strike on 51 minutes that deserved a goal. Selflessly dropped to full-back after the break.
Leao 4.5 — A disastrous evening. Booked for a needless foul, slowed his teammates’ attacks, squandered chances, confused Zaniolo’s substitution for his own. Booed three times by the crowd. The lowest point of his season.
Pulisic 6 — The only one who consistently tried to create: two dangerous efforts, sharp dribbling. But it was not enough.
From the bench
Fullkrug 5 — Header over the bar, barely involved. Fofana 5 — Weak shot from a good position. Jashari 5.5 — Minimal impact. Nkunku 5 — Unable to make a difference. Loftus-Cheek n/r
Allegri 4.5 — The 4-3-3 experiment with Leao as striker failed miserably. The team offered no reaction; four defeats in seven matches is an alarming trend.
Match facts
Milan 0-3 Udinese
Goals: 27’ Bartesaghi OG, 37’ Ekkelenkamp, 71’ Atta
Bookings: 16’ Leao (M), 46’ Kristensen (U)
Milan (4-3-3): Maignan; Athekame (46’ Fullkrug), De Winter, Pavlovic, Bartesaghi; Ricci (60’ Fofana), Modric (72’ Jashari), Rabiot; Saelemaekers, Leao (77’ Loftus-Cheek), Pulisic (72’ Nkunku). Coach: Allegri
Udinese (3-5-2): Okoye; Kristensen, Kabasele, Solet; Ehizibue, Ekkelenkamp (86’ Miller), Karlstrom, Atta (85’ Zarraga), Kamara; Zaniolo (66’ Piotrowski), Davis (76’ Gueye). Coach: Runjaic
Referee: Marchetti (Ostia Lido) — VAR: Maggioni
Standings and what comes next
Milan remain on 63 points, with Como (who face Inter tomorrow) five points behind and Juventus (playing at Bergamo this evening) six adrift. Champions League qualification — which seemed all but certain just a few weeks ago — is suddenly hanging in the balance. Udinese climb to 43 points in tenth place.
Allegri said after the match: “A single game shouldn’t destabilise a year’s work”. But the numbers are damning: this is the first time since 21 February 2021 (0-3 against Inter) that Milan have lost by three goals or more without scoring at home. And for the first time in Serie A, an Allegri-coached side has lost at home without scoring by a three-goal margin.
There are no words. This was not a defeat — it was a surrender. Milan must look in the mirror and find the strength to respond, because Champions League football is no longer a given. On Sunday they travel to Verona: another evening like this simply cannot happen.
Forza Milan, sempre. Even when it hurts.