AC Milan fell 0-3 to Udinese at San Siro on Saturday afternoon, and the result was shaped before half-time: an own goal in the 27th minute and a second strike ten minutes later gave Kosta Runjaic's visitors a two-goal cushion that Marco Landucci's Milan never came close to overturning.

The opening goal arrived through misfortune rather than defensive collapse — an own goal on 27 minutes that deflected Milan's momentum before it had properly formed. Udinese did not wait for the home side to recover. Ten minutes later, in the 37th, they converted a second, and the Rossoneri walked into the interval two goals down and already carrying a yellow card conceded in the 16th minute. The half-time substitution — one change made immediately at the break — signalled that Landucci understood the scale of the problem. It did not solve it. Udinese midfielder Jens Ekkelenkamp, who had assisted the move that led to the 37th-minute goal, continued to find space in behind a Milan midfield that had no answer to Udinese's directness. The third goal arrived in the 71st minute, a normal goal that closed any theoretical route back for the hosts and triggered a wave of substitutions from both benches — four changes across the two sides in the following six minutes.

The performance of the afternoon belonged to Udinese forward Keinan Davis, who finished with a rating of 8.2, one goal, and one assist across his 86 minutes on the pitch. Davis did what his rating only partially captures: he held the ball under pressure in the channels, brought teammates into play at the moments Milan's defensive line was most disorganised, and converted his own chance with the composure of a player who had read the game correctly from the first whistle. Udinese defender Christian Kabasele matched Davis's 8.2 rating across 72 minutes, providing the defensive solidity that allowed Runjaic's side to press high without fear of the counter. Four further Udinese players recorded ratings of 7.3, a collective consistency that reflects how thoroughly the visitors controlled the contest rather than relying on individual brilliance.

Milan's problems were structural. The own goal that opened the scoring is the kind of event that can happen to any defence, but the 37th-minute concession — coming before the home side had time to reset — exposed a fragility in how Landucci's team defends transitions. Udinese's Umar Attah, who contributed an assist in his 66 minutes, repeatedly found space on the right side of Milan's defensive shape. The Rossoneri's recent form compounds the concern: this defeat is their third in four league matches, with losses also to Napoli on April 6th and to Lazio on March 15th. The 1-0 win against Inter on March 8th now looks like an outlier rather than evidence of a trend.

For Udinese, the win is their second away from home in their last four league outings, following the 2-0 victory at Genoa on March 20th. Runjaic's side had drawn their previous fixture 0-0 against Como, and this result demonstrates they retain the capacity to perform at a significantly higher level when the occasion demands it. The head-to-head record between these clubs now stands at one win apiece from their two most recent meetings, which tells you less about the balance of power than the scoreline at full time does.

Milan's position in the table tightens uncomfortably. Three defeats in four matches, including two at home across the season, leave Landucci with a squad that must now produce results in the final weeks of the campaign without the margin for further slippage. Udinese, by contrast, move with the confidence of a team that has just beaten one of Serie A's historically significant clubs by three goals on their own ground.

A month from now, this match will be remembered as the afternoon Udinese walked into San Siro and left with a scoreline that made the result look routine.