Atalanta punish Milan’s fragility at San Siro to tighten the Serie A race
AC Milan left themselves too much to do in a chaotic late push as Atalanta’s clinical 3-2 win exposed defensive lapses and deepened the pressure around the top-four battle.
AC Milan’s margin for error is shrinking, and Atalanta made sure of it.
In a match that swung between control, panic and a frantic late surge, Gian Piero Gasperini’s side came away from San Siro with a 3-2 victory that felt bigger than a routine three points. Atalanta were sharper in both boxes, more ruthless in transition and calmer in key moments, while Milan spent too much of the night chasing problems of their own making.
For Massimiliano Allegri, this was the kind of defeat that lingers. Milan did eventually threaten a comeback, scoring twice in the closing stages, but the broader story was already written by then: soft defensive sequences, lost duels in central areas and another damaging step in a tense race for Champions League qualification.
Atalanta struck first and never fully loosened their grip
The warning signs arrived early. Adrien Rabiot went close for Milan with a driven effort that skimmed past the outside of the post, but any sense that the hosts were settling quickly disappeared almost immediately.
Inside seven minutes, Atalanta were ahead.
Giacomo Raspadori’s initial effort was blocked, yet the loose ball fell kindly for Ederson, who reacted fastest and drilled his finish home despite the crowd of Milan defenders trying to close him down. It was a scrappy goal in one sense, but it captured Atalanta’s early edge: they were alive to second balls, aggressive around the area and far more decisive when moments opened up.
That first goal did not jolt Milan into control. If anything, Atalanta grew into the contest with greater authority. Nikola Krstovic and Nicola Zalewski both forced Mike Maignan into action as the visitors continued to find spaces between Milan’s lines.
The second goal, arriving in the 29th minute, was even more revealing. Davide Zappacosta drove forward, beat his man and fired across goal and into the far corner, a finish that rewarded both his directness and the lack of resistance in front of him. Milan’s defensive shape was again too easy to disturb, and Atalanta were punishing every opening.
Milan responded, but only in flashes
To Milan’s credit, there was a reaction before the break. It just was not enough.
Santiago Gimenez, Rafael Leao and Alexis Saelemaekers all tested Marco Carnesecchi as the hosts finally began to generate pressure in sustained spells. The movement improved, the tempo lifted and San Siro briefly sensed a route back into the game.
Yet this was one of those nights when pressure without precision offered limited comfort. Carnesecchi stood up well when called upon, and Atalanta entered half-time with their two-goal lead intact.
That mattered, because the next major swing went their way too.
Early in the second half, Atalanta won the ball back high up the pitch, one of the themes of the evening. Milan were too loose in possession, and the punishment was immediate. Ederson, afforded far too much room, picked out Raspadori, who finished with conviction to make it 3-0 in the 51st minute.
At that stage, the match looked done. And in truth, despite what happened late on, that feeling was largely accurate. Milan’s comeback gave the final minutes drama, but Atalanta had already built the platform with superior execution over the first 80-plus minutes.
A late scramble changed the scoreline, not the main verdict
The final stretch belonged to Milan, but only after they had spent most of the evening on the back foot.
Christopher Nkunku threatened twice as the hosts searched for a way through, while Niklas Fullkrug thought he had pulled one back only to see his finish ruled out for offside. Those moments hinted at life, but time was running away.
Eventually, Milan found a first goal in the 88th minute. Strahinja Pavlovic met Samuele Ricci’s free-kick and nodded across goal and in, reducing the deficit and forcing a flicker of anxiety into Atalanta’s night.
Then, deep into stoppage time, Nkunku was brought down by Marten de Roon. The forward converted the resulting penalty with power, suddenly cutting the margin to 3-2 after 94 minutes.
For a moment, San Siro believed in an escape act.
It never arrived.
Fullkrug had one more late chance, flicking a header wide, and that miss effectively closed the door. Milan’s rally had energy, but it arrived too late to erase the damage done over the previous hour and a half.
The top-four picture is getting uncomfortable for Milan
The immediate consequence is simple: Milan’s top-four position looks increasingly vulnerable.
They remain fourth only on a superior head-to-head record against Roma, which says plenty about how narrow the margin has become. In isolation, one defeat against a strong Atalanta side is survivable. In context, it is much more troubling.
Milan are now without a win in their last three Serie A matches, drawing one and losing two. For a side trying to lock down a Champions League place, that is poor timing. Even more concerning is the pattern underneath the run: defensive uncertainty, inconsistent control and a growing dependence on late-game urgency rather than early-game authority.
There is also the psychological layer. Milan have now failed to win any of their last six league meetings with Atalanta, drawing two and losing four, while this result marked a second straight home league defeat to La Dea. That is no longer a bad matchup in isolation; it is a recurring problem.
The numbers tell a familiar story: volume for Milan, efficiency for Atalanta
On paper, Milan created enough to make this more competitive.
They finished with 20 shots, nine of them on target, and generated 1.94 expected goals. That figure was boosted by Nkunku’s late penalty, but it still points to a team that fashioned opportunities. The issue was not a total lack of threat. The issue was timing, clarity and the defensive cost attached to every missed chance.
Atalanta, by contrast, attempted only nine shots and produced 1.08 expected goals, with five efforts on target. Yet they scored three times and looked more coherent in the phases that decide matches. They did not need long periods of sterile control. They needed clean transitions, assertive pressing moments and conviction in front of goal.
That clinical edge was the difference.
In modern football, there are games where one side wins the territory battle and another wins the decisive moments. This was not quite that. Milan had their spells, especially late, but Atalanta were the more convincing team in the phases that mattered most. They were better at turning regains into danger, better at attacking disorganisation and better at punishing hesitation.
What this result says about both teams
For Atalanta, this was the latest example of a side that remains awkward, intense and highly capable of dismantling opponents who lose structure. Gasperini’s team did not overwhelm Milan with constant pressure, but they repeatedly found the right moments to accelerate. That made them dangerous throughout.
Ederson was central to that, scoring once and creating another, while Raspadori’s influence in the final third gave Atalanta a constant threat. Zappacosta’s goal also reflected the visitors’ confidence to attack from wide areas with purpose rather than just possession.
For Milan, the concerns are less about isolated mistakes and more about the broader balance of the team. They can still create chances. They still carry individual quality. But there are too many stretches when they look vulnerable to direct pressure, too open after turnovers and too reliant on emotional surges once the match state has already turned against them.
That is a dangerous way to live at this stage of the season.
Allegri will point to the chances, the late push and the possibility that a little more composure could have changed the outcome. He would not be entirely wrong. But the bigger truth is that Atalanta looked like the more complete side for most of the night, and Milan’s late flurry should not distract from that.
At San Siro, the comeback nearly came. The warning, though, arrived much earlier.